嵌入式软件开发_SPI总线及通信协议详解

1.什么是SPI?

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。SPI应用广泛,主要应用在EEPROM、 FLASH、 实时时钟 、AD转换器及数字信号处理器和数字信号解码器之间。

SPI 接口的emEprom spi接口图_数据

图1 SPI 硬件接口示意图

SPI 接口的emEprom spi接口图_数据_02

 

图2 SPI全双工传输示意图

        SPI通信有4线:SCK(同步时钟信号)、MISO(主接收从发送)、MOSI(主发送从接收)、CS片选信号。

        SCK:作为同步通信的时钟,指示什么时候开始/结束通信,以及中间数据传输(主设备什么时候发送,从设备什么时候接收),时钟由主设备发出,控制(即主从设备之间的SCLK要匹配,否则就没法正常通讯了,即:保证时序上的一致才可正常通讯)。     

        MISO:SPI通信分为主设备(Master)和从设备(Slave),主设备intput,从设备output

        MOSI:主设备发送(output输出),从设备接收(intput输入)

        CS:SPI通信分为一主多从,主设备要想从多个从设备中选中和哪个从设备通信,直接将和从设备连接的CS引脚拉低即可

2.SPI专业术语解释

      ① 空闲态

         指的是SPI总线上没有数据发送时候的状态;

      ② 时钟极性(CPOL Clock Polarity)

        SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:

        CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;

        CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;

      ③ 时钟相位(CPHA Clock Phase)

        时钟相位,实际指的就是发送和接受双方如何协调收发:

      CPHA = 0,无论收发方,在第一个边沿(上升沿还是下降沿看CPOL=0还是1)处采样,在第二个边沿处发送数据;

        CPHA=0,表示第一个边沿:

              对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;

              对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;

CPHA = 1,在第二个边沿处(上升沿还是下降沿看CPOL=0还是1)处采样,在第一个边沿处发送数据。

        CPHA=1,表示第二个边沿:

              对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;

              对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

3.CPOL CPHA的四种组合

CPOL和CPHA,分别都可以是0或1,对应的四种组合如下表所示

MODE0

CPOL=0,CPHA=0

MODE3

CPOL=1,CPHA=0

MODE1

CPOL=0,CPH=1

MODE4

CPOL=1,CPH=1

 

SPI 接口的emEprom spi接口图_SPI 接口的emEprom_03

        结合前面讲的理论知识,下面的图就很好理解啦!

SPI 接口的emEprom spi接口图_SPI 接口的emEprom_04

4.SPI通信协议

       SPI通信协议总结起来就是一句话,解决SPI通信问题:

     (1)数据发送高位在前还是低位在前:比如0x55(0101 0101),先发送第0位的1还是第7位的0?

        高位在前,先发送0MSB),最后发送1LSB

    (2)怎么区分正在发送数据还是处在空闲,例如0xff(1111 1111):区分空闲和数据发送?

       ① 在开始发送之前,SCK处在空闲态(根据CPOL时钟极性设置规定,持续输出高电平(CPOL=1)或者低电平(CPOL=0));② 开始发送时候,主设备会控制SCK发生变化(低电平转高电平,高电平转换低电平),直到数据发送完;③ SCK会继续回到空闲状态(持续输出高电平或者低电平)。

    3)发送方什么时候发送?

        根据CPHA时钟相位设置,向数据线上放数据:CPHA=1,在第一个边沿处,向数据线上放数据(发送);CPHA=0,在第二个边沿处,向数据线上放数据(发送)

    4)接收方什么时候接收?

       根据CPHA设置采样(读取数据):CPHA=1,在第二个边沿处,从数据线上采样(读取数据),CPHA=0,在第一个边沿处,从数据线上采样(读取数据)。

5.SPI内部工作机制

SPI 接口的emEprom spi接口图_数据_05

 

SSPSR是 SPI 设备内部的移位寄存器(Shift Register)。 它的主要作用是根据SPI 的时钟信号状态, 往SSPBUF 里移入或者移出数据, 每次移动的数据大小由Bus-Width 以及Channel-Width 所决定。

6.SPI通信特点

没有指定的流控制没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

SPI的传输都是以8bit一个字节为单位的(一帧)。

.