SPI接口简述
串行外设接口 (SPI) 总线是一种运行于全双工模式下的同步串行数据链路。 用于在单个主节点和一个或多个从节点之间交换数据。SPI 总线实施简单,仅使用四条数据/控制信号线。
-
SCLK:串行时钟信号,由主设备产生;
-
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据;
-
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据;
-
CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
SPI数据发送和接收
-
SPI主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输;
-
首先拉低对应SS信号线,表示与该设备进行通信;
-
主机通过发送SCLK时钟信号,来告诉从机写数据或者读数据;
-
主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区;
-
从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
SPI通信的四种模式
除设置时钟频率之外,主节点还会配置相对于数据的时钟极性和时钟相位。这两个选项分别称作 CPOL 和 CPHA,能够允许时钟信号实现 180 度相移且数据延迟半个时钟周期。
CPOL = 0 时,时钟在逻辑 0 处空闲:
- 如果 CPHA = 0,数据会在 SCK 的上升沿上读取,在下降沿上变化。
- 如果 CPHA = 1,数据会在 SCK 的下降沿上读取,在上升沿上变化。
CPOL = 1时,时钟在逻辑 1 处空闲:
- 如果 CPHA = 0,数据会在 SCK的下降沿上读取,在上升沿上变化。
- 如果 CPHA = 1,数据会在 SCK 的上升沿上读取,在下降沿上变化
主从设备必须使用相同的工作模式——SCLK、CPOL 和 CPHA,才能正常工作。如果有多个从设备,并且它们使用了不同的工作模式,那么主设备必须在读写不同从设备时重新修改对应从设备的模式。