简介
SPI和I2C一样也是用于通信的总线,一般用于跟外部的一些传感器通信。
相比与I2C,SPI的优点是:
- 传输速度:SPI的传输速度能达到几十兆甚至上百兆。(I2C快速模式下400KB/S)
- 全双工:在同一时间既能发送数据也能接收数据(I2C半双工)。
SPI协议
跟I2C一样SPI 也有主从之分,一个主机可以同时挂载多个从机。不同的是SPI有4条线,分别是:
- SCLK(串行时钟线):通信时主机需要向从机提供时钟。(这就是同步通信)
- CS(片选信号线):不同于I2C使用器件地址来区别从机,SPI使用片选信号线来选中需要通信的器件,通信过程中片选信号线必须拉低 (片选分为软件片选(gpio手动拉高拉低)和硬件片选)。
- MOSI:主机输出从机输入信号线。(传输有效数据)
- MISO:主机输入从机输出信号线。
SPI通信都是由主机发起,主机需要向从机提供时钟信号。
SPI同时挂载多个从设备时的连接图:
IMX6ULL的一个SPI外设接口支持4个硬件片选,也就是使用硬件片选的话一个接口同时只能连接4个从设备,但是如果使用软件片选,因为GPIO 很多,一个SPI接口就可以同时连接多个从设备了。
SPI工作模式
- CPOL=0,串行时钟空闲时为低电平。
- CPOL=1,串行时钟空闲时为高电平。
- CPHA=0,串行时钟线的第一个跳变沿采集(上升沿或下降沿)数据。
- CPHA=1,串行时钟线的第二哥跳变沿采集数据。
SPI 通过以上时钟极性 和相位的不同,可以搭配出4种工作模式,分别是:
通常用的比较多的是时钟空闲时为低电平,第一个跳变沿采集数据的方式。
SPI时序
SPI的时序图很简单,只要片选拉低,就可以进行通信。以下是CPOL=0,CPHA=0工作方式的时序图。
上图 主机发送有效数据0xD2,接收0x66。
在单片机中,通信的本质其实就是读写寄存器。