一、SPI 简介
SPI 全称 Serial Peripheral interface ,即串行外围设备接口。
SPI 接口是一种高速的全双工同步的通信总线。
二、SPI 工作原理
SPI 的结构框图如下图所示,围绕框图,我们展开介绍一下 SPI 的引脚信息、工作原理以及传输方式。
SPI 的引脚信息:
MISO(Master In / Slave Out),主设备数据输入,从设备数据输出。即主机读操作。
MOSI(Master Out / Slave In),主设备数据输出,从设备数据输入。即主机写操作。
SCLK(Serial Clock),时钟信号,由主设备产生。
CS(Chip Select),从设备片选信号,由主设备产生。
SPI 的工作原理:
主机和从机都有一个串行移位寄存器,主机通过向主机的 SPI 串行寄存器写入一个字节来发起一次传输。串行移位寄存器通过 MOSI 信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过 MISO 信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只是进行写操作,主机只需忽略接收到的字节。反之,若主机要读取从机的一个字节,就必须发送一个空字节引发从机传输。
SPI 的传输方式:
SPI 总线有三种传输方式,全双工、单工、半双工。
全双工通信:在任何时刻,主机与从机之间都可以同时进行数据的发送和接收。
单工通信:在同一时刻,只有一个传输的方向,发送或者是接收。
半双工通信:在同一时刻,只能为一个方向传输数据。
三、SPI 工作模式
STM32要与具有SPI接口的器件进行通信,就必须遵循 SPI 的通信协议。每一种通信协议都有各自的读写数据时序。SPI 通信协议有4种工作模式,在了解工作模式前,首先了解 CPOL 和 CPHA 。
① CPOL,全称 Clock Polarity,即时钟极性。当主从机没有数据传输时 SCL 线的电平状态(即空闲状态)。
若空闲状态是高电平,则CPOL = 1;
若空闲状态是低电平,则CPOL = 0。
② CPHA,全称 Clock Phase,即时钟相位。指的就是数据的采样时刻。
CPHA = 0,表示数据的采样是在第1个边沿信号上,即奇数边沿,具体是上升沿还是下降沿,由CPOL决定。若CPOL = 1,则表示空闲状态是高电平,而数据采样在第1个边沿信号上,那么第1个边沿信号就是下降沿;若CPOL = 0,那么第1个边沿信号就是上升沿。
CPHA = 1,表示数据采样是在第2个边沿信号上,即偶数边沿,因此它的边沿极性不由CPOL直接决定,需要根据偶数边沿判断,假如第一个边沿即奇数边沿是下降沿,那么偶数边沿的边沿极性就是上升沿。
SPI 工作模表如下表所示,
各工作模式采样时序如下图,
① 奇数边沿(CPHA = 0)上升沿(CPOL = 0)采样时序为:
② 偶数边沿(CPHA = 1)下降沿(CPOL = 0)采样时序为:
③奇数边沿(CPHA = 0)下降沿(CPOL = 1)采样时序为:
④偶数边沿(CPHA = 1)上升沿(CPOL = 1)采样时序为:
四、总结
SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步通信总线,SPI接口通常包括一个主设备(Master)和一个或多个从设备(Slave),通过四条信号线(时钟线SCK、主设备输出从设备输入MOSI、从设备输出主设备输入MISO、片选信号CS)实现数据的同步传输。SPI通信的特点是简单易实现、传输速率快,适用于短距离高速数据交换,常见于嵌入式系统中的存储器、传感器、显示屏等外设的连接.