常用通信协议——SPI

时间:2024-01-28 20:29:19

常用通信协议——SPI

 一、概述

  SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola
首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM, FLASH,实时时
钟, AD 转换器,还有数字信号处理器和数字信号解码器之间。 SPI,是一种高速的,全双工
同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局
上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信
协议。

串行:数据线位宽为1;
全双工:同一时刻通信双方的数据传输可以是双向的;
同步:通信双方的共用一个时钟。例如串口通信双方用的是不同的时钟,因此不能称为同步通信。


二、SPI通信模型

主机:Master
从机:Slave

2.1、SPI的接口
SPI 接口一般使用 4 条线通信:
MISO:主设备数据输入,从设备数据输出。(master input、slave output)
MOSI:主设备数据输出,从设备数据输入。(master output、slave input)
SCLK:时钟信号,由主设备产生。
CS:从设备片选信号,由主设备控制,主设备想和哪个从设备通信,就把那个从设备对应的片选线拉低。

2.2、协议详解
  从上图SPI硬件模型可以看到,所有从设备共用SCLK、MOSI、MISO线。通过片选信号来选择主机通信的对象。假设某一时段内从机2被选中,那么就表示该时段内主机与从机2进行通信,其余的从机就可以暂时无视了。
接下来通过如下时序图对通信过程进行详细说明。

1、再强调一次:NSS、SCK、MOSI的数据流向是主机到从机,MISO的数据流向是从机到主机;
2、NSS片选线拉低表示通信开始、NSS拉高表示通信结束;
3、SCK时钟由主机提供,MOSI位宽为1,其数据改变与SCK保持同步;
4、在SCK的上升沿,MOSI数据改变,在SCK的下降沿,MOSI数据保持,从机可在此时进行采样,以读取数据;
5、MISO为从机向主机发送回来的数据,注意,该线的数据也是与SCK沿保持一致的;

6、MOSI和MOSI的发送接收可同时进行,因此得名“全双工”;
7、电平相位可进行设置,详见2.3

2.3、SPI的工作模式
  SPI 总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。
(1)时钟极性CPOL:设置时钟空闲时的电平
当CPOL = 0,SCK引脚在空闲状态保持低电平;
当CPOL = 1,SCK引脚在空闲状态保持高电平,上图表示的就是CPOL = 1的情况;
(2)时钟相位CPHA:设置数据采样时的时钟沿
当CPHA = 0,MOSI或者MISO数据线上的信号将在SCK时钟线的奇数边沿被采样,上图表示的就是CPHA = 0的情况;
当CPHA = 1,MOSI或者MISO数据线上的信号将在SCK时钟线的偶数边沿被采样;
(3)两个参数的组合共产生4种SPI的工作模式,总结如下表

 

 三、参考资料

[1]正点原子STM32F4开发指南-库函数版本

[2]华清创客学院