对SPI协议的掌握,重点有下面几点:
1、SPI是同步串行通信的理解
2、SPI的4线全双工通信理解。4线分别是:
- (1)SDI – 主设备数据输入,从设备数据输出;
- (2)SDO – 主设备数据输出,从设备数据输入;
- (3)SCLK – 时钟信号,由主设备产生;
- (4)CS – 从设备使能信号,由主设备控制。
另外还有种表示SDI和SDO的:
M:代表主机;S代表从设备;O代表输出;I代表输入
- MOSI:表示主机输出接从设备输入
- MISO:表示主机输入接从设备输出
3、SPI的3线半双工通信:
- (1)SDIO – 主从设备数据输出输入共用;
- (2)SCLK – 时钟信号,由主设备产生;
- (3)CS – 从设备使能信号,由主设备控制。
4、SPI主从关系,一个主设备可以有一个或多个从设备,根据硬件支持情况,主从可以动态互换。
5、SPI时序理解
(1)CPOL(时钟极性)表示时钟信号(SCLK)空闲极性
- CPOL = 0 表示时钟信号空闲为低电平。
- CPOL = 1 表示时钟信号空闲为高电平。
(2)CPHA(时钟相位)表示时钟前沿后沿与采集数据输出数据关系
- CPHA = 0 表示时钟前沿采集数据,时钟后沿输出数据。
- CPHA = 1 表示时钟前沿输出数据,时钟后沿采集数据。
个人理解,时钟前沿,是指时钟信号从空闲到开始传输数据时的第一个边沿(CPOL=0是上升,CPOL=1是下降),第二个边缘就是时钟后沿,然后就是周期性的,前后,前后。。。
如下图:
CPOL和CPHA有4种组合,对应4种时序。具体根据从设备来配置这两个值。4种时序(先传输高位后传输低位),如下图:
其中红色小圈,标注的地方,都是数据输出的地方。
图3,CPHA = 0 第一位数据(绿色标注的AC),要先放到数据线上,然后才开始第一个边沿(因为第一个边沿就是采集数据)。然后第二个边沿是输出数据(绿色标注的BD)
图4,CPHA = 1 第一位数据(绿色标注的EG),是在第一个边沿到来后放到数据线上的(因为,第一个边沿是输出数据),然后第二个边沿采集数据,再然后输出数据到数据线上(绿色标注的FH)。
6、SPI速率
全双工通信,传输速率可达几Mbps水平。具体看应用场合了,如用在flash,lcd的就是比较高的速率。
各种通信速率可以参考博客:
各类总线传输速率
7、SPI应用
SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。