SPI通信基础学习
SPI是“Serial Peripheral Interface”的缩写,即“串行外设接口”,是摩托罗拉公司推出的一种串行接口通信协议。
接线的示意图:
SPI总线的原理可以借鉴I2C,两者不同之处有以下几点:
(1)I2C只有两根信号线,一条数据线SDA,一条时钟线SCL;SPI有四根信号线:MISO、MOSI、SCK和NSS。
- MOSI:Master Output Slave Input,主设备输出/从设备输入。数据从主机输出到从机,主机发送数据。
- MISO:Master Iutput Slave Output,主设备输入/从设备输出。数据由从机输出到主机,主机接收数据。
- SCK:时钟信号线,用于通讯同步。
- NSS:片选信号线,用于选择通讯的从设备,也可用CS(低电平有效)表示。每个从设备都有一条独立的NSS信号线,主机通过将某个设备的NSS线置低电平来选择与之通讯的从设备。所以SPI通讯以NSS线电平置低为起始信号,以NSS线电平被拉高为停止信号。
(2)I2C通信是半双工的,SPI通信是全双工的。即I2C不能收发数据同时进行,而SPI可以。
(3)I2C依靠地址来选取从设备,且每次收发都有应答信号;SPI依靠片选信号来选取从设备,没有应答信号,随便收发。
工作过程:
以从机的片选线NSS被拉低开始,每个时钟周期进行一次数据触发和采样,最后当NSS被拉高后,通信结束。
上图展示的工作模式是SCK上升沿触发,下降沿采样。SPI实际有四种工作方式,取决于“时钟极性CPOL”和“时钟相位CPHA”的状态,如下。
SPI四种工作模式的主要区别是总线空闲时SCK的状态及数据采样时刻。
如果CPOL被清0,则SCK在空闲状态保持低电平,反之被置1则保持高电平;如果CPHA位被清0,则在SCK每个时钟周期的第1个边沿(奇数边沿)进行数据位采样,反之被置1则在SCK每个时钟周期的第2个边沿(偶数边沿)采样。
下表展示了SPI四种工作模式的状态:
数据传输时从最高位开始,一位一位传输。
参考文章:
https://zhuanlan.zhihu.com/p/27376153
https://zhuanlan.zhihu.com/p/27462822
https://zhuanlan.zhihu.com/p/33356830