SPI总线基础知识

概念

SPI(Serial Peripheral Interface),串行外设接口,是Motorola提出的一种高速的、全双工、同步的通信总线。SPI接口主要用于MCU与外围设备的通信,外围设备包括EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器等。 它以主从方式工作,通常有一个主设备和一个或多个从设备。

物理接口

SPI在芯片的管脚上只占用四根线,分别是MOSI(数据输出),MISO(数据输入),SCLK(时钟),CS(片选)。

  • MOSI:主机数据输出,从机数据输入;
  • MISO:主机数据输入,从机数据输出;
  • SCLK:时钟信号,由主机产生;
  • CS:从机使能信号,由主机控制。
    SPI总线基础知识_第1张图片
    SPI总线是可以一主多从的,如果一条SPI总线上确实需要挂接多个从设备,则MOSI,MISO,SCLK三条信号线是可以共用的,而CS(片选)信号线则需要独立连接。
    SPI总线基础知识_第2张图片

电平逻辑

SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一个“发送者(Transmitter)”或者“接收者(Receiver)”。实质上每次SPI的数据传输都是主从设备在交换数据。SPI总线的传输中,CS信号是低电平有效的,当我们要与某外设通信的时候,需要将该外设上的CS线置低。在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致SPI物理模块最终失效。因此,SPI在传输完数据后,必须读取SPI设备里的数据,即使这些数据在程序里是无用的。

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性CPOL (Clock Polarity)和相位CPHA(Clock Phase)可以配置。CPOL,表示SCLK空闲的时候,其电平值是低电平还是高电平;CPHA,表示数据采样在第一个跳变沿还是第二个跳变沿。
CPHA=0,表示第一个边沿:
对于CPOL=0,SCLK空闲时是低电平,第一个跳变沿就是从低变到高,所以是上升沿;
对于CPOL=1,SCLK空闲时是高电平,第一个跳变沿就是从高变到低,所以是下降沿;
CPHA=1,表示第二个边沿:
对于CPOL=0,SCLK空闲时是低电平,第二个跳变沿就是从高变到低,所以是下降沿;
对于CPOL=1,SCLK空闲时是高电平,第一个跳变沿就是从低变到高,所以是上升沿;

SPI总线基础知识_第3张图片

帧协议

spi接口以帧为单位进行通信,每一帧从片选信号拉低开始,到片选信号拉高结束,根据CPHA和CPOL的值在每个时钟信号的相应位置采样一个输入和输出位,每8个位为一字节,无校验和应答位。
SPI总线基础知识_第4张图片
SPI总线基础知识_第5张图片

内部工作机制

SPI总线基础知识_第6张图片
SSPSR 是 SPI 设备内部的移位寄存器(Shift Register)。它的主要作用是根据 SPI时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以及 Channel-Width 所决定。而SSPBUF寄存器则是CPU能直接访问的一个内存地址。

相比于uart和i2s等串行通信接口,spi在硬件实现上更为简易可靠,具备更高的有效通信带宽。

你可能感兴趣的:(#,SylixOS中的SPI模块,sylixos,SPI,基础知识,总线)