SPI总线原理

SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。

优点及特点:

  1. 传输速度快
  2. 全双工通信
  3. 同步通信
  4. 通信简单
  5. 主从机通信模式
  6. 总线式通信
  7. 常用于单片机和EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。

标准SPI包括4个接口:

  1. SDO/MOSI – 主设备数据输出,从设备数据输入。
  2. SDI/MISO – 主设备数据输入,从设备数据输出。
  3. SCLK/CLK – 时钟信号,由主设备产生。
  4. CS/SS – 片选,控制芯片是否被选中,只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就使在同一总线上连接多个SPI设备成为可能。

四种读写模式:

CPOL(Clock Polarity):时钟极性

通信的整个过程分为空闲时刻和通信时刻,SCLK在数据发送之前和之后的空闲状态是高电平那么CPOL=1,如果空闲状态SCLK是低电平,那么CPOL=0。

 CPHA(Clock Phase):时钟相位

  • 主机和从机要交换数据,就牵涉到一个问题,即主机在什么时刻输出数据到MOSI上而从机在什么时刻采样这个数据(采样数据即为获取数据),或者从机在什么时刻输出数据到MISO上而主机什么时刻采样这个数据。同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样。而一个时钟周期必定包含了一个上升沿和一个下降沿,这是周期的定义所决定的,只是这两个沿的先后并无规定。又因为数据从产生的时刻到它的稳定是需要一定时间的,那么,如果主机在上升沿输出数据到MOSI上,从机就只能在下降沿去采样这个数据了。反之如果一方在下降沿输出数据,那么另一方就必须在上升沿采样这个数据。

CPHA=1,表示数据的输出是在一个时钟周期的第一个沿上,至于这个沿是上升沿还是下降沿,则根据CPOL的值而定。(上升沿和下降沿分布在通信时刻两边)
CPHA=0,表示数据的采样是在一个时钟周期的第一个沿上,同样它是什么沿由CPOL决定。那么数据的输出自然在第二个沿上。

  • 仔细想一下,这里会有一个问题:就是当一帧数据开始传输第一bit时,在第一个时钟沿上就采样该数据了,那么它是在什么时候输出来的呢?有两种情况:一是SSEL使能的边沿,二是上一帧数据的最后一个时钟沿,有时两种情况还会同时生效。

下面以CPOL=1/CPHA=1为例,给大家以下时序图:

1.JPG

上图所示,当数据未发送时以及发送完毕后(即上图的左右两端),SCK都是高电平,因此CPOL=1。可以看出,在SCK第一个沿的时候,MOSI和MISO会发生变化,即下降沿发送数据。同时SCK第二个沿的时候,数据是稳定的,此刻采样数据是合适的,也就是上升沿(即一个时钟周期的后沿)锁存读取数据,即CPHA=1。注意最后最隐蔽的SSEL片选,一般情况下,这个引脚通常用来决定是哪个从机和主机进行通信。

剩余三种模式的时序图如下:

2.JPG