开篇分割线,本篇我们来聊聊SPI(串行外围接口)的原理,这种通信主要用于短距离通信,主要应用于EEPROM、flash、实时时钟、AD转换器、解码器等一类外围芯片通信,通信一般使用4根线(记住一般就可以了)。
SPI是一种总线通信技术,也就是以主从方式工作,想想485总线很类似,通常有一个主设备和一个or多个从设备组成,通信是由主设备发起,通过CS选择想要通信的从设备,也就是每个从设备都有一个片选输入信号CS,一般为低电平使能,高电平禁用,通过主设备来控制从设备是否使能,也就是主设备要和哪一台从设备通信第一步就是将从设备的cs片选拉低,其它的从设备保持高电平处于禁用状态。
SCLK是串行时钟线,是由主设备输出时钟信号到从设备,MISI是主设备发送数据到从设备,MISO是主设备接收来自从设备的数据,关于数据的方向看图中箭头就可以分辨。
一般MCU内部都有两个SPI控制器,当然他们大部分时间都是用来做主站(主设备用),挂载多个从设备如下图:
这个时候我们就需要看下时序图来了解下数据是怎样完成传输的,在那个点上采集电平的:
从图中我们看到由CPOL和CPHA组合共有四种工作模式,CPOL是时钟的初始电平,CPHA是采集数据的时钟沿,这里可能是上升也可能是下降沿,所以只做第一个沿和第二个沿区分。
针对标准的SPI通信,摩托罗拉公司还对其进行了增强,增加了QSPI扩展,在原有协议的基础上增加了队列传输机制,退出了队列串行外围接口协议(QSPI),使用该接口用户可以一次性传输16个8位or16位的数据传输队列,一旦启动队列传输是不需要CPU进行干预的,硬件上以80字节的RAM代替数据收发寄存器。
SPI接口应用最多的就是外围flash芯片,除了标准SPI以外有的还提供Dual和Quad SPI接口:
Dual SPI:通过发送一个命令字节进入Dual半双工模式,可以加倍的传输数据,这个时候MOSI变成SIO0 MISO变成SIO1,即一个时钟周期发送2个bit数据,数据传输速率加倍。
Quad DPI:和Dual SPI类似,只是增加了两根IO线,共6根传输线,这样一个时钟内就能传输4个bit数据。