1.SPI通信协议
SPI通讯协议为串行同步接口通讯协议。SPI总线可进行全双工数据传输,SPI接口较快,传输速度高达5Mbps。SPI连接多个从设备时,只要给每个从设备配一片选信号。如下图,加译码器(或者不同的I/O口)选中设备,即可由一个主设备、多个从设备组成。
①SPI通信时有四种信号:SDI(数据输入)、SDO(数据输出)、SCK(时钟)、CS(从设备使能信号)。
②数据传输方向:MOSI(主出/从入)、MISO(主入/从出)。
③SPI通信时可以实现全双工,数据传输过程时先传输最高位,先将CS引脚拉低,选中从设备,然后通过SCLK输出时钟,在MOSI引脚上输出数据,同时在MISO上获得数据。④SPI通信时主设备控制时钟,没有数据交换时时钟线要么是高电平要么是低电平,并不像UART或者IIC通信有专门的通信周期,通信起始信号,通信结束信号。
2.I2C通信协议
I2C通信协议用于串行外设接口、近距离传输的器件中。总线在传送数据过程中共有三种类型信号,分别是:开始信号、结束信号和应答信号。
①由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。数据可以双向传送,高速I2C总线一般可达400kbps以上。用I2C通信的芯片最常用的是EEPROM芯片。
②两线制:SCL(时钟)、SDA(数据)。
③起始信号:SCL为高电平期间,SDA由高变低后开始传送数据;
④终止信号:SCL为高电平期间,SDA由低变高后结束传送数据。
⑤应答信号:接收数据的设备在接收到8bit数据后,向发送数据的设备发出应答信号(低电平脉冲),表示已收到数据。
数据传输时序图
总结两种总线的异同点:
①I2C总线不是全双工,两根线SCL与SDA。SPI总线实现全双工,四根线SCK、CS、MOSI、MISO。
②I2C总线是多主机总线,通过SDA上的地址信息来锁定从设备。SPI总线只有一个主设备,主设备通过CS片选来确定从设备。
③I2C总线传输速度在100kbps~4Mbps。SPI总线传输速度更快,可以达到30MHz。
④I2C总线空闲状态下SDA与SCL都是高电平。SPI总线空闲状态MOSI、MISO、SCK 是由时钟决定的
⑤I2C总线SCL高电平时SDA下降沿标志传输开始,上升沿标志传输结束。SPI总线CS拉低标志传输开始,CS拉高标志传输结束
⑥I2C总线是SCL高电平采样。SPI总线因为是全双工,因此是沿采样,具体要根据时钟决定。一般情况下Master Device是SCK的上升沿发送,下降沿采集。
⑦I2C总线和SPI总线数据传输都是MSB在前,LSB在后(串口是LSB在前)
⑧I2C总线和SPI总线时钟都是由主设备产生,并且只在数据传输时发出时钟
⑨I2C总线读写时序比较固定统一,设备驱动编写方便。SPI总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。