《STM32从零开始学习历程》@EnzoReventon
SPI协议层
相关链接:
SPI物理层及FLASH芯片介绍
SPI特性及架构
SPI固件库
参考资料:
[野火EmbedFire]《STM32库开发实战指南——基于野火霸天虎开发板》
[正点原子]STM32F4开发指南-库函数版本_V1.2
[ST]《STM32F4xx中文参考手册》
SPI协议及总线协议介绍
W25Q128产品数据手册
协议层介绍
SPI协议定义了通讯的起始和停止信号、数据有效性、时钟同步等环节。
SPI基本通讯过程:
- 标号①处,NSS信号线由高变低,是SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机检在自己的NSS线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。
- 在图中的标号⑥处,NSS信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
- SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。
CPOL/CPHA及通讯模式:
-
时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号(即SPI通讯开始前、 NSS线为高电平时SCK的状态)。CPOL=0时, SCK在空闲状态时为低电平,CPOL=1时, SCK在空闲状态时为高电平。
-
时钟相位CPHA是指数据的采样的时刻,当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的“奇数边沿”被采样。当CPHA=1时,数据线在SCK的 “偶数边沿”采样 。
-
CK信号线在空闲状态为低电平时,CPOL=0;空闲状态为高电平时,CPOL=1。
-
CPHA=0,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,数据信号将在SCK奇数边沿时被采样,在非采样时刻,MOSI和MISO的有效信号才发生切换。
当CPHA=1时,MOSI与MISO采样为偶数边沿。 -
CK信号线在空闲状态为低电平时,CPOL=0;空闲状态为高电平时,CPOL=1。
-
CPHA=1,MOSI和MISO数据线的有效信号在SCK的偶数边沿保持不变,数据信号将在SCK偶数边沿时被采样,在非采样时刻,MOSI和MISO的有效信号才发生切换。
根据上文对CPHA以及CPOL不同功能的介绍归纳不难总结出CPHA与CPOL的组合规律。由CPOL及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用较多的是“模式0”与“模式3”。
SPI模式 | CPOL | CPHA | 空闲时SKC时钟 | 采样时刻 |
---|---|---|---|---|
0 | 0 | 0 | 低电平 | 奇数边沿 |
1 | 0 | 1 | 低电平 | 偶数边沿 |
2 | 1 | 0 | 高电平 | 奇数边沿 |
3 | 1 | 1 | 高电平 | 偶数边沿 |