SPI简介
SPI是一种串行外围设备通信接口,高速全双工通信总线,主要用于通信速率较高的场合。
SPI硬件连接
硬件连接图如下:
SPI通讯使用3条总线及片选线,总线分别为:SCK、MOSI、MISO,片选线为SS,主要作用如下:
(1)SS(片选线):用于选择从设备,成为片选信号线。当有多个SPI从设备与SPI主机相连时,设备的其他三条总线并联到相同的SPI总线,即使三条总线又从设备公用,但是片选线每个从设备都是独有的。SPI这一点与I2C协议不同,I2C通信是通过设备地址选中某个设备。SPI通信时,主机选择从设备时,将选中从设备的NSS信号线置为低电平,通信结束时,NSS信号线拉高。
(2)SCK:时钟信号线,用于数据同步。由主机产生,决定两者通讯速率,不同设备支持的最高时钟频率不一样。设备通讯速率受限于低速设备。
(3)MOSI:主设备输出/从设备输入引脚。主机数据输出,从机数据接收。该条线数据方向主机到从机。
(4)MISO:主设备输入/从设备输出引脚。主机由信号线读入数据,从机数据由信号线输出到主机。数据方向从机到主机。
SPI协议
1. SPI通讯时序图如下:
这是一个主机通讯时许。NSS、SCK、MOSI信号均由主机控制产生,而MISO信号由从机产生,主机通过该信号线读取从机数据。在SCK的每个时钟周期MOSI和MISO传输一位数据。
2. SPI通信的起始和停止信号
上图标处1处,NSS信号线由高变低,是SPI通信的起始信号。标号6处,NSS信号由低变高,是SPI通信的停止信号,标志通信结束。
3. 数据有效性
MOSI及MISO数据线在SCK的每个时钟周期传输以为数据,并且数据输入输出是同时进行的。数据传输MSB或者LSB线性并没有作硬性规定,需要保证通讯设备之间使用同样的协定。上图中标号2345处,MOSI和MISO的数据在SCK的上升沿期间变化输出,在SCK的下降沿时被采样。SPI 每次数据传输可以8 位或16 位为单位,每次传输的单位数不受限制。
4. CPOL/CPHA
上图所描述的不过是SPI通信中的一种模式。SPI一共有四种通讯模式,主要区别是总线空闲时SCK的时钟状态以及数据采样时刻。介绍通信模式前需要引入“时钟极性CPOL”和“时钟相位CPHA”的概念。
时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK时钟线的电平信号,即是NSS线为高电平时SCK的电平状态。CPOL=0时,SCK在空闲状态时为低电平,CPOL=1时正好相反。
时钟相位CPHA 是指数据的采样的时刻, 当CPHA=0 时,MOSI 或MISO 数据线上的信号将会在SCK 时钟线的“奇数边沿”被采样。当CPHA=1时,数据线在SCK 的“偶数边沿”采样。
根据CPOL和CPHA的时钟极性,SPI一共可分为四种通信模式: