SPI时序初步认识

一、基本概念

SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。总线结构如下图所示。

SPI时序初步认识_第1张图片

二、接口定义

标准的SPI总有4根线,分别是设备选择线、时钟线、串行输出数据线、串行输入数据线。

SPI时序初步认识_第2张图片

(1)MOSI:主器件数据输出,从器件数据输入;
(2)MISO:主器件数据输入,从器件数据输出;
(3)SCLK :时钟信号,由主器件产生;
(4)/SS:从器件使能信号,由主器件控制。

在某些情况下,也可以使用3根线的SPI或者2根线的SPI进行通信。比如主机只给从机发送命令,或者主机只需要读取从机数据,那么MISO或MOSI就可以不连接了;当一个主机只对应一个从机的时候,从机的片选在某些情况下,就可以固定为某一电平,那么/SS就可以不连接了。

三、内部结构

SPI时序初步认识_第3张图片

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

四、时钟极性和时钟相位

SPI通信有四种模式,在了解这四种模式之前,我们先学习两个名词。

  • CPOL:Clock Polarity,就是时钟的极性。显然从名字可以看出,这里的极性指的是SPI总线中的SCLK的极性。在SPI通信的时序过程中,主设备什么时候发送数据,从设备又是什么时候接收数据的呢?提供这一同步基准的便是SCLK,通信的整个过程分为空闲时刻通信时刻,如果SCLK在数据发送前后的空闲状态都是高电平,那么就是CPOL=1,如果空闲状态SCLK是低电平,那么就是CPOL=0。
  • CPHA:Clock Phase,就是时钟相位。同步通信的一个特点就是所有的数据的变化和采样都是伴随着时钟沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样。而一个时钟周期必定包含一个上升沿和一个下降沿,如果主机在上升沿输出数据到MOSI上,从机就只能在下降沿去采样这个数据了(并且采样一定是在时序稳定时),反之亦然。CPHA=1就表示数据的输出是在一个时钟周期的第一个沿上,那么数据的采样自然就是在第二个沿上了。CPHA=0就表示数据的采样是在一个时钟周期的第一个沿上,那么数据的输出自然在第二个沿上了。

五、四种模式的通信时序

SPI时序初步认识_第4张图片

SPI接口配置:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。

六、SPI的优缺点

SPI接口具有如下优点:
(1)支持全双工操作;
(2)操作简单;
(3)数据传输速率较高。
同时,它也具有如下缺点:
(1)需要占用主机较多的口线(每个从机都需要一根片选线);
(2)只支持单个主机。
(3)没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有所欠缺。

你可能感兴趣的:(单片机总线协议)