协议 | USART | SPI | I2C | 总线 | TXD、RXD、GND | CSN、MISO、MOSI、GND | VCC、GND、SCL、SDA | 同步/异步 | 异步 | 同步 | 同步 | 全/半双工 | 全双工 | 全双工 | 半双工 | 传输速度 | 较低 | 高 | 中 | 场景 | 板内/板间 | 板内/板间(板间距离需要短,速度需要低) | 板内 | 模式 | 一对一 | 一对多 | 一对多/多对多 | 多从机实现 | 不可多从机 | 使用CSN寻址 | 地址 | 等了这么多期,终于有一期我能稍微参加一点的了,简单的三种协议对比可参考上表,但是因为环境和应用的偏差,以及大神的花式操作,上表所述可能不尽详细,望各位海涵。
USART
首先是USART,这是一种异步的全双工通信方式,通信速度一般较低。因为没有时钟线,所以通信的双方需要保持相同的波特率,否则会造成数据异常。单纯的USART通信只适合短距离的通信,但是在此基础上加上RS485、RS232等电路也可实现较远距离的通信。传统的USART通信波特率一般在115200bps及以下,但是现在的技术提升,可以达到4M甚至8M的通信波特率。属于简单易用的通信方式。在代码实现和调试时都比较简单。
SPI
SPI是一种高速的同步全双工通信,因其具有时钟线和数据接收和发送线,可以做到数据收发一体。四根线分别是CS(片选)、MOSI(主发从收)、MISO(从发主收)、CLK(时钟)。通信时主机送出CLK信号,主机到从机的数据在MOSI线上传输,从机到主机的数据在MISO线上传输。在启动传输之前,需要先拉低,对应从机的CS管脚,在传输完成之后,再拉高CS管脚。缺点是在进行一主多从通信时,每多一个从机就多一根CS线,在高速以及硬件IO足够时可选用。
I2C
I2C是一种低速的同步半双工通信。撇开电源线,I2C只有两根通信线,一根SCL用于时钟同步,一根SDA用于数据传输。和从机通信时靠7bit的地址寻找设备,所以通信开始前先发送起始信号,再发送7比特位的地址数据和1比特位的读写信号,因为每个从设备都有唯一的地址,当从设备发现主机发送的地址与自身地址相匹配就会拉低SDA(即回复ACK信号),主机收到ACK回复,便可发送或接收数据,传输完成之后,主机发送停止位,完成该次传输。此方式可实现多机间的通信,每个设备都可作为主机或从机。通信方式灵活,速度偏慢。且协议对一新手不太友好,如果对IIC的速度要求不高,一般都采用软件模拟的方式进行I2C通信。因为硬件IC2多容易卡死。但是随着产品的发展和工程师的优化,目前大多MCU的硬件I2C也变得易用了起来。
无论是那种协议,都是为了通信,每个协议都有优势和劣势,在开发过程中可根据项目需要灵活选择,速度要求不高选择USART,高速选择SPI,多机灵活通信就选择I2C。但是大多数的主从会发生在MCU和传感器之前,而传感器的协议都是固定的,开发时只能取匹配传感器。
本人经验有限,学识较为浅薄,只能分析这么多,有错误之处还望大佬们包涵指正。谢谢!
|