一、SPI总线简介
SPI总线是摩托罗拉公司开发的一种高速、全双工、同步的通信总线,它通常由四条线组成:
- CS 片选信号
- SCLK 时钟信号
- MOSI 主机输出从机输入接口
- MISO 主机输入从机输出接口
SPI分为主机和从机,主机提供通信所需的时钟信号。
二、SPI四种工作模式
SPI最重要的两个参数分别是时钟的极性(CPOL)和相位(CPHA)。
- CPOL:Clock Polarity 决定时钟空闲状态电平是高电平还是低电平
CPOL = 0:时钟空闲时为低电平,时钟高电平时有效
CPOL = 1:时钟空闲时为高电平,时钟低电平时有效 - CPHA:Clock Phase 决定数据传输采样和移位方式
CPHA = 0 :在时钟信号SCK的第一个跳变沿采样
CPHA = 1 :在时钟信号SCK的第二个跳变沿采样
时钟和相位的不同组合,形成了SPI的四种工作模式:
模式 | CPOL | CPHA |
---|---|---|
Mode 0 | 0 | 0 |
Mode 1 | 0 | 1 |
Mode 2 | 1 | 0 |
Mode 2 | 1 | 1 |
我们以stm32的spi总线为例:
Mode 0:CPOL为0,CPHA为0时,数据在时钟第一个跳变沿(上升沿)采样;
Mode 1:CPOL为0,CPHA为1时,数据在第一个跳变沿(下降沿)采样;
Mode 1:CPOL为1,CPHA为0时,数据在第一个跳变沿(下降沿)采样;
Mode 1:CPOL为1,CPHA为1时,数据在第一个跳变沿(上升沿沿)采样;
模式 | 相位极性 | 采样 | SCL空闲电平 |
---|---|---|---|
Mode 0 | CPOL = 0, CPHA = 0 | 上升沿 | 低电平 |
Mode 1 | CPOL = 0, CPHA = 1 | 下降沿 | 低电平 |
Mode 2 | CPOL = 1, CPHA = 0 | 下降沿 | 高电平 |
Mode 2 | CPOL = 1, CPHA = 1 | 上升沿 | 高电平 |
SPI slave设备SCL在空闲的时候是高电平还是低电平,决定了CPOL是0还是1。
三、SPI全双工和半双工
在使用stm32等mcu时,SPI通常会有全双工、半双工的选项。所谓全双工就是SPI在发送数据的同时也能够接收数据,所谓半双工就是SPI的发送和接收分时,即发送的时候不能接收数据,接收数据的时候不能发送数据。
四、应用电路
一对一:
一对多: