嵌入式接口协议(5)—SPI通讯协议
SPI(Serial Peripheral Interface)即串行外围设备接口,是一种高速的、全双工、同步的通信总线,一般通信由MISO、MOSI、SCLK、CS四条信号线组成。
1. 通信线介绍
(1)MISO(master input slave output)即:主设备输入,从设备数据输出。
(2)MOSI(master output slave input),即:主设备数据输出,从设备数据输入。
(3)SCLK时钟信号,由主设备产生。
(4)CS:从设备片选信号,由主设备控制。
2. SPI 通讯工作流程
主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个字节来引发从机的传输。
4. SPI 通讯相关配置
串行同步时钟极性(CPOL=Clock Polarity)和时钟相位(CPHA=Clock Phase)可根据具体需要进行配置,因此总共有四种组合。
Mode 0 | CPOL = 0 | CPHA=0 |
Mode 1 | CPOL=0 | CPHA=1 |
Mode 2 | CPOL=1 | CPHA=0 |
Mode 3 | CPOL=1 | CPHA=1 |
(1)CPOL表示当SCLK空闲时,其电平的值是低电平0还是高电平1。
若CPOL=0,串行同步时钟的空闲状态为低电平;若CPOL=1,串行同步时钟的空闲状态为高电平。
(2)CPHA表示数据采样在第几个边沿,第一个还是第二个。
若CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;若CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样;
注意:SPI 主模块和与之通讯的外设设备时钟极性应该一致。