I2C、SPI、UART都是常见的板级通信协议,下面简单罗列下他们的区别对比;
I2C(Inter-integrated Circuit)总线是由Philips公司开发的一种简单、双向二线制同步串行总线。
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线,芯片的管脚上只占用四根线,节约了芯片的管脚。
UART是一种通用串行数据总线,用于异步通信。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连接上。
对比项 | UART | SPI | IIC |
信号线数目 | UART一般由TXD、RXD、GND三根线组成,是一种异步传输协议 | SPI是四根线,分别是CS(片选)、MOSI(主发从收)、MISO(从发主收)、CLK(时钟),是一种同步传输协议。 | I2C是两根线,SDA(数据)和SCL(时钟),也是一种同步传输协议 |
设备从属关系 | / | 存在主从设备。SPI用片选信号选择从机 | 存在主从设备。IIC用地址选择从机。 |
通信方式 | 全双工通信 | 全双工通信 | 半双工通信 |
通信速率 | 无限制,速度取决于波特率,常用9600bps(1.2KB/s)和115200bps(14.4KB/s) | 全双工同步传输,速度约有50Mbps,即约5.9MB/s | S(标准模式):100Kbps,即 100/8 = 12.5KB/s F(快速模式):400Kbps,即400/8 = 50KB/s HS(高速模式):3.4Mbps,即3.4M/8 = 435KB/s 超高速模式:5Mbit/s,即5M/8 = 525KB/s |
应用领域 | 领域: 1、UART常用于控制计算机与串行设备的芯片; 2、就是我们经常所说的串口,基本都用于调试。 | 主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 | I2C一般是用在同一个板子上的2个IC之间的通信 ,它可以替代标准的并行总线,连接各种集成电路和功能模块。 |
传输距离 | / | / | I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信 |
通信特征 | 异步,一帧可以传5/6/7/8位 | 同步,SPI允许数据一位一位的传送,甚至允许暂停。从最高位开始传。 | 同步,电平信号,一次连续8bit。从最高位开始传 |
协议复杂度 | 结构比较复杂 | SPI实现要比UART简单,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。 | 协议比SPI复杂,但是连线比标准的SPI要少 |
对比 | / | 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。 在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。 | / |