信号时序
四线SPI接口的时序一般的总是先拉低从机选择信号线SS,然后输出SCLK,带着数据MOSI,此时MISO为高阻态。大致如下如:
一般有SPI接口的器件,在Spec上都会有对应的时序图,这里分别截取SPI接口FLASH型号为GD25Q32C、SPI接口OLED型号为QG-2832TLBFG04,这两器件的Spec内关于SPI时序部分的介绍,如下两张截图:
对比不难发现,时序图的规范,定义了各个信号线输出电平的顺序和时延,还定义了时钟信号跳变沿与数据信号的“对齐”,这里的“对齐”实际上就是数据的输出和采样。
同样的,这个时序规范了SPI器件所呈现的SPI接口信号线特性,包括:时钟上升、下降沿时长;片选与时钟跳变沿之间的时延;时钟边缘与数据线保持的时长…
这些时序特性,都在明确了SPI主机与其通信时,要求不超出其定义的范围,否则从机器件响应不及时而导致通信异常。
不同的器件,对SPI接口的信号时序要求也会不同。第一张简明的时序图,而基于这样的时序图,SPI接口又可以配置不同的接口配置参数。
接口配置项
一般在开发时,接口的可选配置有:接口模式(实际配置的是单、双工模式选择)、设备主从模式、数据宽度、时钟极性(CPOL:)、时钟相位(CPHA)、时钟速率、数据bit位大小端选择。
接口模式
标准的四线SPI接口,使用的场景是主从机进行数据交互的通信,两方都有数据的收发过程,而在LCD/OLED这样的SPI接口作为从设备的器件中,就不需要数据返回给主机,只需要接收来自主机的控制信息和显示的数据。
基于这样的使用场景,就可以配置成三线的单工通信,即仅需要从机选择SS、时钟SCLK、数据输出MOSI即可。
设备主从模式
这个配置一般需要看芯片是否支持,可将芯片配置成SPI主机或者从机,能更好地集成在项目的系统中。
数据宽度
顾名思义,就是发送数据可以配置成8bit、16bit等,这也是根据芯片而定。
时钟极性、时钟相位
这两者分别是CPOL(Clock Polarity)、CPHA(Clock Phase),极性就是指高低电平,这个定义了SPI总线在空闲状态下,时钟保持高电平还是低电平,因为这个关系到了SPI通信时第一个时钟跳变沿是上升还是下降沿;相位指的是时钟的跳变沿,指定了数据信号的输出和采样如何与时钟对齐。
这两个配置,在Wiki和百度百科上都做了非常清晰的解释,这里截图引用如下: