一、协议介绍
1. 简介
串行外设接口(Serial Peripheral interface,SPI)是一种总线通信协议,已经广泛应用在众多MCU、存储芯片、电源芯片、LCD中。
2. 信号及接口
信号/接口 | 含义 | I/O | 备注 |
SCK | 时钟信号 | 主机O,从机I | |
CS | 片选信号 | 主机O,从机I | |
MISO | 主设备输入,从设备输出信号 | 主机I,从机O | |
MOSI | 主设备输出,从设备输入信号 | 主机O,从机I | |
D2 | “四线模式”下第2位数据线 | I/O | 部分设备支持四线传输模式 |
D3 | “四线模式”下第3位数据线 | I/O | 部分设备支持四线传输模式 |
SPI主机和从机的信号线连接示意图如下所示:
二、功能介绍
1. SPI模块框图
SPI时钟信号由外部输入,经过模块内部分频后生成SPI时钟信号。
2. 数据采样格式
SPI通过CPHA(相位)和CPOL(极性)来确定数据的采样格式,其中CPOL表示时钟在空闲时的状态,CPOL=0时,时钟SCK空闲时为低电平;当CPOL=1时,时钟SCK空闲时为高电平。当CPHA=0时表示在时钟的奇数边沿采样;CPHA=0时表示在时钟的偶数边沿采样。
SPI总线只能在固定时钟边沿进行数据采样和数据跳变,具体采样格式如下所示:
CPOL | CPHA | |
0 | 0 | 上升沿采样,下降沿跳变 |
0 | 1 | 下降沿采样,上升沿跳变 |
1 | 0 | 下降沿采样,上升沿跳变 |
1 | 1 | 上升沿采样,下降沿跳变 |
波形示意如下所示:
3. 通信模式
SPI通信模式:
按照数据传输方向分类分为:全双工模式和单工模式
按照数据传输的线数分类分为:单线模式、双线模式以及四线模式
所以SPI通信模式分为:单线全双工模式、双线单工模式、四线单工模式
(注意:此处的“线”仅代表数据传输线)
3.1 单线全双工模式时序
单线全双工模式是主从机通信双方可以同时发送和接收数据,每个数据传输方向上只使用一根数据线来发送/接收数据,即主机通过MOSI发送,从机通过MISO发送。
在SPI数据传输过程中,当发送方把数据准备好后,主机拉低片选信号时主机产生时钟信号,同时,发送方发送准备好的数据。当通信完成后,主机会拉高片选结束通信。
通常,MCU会支持用户配置两个延时:
①片选拉低后延时产生时钟
②通信结束后延时拉高片选
单线全双工模式时序图如下:
3.2 双线单工模式时序(部分MCU支持)
双线单工模式是指,在同一时刻的同一方向上,有两根数据线进行数据传输,在一个时钟周期,MOSI发送数据的第0位,MISO发送数据的第1位。如下图所示:
3.3 四线单工模式时序(部分MCU支持)
四线单工模式是指,在同一时刻的同一方向上,有四根数据线进行数据传输,需要额外使用两根线。在一个时钟周期,MOSI发送数据的第0位,MISO发送数据的第1位,C2发送数据的第2位,C3发送数据的第3位。
4. NSSP模式
该模式是在两个连续的数据帧传输间将生成NSS脉冲,即只有在数据传输期间片选信号才有效。对大多数的SPI应用,基本上都是传输开始把NSS拉低,传输完成再拉高。对串行输入并行输出的移位寄存器,数据接口与时钟接口先发送串行数据到移位寄存器,然后NSSP脉冲发出,移位寄存器才会把数据发出去并重新锁存。