参考自:
常见的通讯协议总结(USART、IIC、SPI、485、CAN)-CSDN博客
UART那么好用,为什么单片机还需要I2C和SPI?_哔哩哔哩_bilibili
5分钟看懂!串口RS232 RS485最本质的区别!_哔哩哔哩_bilibili
喜欢几位博主老师老师的还请看原贴/原视频
数据通信
数据通信是指通过某种传输媒介(如电线、光纤、无线电波等)在计算机系统或设备之间传输数据的过程。这两种通信方式都是实现数据传输的基本技术,它们在数据传输的实现方式上有所不同,但都遵循一些共同的通信原理和协议。
串行通信与并行通信(两种基本的数据通信)
串行通信:
特点: 数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种。
- 串行通信指的是数据按位顺序,一个接一个地在单一的通信线上进行传输。
- 它通常使用更少的线缆,因此在物理布线上更为经济。
- 串行通信的速度可能较慢,但适合长距离通信。
- 常见的串行通信协议包括RS-232、RS-485、I2C、SPI、UART等。
如下图
并行通信:
特点: 多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高。
- 并行通信允许多个数据位同时在多个通道上进行传输。
- 它需要更多的线缆,因此在物理布线上成本更高。
- 并行通信通常速度更快,但不适合长距离通信,因为信号间的干扰和同步问题会随着距离增加而变得更加严重。
- 常见的并行通信协议包括PCI、AGP、SATA等。
二者对比
传输模式
下面我们就来了解串行通信的几种常见协议
UART
概念
UART(Universal Asynchronous Receiver/Transmitter,通用异步接收器/发送器)是一种串行通信协议,广泛应用于嵌入式系统和各种设备之间的通信。
主要内容:
1. 串行、异步、全双工通信:UART允许数据在发送和接收设备之间进行全双工通信,即同时发送和接收数据,且通信是异步的,不需要时钟信号来同步数据位。
2. 数据帧格式:UART的数据帧通常由起始位、数据位、奇偶校验位(可选)、停止位组成。数据位通常为7或8位,起始位为1位,停止位可以是1或2位。
3. 波特率(Baud Rate):波特率是UART通信的数据传输速率,表示每秒传输的码元数量。常见的波特率有300、1200、2400、9600、19200、38400、115200等。
4. 数据位:数据位是实际传输的数据,可以是7位或8位,取决于通信双方的约定。
5. 起始位和停止位:起始位是一个逻辑“0”位,用于标记数据帧的开始;停止位是一个或两个逻辑“1”位,用于标记数据帧的结束。
6. 奇偶校验:奇偶校验位用于检测数据传输过程中的错误,可以是奇校验或偶校验。
7. 硬件结构:UART通常包括发送模块和接收模块,以及用于控制通信的寄存器和控制逻辑。
8. 控制信号:UART通信可能包括控制信号,如载波检测(CD)、载波发送(CTS)、请求发送(RTS)、允许发送(TX)、载波接收(RX)等。
9. 错误检测和纠正:UART协议可以通过奇偶校验位来实现基本的错误检测,但不具备错误纠正能力。
10. 应用场景:UART广泛应用于嵌入式系统、微控制器、计算机与外部设备(如打印机、调制解调器等)之间的通信。
uart框架图
只考虑RX,TX,GND
帧格式
下图是一帧数据额基本格式 10位(1+8+1)
UART不足->由此产生了其他通信
1.不能远距离传输信号(RS232 RS485)
2.通信速度慢 (SPI)
3.不能实现一对多的通信(IIC)
TTL电平
TTL高电平: (2.4V-5V) 低电平:(0-0.4V)
为什么不能远距离通信:
串口通信使用TTL电平,抗干扰的能力比较弱(一般就是同一块电路板上的两个芯片 和 距离比较进的两块电路板之间)
(像我们调试串口设备的时候进程就会用到CH340这个USB和TTL的转接口)
如下图,
TTL高电平最小为2.4V, 低电平最大为0.4V ,只差了2V -->当受到静电的时候低电平很容易变成高电平,对数据传输造成干扰
受到静电干扰,低电平变成高电平 --> 串口通信的距离很短
(1m之内:一块电路板上的两个芯片,电脑和芯片)
RS232/RS485 - 解决UART不能远距离通信
RS232(异步双全工)图
工作原理
232电平
高电平(3V-15V)
低电平(-15V-3V)
通过MAX232这课芯片把TTL电平转为232电平 --> (RS232 只是改变了电平大小,传输的数据是不变的,也是全双工通讯)
转换结果如下
注意: 转换是双向的
RS232的转换实例
最大好处 --> 抗干扰能力增强
优化效果
抗干扰能力增强 ->通信距离可达15m
对应传输的速率只有20k (太慢啦 -- RS485来解决)
RS485图(异步半双工)
工作原理
只需要两根线 去表示逻辑0,1
串口TTL信号转为差分信号(通过差分信号去表示逻辑0,1)
差分信号为什么抗干扰能力强
1.使用两个信号的差值去表示逻辑0,1
2.使用双绞线
可以看成在受到干扰的时候两个信号同时受到干扰,他的差值不变-->抗干扰能力强
优化效果
2000m 的传输距离
50M的串口频率
支持1对多通信
注意: RS485是半双工通讯,只有两跟线去差分控制电平,不能T/S收发,否则需要四根线
这样就能一主多从通信了
RS232 和 RS485对比图
RS232靠拉大电平区间
RS485靠差分
SPI (同步全双工)- 解决UART传输慢的问题
UART为什么慢
波特率 - 每秒传输的符号(如位、字节等)的数目
以115200 为例: 算出对应的传输速率//对于115200的波特率,当考虑到通常的串行通信格式(如1个起始位、8个数据位、1个停止位,且没有校验位)时,每个字节实际上需要10个位来传输。 --> 115200 Bps (波特率) ÷ 10 位/字节 = 11520 Bps (字节每秒)
//1 kB(千字节)等于1024 B(字节)
11520 Bps ÷ 1024 =11.25 kbps(kb/s)
SPI框架图
SPI采用一主多从
SPI的四条数据线
1.SS -- 片选 信号线(一般低电平有效(根据接收对象而定),主机选择需要通信的从机)
2.SCK时钟信号线 (由主设备产生)
3.MOSI (主发从接)
4.MISO(从发主收)
SPI向存储器读写数据
写数据
我们采用的存储器SS是高电平有效
四种采集方式
时钟SCK的空闲态: 高/低电平 & 上升沿/下降 的四种组合。
下面给出空闲态是低电平,上升沿采集的方式样例
采样条件
1.SS为有效电平(这里是高电平)
2.SCK是上升沿(也可以是下降沿 -->具体需要查看芯片手册)
采样图
读写数据表
IIC
由于串口通信需要约定波特率 -->
早起单片机的频率标比较低,以及精度的问题 --> 传输速率太快容易出现误码
SPI 加入一个CLOCK信号,通过上升沿去读取数据,这样之后就完全不依赖系统时钟的准确度了,
而是完全依赖自带的时钟信号去做信号的同步,能大大提高传输的速率,最大10M(适用:SD卡和屏幕这种对速率有要求的外设会采用这种协议)
IIC -- 最大优势支持多设备的相互通信
概念
I2C(同步半双工)通讯协议(Inter-Integrated Circuit),引脚少,硬件实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
特点
(1) 它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式400kbit/s ,高速模式下可达 1Mbit/s,但目前大多 I2C 设备尚不支持高速模式。
(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。
IIC框架图
一主多从
典型的总线协议
时钟线完全是由主机掌握 ,
数据线 在 应答位 & 和读数据的释放给从机
IIC下各种状态
注意: SCL为高打的时候才能表示状态
SDA高 ->空闲
SDA下降沿起始信号
开始传递信息之后(传递完起始信号之后)
SDA 高 - 逻辑1
SDA低 - 逻辑0
给出一组数据样例
SDA上升沿 - 停止信号