SPI数据接口
SPI(Serial Peripheral Interface)串行外设接口的简称,它是一种同步全双工通信协议。有 3根或者 4根数据线组成,包括 CLK、SOMI、SIMO、STE:
CLK为时钟线,由主机控制输出。
SOMI是 Slave output Master input的缩写,如果设备被设定为主机,那么这就是输入口。如果设备被设定为从机,这个口就是输出口。这与 UART的 Tx和 Rx方向恒定相区别。
SIMO是 Slave input Master Output的缩写,同样由配置为主或从模式决定是输入还是输出口。也就是器件内部是有读写切换开关的。
STE 是 Slave Transmit Enable 的缩写,在不同器件中也经常被写作片选 CS(Chip Select)和从机选择 SS(Slave Select),都是一个意思。
SPI的通信模式
如下图所示,SPI的通信模式分为单主单从、单主多从、多主多从三类。A为三线制SPI通信;B为四线制单主多从 SPI通信;C为四线制多主多从 SPI通信。
三线和四线的区别是多出了一个被控制的 STE信号,以使能从机。对于多主机通信,主机的 STE也被控制,以决定是否为从机模式。无论主机从机的 STE最终都是由额外的 IO口来控制的。
从上图可以看出,SPI通信要实现多机通信是以多占用 IO来实现的。所以,用途最多的是 3线 SPI或者 1主多从的四线制 SPI,而多主多从的 SPI极少使用。
SPI协议时序
下图是 SPI通信的时序图,其中有两个控制位需要讲解一下:
1) CKPH是 CLK相位控制位,CKPL是 CLK极性控制位。
2) 两个位如何设置对通信协议没本质影响,只是用来约定在 CLK的空闲状态和什么位置开始采样信号。
3) CKPH=0,意味着在以 CLK第一个边沿开始采样信号,反之则在第二个边沿开始。
4) CKPL=0意味着时钟总线低电平位空闲,反之则是时钟总线高电平空闲。
在标准 SPI协议中,先发送的是 MSB位,在 4线制模式下,片选信号(STE/CS/SS)控制传输的开始。在 3线制模式中,则是从机始终激活,依靠时钟来判断数据传输开始。