SPI Serial Peripheral Interface 串行外设接口
高速的、全双工、同步的 串行通信总线。
主从方式工作,一主对多从
SPI至少四根线
- MISO Master In Slave Out 主设备输入,从设备输出(或SO)
- MOSI Master Out Slave In 主设备输出,从设备输入(或SI)
- SCL Serial Clock 时钟线(或SCLK、SCL)
- SSEL Slave Select 片选(或CS(Chip Select)、SS(Slave Select))
寻址方式
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该从设设备
通信过程
- 先传送高位,后传送低位(如0x55,即01010101,是先发送0,最后发1)
- 数据线为高电平表示逻辑1,低电平表示逻辑0
- 一个字节(8位)传送完后无需从设备应带即可开始下一个字节传送
- 时钟线在上升沿/下降沿时发送器向数据线上发送数据,在紧接着的下降沿/上升沿时接收器从数据线上收取数据。如此八个时钟周期即可完成一个字节数据的传送。 (串口通信则是先约定波特率即数据传输速度,再通过‘掐’时间段来读每位数据)
MSB the Most Significant Bit 高位
LSB the Least Significant Bit 低位
极性和相位
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
空闲时低电平,上升沿接收数据,下降沿发送数据
CPOL=0,CPHA=1
空闲时低电平,上升沿发送数据,下降沿接收数据
CPOL=1,CPHA=0
空闲时高电平,上升沿接收数据,下降沿发送数据
CPOL=1,CPHA=1
空闲时高电平,上升沿发送数据,下降沿接收数据
四种模式的意义
需要说明的是,对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式(比如SPI通信的MPU6050,可以从MPU6050芯片手册中可以查该模块的极性和相位,一般这个从设备的极性和相位无法改);我们在使用该设备时就必须保证主设备(如STM32C8T6)的工作模式和该从设备保持致,否则是无法进行通信的;所以一般我们需要对主设备的CPOL和CPHA进行配置;