什么是SPI通信?
SPI(Serial Peripheral interface,串行外围设备接口) 通信协议是 Motorola 公司首先在其MC68HCXX 系列处理器上定义的。SPI 接口是一种高速的全双工同步的通信总线,已经广泛应用在众多 MCU、存储芯片、AD 转换器和 LCD 之间。
SPI通信的连接图
由 SPI 连成的串行总线是一种三线同步总线,总线上可以连接多个可作为主机的 MCU,装有 SPI 接口的输出设备,输入设备如液晶驱动、A/D 转换等外设,也可以简单连接到单个 TTL 移位寄存器的芯片。总线上允许连接多个能作主机的设备,但在任一瞬间只允许有一
个设备作为主机。总线的时钟线 SCK 由主机控制,另外两根分别是:主机输入/从机输出线 MISO 和 主机输出/从机输入线 MOSI。下图就是 SPI 总线的典型结构图:
SPI引脚
MISO(Master In / Slave Out)主设备数据输入,从设备数据输出。
MOSI(Master Out / Slave In)主设备数据输出,从设备数据输入。
SCLK(Serial Clock)时钟信号,由主设备产生。
CS(Chip Select)从设备片选信号,由主设备产生。
SPI驱动程序中关键的参数
- 采样频率
决定了时间信号的采样频率,由主设备决定 - 片选
选择从设备 - 极性与相位
CPOL(Clock Polarity,时钟极性),当主从机没有数据传输的时候即空闲状态,SCL 线的电平状态。假如空闲状态是高电平,CPOL=1;若空闲状态时低电平,那么 CPOL = 0。
CPHA(Clock Phase,时钟相位)。实质指的是数据的采样时刻,CPHA = 0 的情况就表示数据的采样是从第 1 个边沿信号上即奇数边沿,具体是上升沿还是下降沿的问题,是由 CPOL 决定的。CPHA=1 的情况就是表示数据采样是从第 2 个边沿即偶数边沿。
SPI 工作模式 | CPOL | CPHA | SCL 空闲状态 | 采样边沿 | 采样时刻 |
---|---|---|---|---|---|
0 | 0 | 0 | 低电平 | 上升沿 | 奇数边沿 |
1 | 0 | 1 | 低电平 | 下降沿 | 偶数边沿 |
2 | 1 | 0 | 高电平 | 下降沿 | 奇数边沿 |
3 | 1 | 1 | 高电平 | 上升沿 | 偶数边沿 |
实例
时钟极性CPOL = 1
时钟相位CPHA = 1
偶数上升沿采样
通过数据信号与时钟信号做对比,来确定发送数据的值。
发送 0xC001
收到 0x8018
至于收到的数据,如果是写,可能是上一帧写的数据,可能是当前数据;如果是读,可能就是当前读到的数据。
这个需依据具体芯片而来。
有数据传递时,片选信号被拉低。