SPI总线简介
SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。
接口定义
SPI接口共有4根信号线,分别是:片选信号、时钟信号、串行输出信号、串行输入信号。
时钟极性和时钟相位
在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)。
时钟极性: 时钟空闲时的电平。
时钟相位: 采样数据的时钟沿。
SPI模式
| CPOL
| CPHA
| 模式0
| 0
| 0
| 模式1
| 0
| 1
| 模式2
| 1
| 0
| 模式3
| 1
| 1 |
CPOL: SPI空闲时的时钟信号电平(1:高电平, 0:低电平)
CPHA: SPI在时钟第几个边沿采样(1:第二个边沿开始, 0:第一个边沿开始)
空闲状态CLK为低电平,CLK上升沿采样(这时候数据不能改变)。
空闲状态CLK为低电平,CLK下降沿采样(这时候数据不能改变)。
空闲状态CLK为高电平,CLK下升沿采样(这时候数据不能改变)。
*注意: 上图的第一个CLK下降沿应该往右移动一点更准确,因为采样时数据不应该改变。
空闲状态CLK为高电平,CLK上降沿采样(这时候数据不能改变)。
注意:
当CPHA为0时,采集数据发生在时钟周期的前边沿(第一个边沿,可能是上升沿也可能是下降沿,由CPOL决定);
当CPHA为1时,采集数据发生在时钟周期的后边沿(第二个边沿,可能是上升沿也可能是下降沿,由CPOL决定);
所以不能说CPHA=0就是上升沿或下降沿采集数据,要根据CPOL才能确定。
总结
当我们写某SPI芯片的驱动时,主要要关注外设芯片的SPI模式(时钟极性和时钟相位),以及寄存器,这些在datasheet中都会体现。
往期推荐:
嵌入式到底应该选择驱动开发,还是应用开发?
【通信协议】一文搞懂I2C
如何实现一个Linux命令
推荐几款串口监控软件
一文搞懂UART
|