SPI Serial Peripheral Interface 串行外设接口
高速的、全双工、同步的 串行通信总线。
主从方式工作,一主对多从

SPI至少四根线

  1. MISO Master In Slave Out 主设备输入,从设备输出(或SO)
  2. MOSI Master Out Slave In 主设备输出,从设备输入(或SI)
  3. SCL Serial Clock 时钟线(或SCLK、SCL)
  4. SSEL Slave Select 片选(或CS(Chip Select)、SS(Slave Select))

image.png

寻址方式

当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设设备
image.png

通信过程

  1. 先传送高位,后传送低位(如0x55,即01010101,是先发送0,最后发1)
  2. 数据线为高电平表示逻辑1,低电平表示逻辑0
  3. 一个字节(8位)传送完后无需从设备应带即可开始下一个字节传送
  4. 时钟线在上升沿/下降沿时发送器向数据线上发送数据,在紧接着的下降沿/上升沿时接收器从数据线上收取数据。如此八个时钟周期即可完成一个字节数据的传送。 (串口通信则是先约定波特率即数据传输速度,再通过‘掐’时间段来读每位数据)

MSB the Most Significant Bit 高位
LSB the Least Significant Bit 低位
image.png

极性和相位

SPI共四种工作模式,取决于极性和相位两个因素
CPOL Clock Polarity 极性
CPHA Clock Phase 相位

CPOL表示SCLK空闲时的状态
CPOL=0,空闲时SCLK为低电平
CPOL=1,空闲时SCLK为高电平

CPHA表示采样时刻
看是沿上升沿还是下降沿采样
CPHA=0,每个周期的第一个 时钟沿采样。上升沿接收数据,下降沿发送数据。
CPHA=1,每个周期的第二个时钟沿采样。上升沿发送数据,下降沿接收数据。

CPHA 上升沿 下降沿
0 接收 发送
1 发送 接收

CPOL=0,CPHA=0
空闲时低电平,上升沿接收数据,下降沿发送数据
image.png

CPOL=0,CPHA=1
空闲时低电平,上升沿发送数据,下降沿接收数据
image.png

CPOL=1,CPHA=0
空闲时高电平,上升沿接收数据,下降沿发送数据
image.png

CPOL=1,CPHA=1
空闲时高电平,上升沿发送数据,下降沿接收数据
image.png

四种模式的意义

需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式(比如SPI通信的MPU6050,可以从MPU6050芯片手册中可以查该模块的极性和相位,一般这个从设备的极性和相位无法改);我们在使用该设备时就必须保证主设备(如STM32C8T6)的工作模式和该从设备保持致,否则是无法进行通信的;所以一般我们需要对主设备的CPOL和CPHA进行配置;