- I2C总线不是全双工(半双工),2根线SCL SDA。SPI总线实现全双工,4根线SCK CS MOSI MISO
- I2C总线是多主机总线,通过SDA上的地址信息来锁定从设备。SPI总线只有一个主设备,主设备通过CS片选来确定从设备
- I2C总线传输速度在100kbps-4Mbps。SPI总线传输速度更快,可以达到30Mbps以上。
- I2C总线空闲状态下SDA SCL都是高电平。SPI总线空闲状态MOSI MISO也都是 SCK是有CPOL决定的
- I2C总线SCL高电平时SDA下降沿标志传输开始,上升沿标志传输结束。SPI总线CS拉低标志传输开始,CS拉高标志传输结束(注意:有的控制器TRAN_CSR寄存器,GoBusy位: 向该位写 0 不起作用,写 1 将该位置 1 并启动一次传输,传输结束后该位自动清零(软复位亦可将 该位清零)。发起新的传输前,软件应查询该寄存器,该寄存器为 0 时才可发起新传输)
- I2C总线是SCL高电平采样。SPI总线因为是全双工,因此是沿采样,具体要根据CPHA决定。一般情况下master device是SCK的上升沿发送,下降沿采集
- I2C总线和SPI总线数据传输都是MSB在前,LSB在后(串口是LSB在前)
- I2C总线和SPI总线时钟都是由主设备产生,并且只在数据传输时发出时钟
- I2C总线读写时序比较固定统一,设备驱动编写方便。SPI总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。
|
||
---|---|---|
|
两线:SCL、SDA |
三线:SCLK、MOSI、MISO 四线:SCLK、MOSI、MISO、CS |
|
半双工同步串行 |
全双工同步通信串行 |
|
100kbps-3.4Mbps |
可达30Mbps以上 |
|
SCL和SDA都是高电平 |
MOSI和MOSI是高电平,SCLK有CPOL决定(0:低电平;1:高电平) |
|
SCL高电平 |
SCLK边沿采样。具体由芯片的CPHA决定,如STM32、NXP和TI DSP相反 |
|
MSB在前,LSB在后 |
|
|
主设备提供,并且只在数据传输时发送 |