SPI(Serial Peripheral Interface),串行外设接口,从名字可以看出又是一种串行通信的协议标准。
SPI有很多种,包括:Standard SPI(标准SPI)
、Dual SPI(双线 SPI)
和Quad SPI(四线 SPI) ,
当然并不是说双线SPI就是两根线,四线SPI就是四根线。事实上,标准SPI就有4根线,分别是CLK、CS、MOSI和MISO,它是一种全双工的通信接口。
而之所以会有双线SPI和四线SPI的出现,其实主要是因为某些情况下并不需要全双工,但对通信速度有更高的要求,所以对引脚功能做了些调整。但是既然都叫SPI,说明仍然是符合SPI的协议标准的,本次只讲解标准SPI,理解了后感兴趣可以自行研究双线SPI和四线SPI。
SPI是一种一主多从的工作模式,不同于IIC,它只有一个主机,读写操作全部由主机发起,从机被动响应。而主机操作指定从机是通过片选信号来实现的,先介绍下信号线的作用。
CS:为片选线,每一个从机都有一个独立的片选线,被选中的从机才允许通信
CLK :同步时钟信号线,用于传输同步时钟信号,所有从机公用一条线
MOSI:Master out slave in,主机发送数据,从机接收数据。
MISO:Master in slave out,主机接收数据,从机发送数据。
接下来还是说说SPI的开始与停止如何界定,以及如何去解析数据。
开始和停止很好界定,SPI是通过cs片选来进行控制的,当cs被选中时开始,否则停止。
关于数据传输,SPI有四种工作模式,主要是由相位(CPHA)和极性(CPOL)来决定的。通俗的说,就是每个周期的第一个还是第二时钟沿采集数据,空闲时的时钟是高电平还是低电平。
以下以CPHA=0举例
首先在NSS为低时通信开始,由CPHA=0可知,在第一个边沿就开始采集数据。
假设CPOL为0,那么在第一个上升沿时,发送方往数据线上发送一位数据,在下降沿时接收方读取一位数据,如此循环8次,一个字节就被发送和接收了。
由于SPI无需应答,因此可以连续发送下一个字节,直至数据全部发送完毕,拉高NSS结束通信。