SPI简介
SPI(Serial Peripheral Interface)是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信总线;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备; SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选)。SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议;(SPI一般只有一个主机)。
![](https://i-blog.csdnimg.cn/blog_migrate/6c8bd85f35a90afb4d3871ca8f35f327.png)
寻址方式
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定,有些从机要求CS高电平使能,有些是低电平,CS上面标横线的一般为低电平有效)表示选中该从设备。
![](https://i-blog.csdnimg.cn/blog_migrate/2f9a828ed98a82a38f8cf8de721450dd.png)
通信过程
SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑‘1’,低电平表示逻辑‘0’;一个字节传送完成后无需应答即可开始下一个字节的传送; SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;
![](https://i-blog.csdnimg.cn/blog_migrate/6addbc5ace2a290646acd52311b1a02b.png)
极性和相位
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素。
不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。
CPOL表示SCLK空闲时的状态
CPOL=0,空闲时SCLK为低电平
CPOL=1,空闲时SCLK为高电平
CPHA表示采样时刻
CPHA=0,每个周期的第一个时钟沿接收数据(采样)
CPHA=1,每个周期的第二个时钟沿接收数据(采样)
CPOL = 0, CPHA = 0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。
CPOL = 0, CPHA = 1:此时空闲态时,SCLK处于低电平,数据采样是在第2个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
CPOL = 1, CPHA = 0:此时空闲态时,SCLK处于高电平,数据采样是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
CPOL = 1, CPHA = 1:此时空闲态时,SCLK处于高电平,数据采样是在第2个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。
![](https://i-blog.csdnimg.cn/blog_migrate/cd8321900c035fa341e1715e05bff015.png)
SPI工作原理
主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行移位寄存器写入一个字节来发起一次传输。
串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回至主机。这样一来两个移位寄存器中的内容就被交换。
外设的写和读是同步完成的,如果只进行向从机的写操作,主机只需忽略接收到的字节,反之,若主机要读取从机的一个字节,就必须发送空字节来引发从机的传输。
![](https://i-blog.csdnimg.cn/blog_migrate/2fb9f5c1881fa6b6a1361bbb711bd770.png)