SPI(Serial Peripheral Interface)是一种同步串行通信协议,用于在微控制器(MCU)和外部设备之间进行高速数据传输。SPI的通信模式主要依赖于时钟极性(CPOL)和时钟相位(CPHA),它们决定了数据传输的时序。SPI协议一共定义了四种通信模式,每种模式的不同之处在于时钟极性和时钟相位的设置。
SPI四种通信模式
SPI的通信模式由时钟极性(CPOL)和时钟相位(CPHA)决定。它们的组合产生了四种模式:
-
模式 0(CPOL = 0, CPHA = 0)
时序描述:
- 时钟极性(CPOL): 0 表示时钟线在空闲时保持低电平。
- 时钟相位(CPHA): 0 表示数据在时钟的上升沿(奇数边沿)采样,并在下降沿(偶数边沿)输出。
- SCK空闲时为低电平。
- 数据在时钟的上升沿被采样。
-
模式 1(CPOL = 0, CPHA = 1)
时序描述:
- 时钟极性(CPOL): 0,时钟线在空闲时为低电平。
- 时钟相位(CPHA): 1 表示数据在时钟的下降沿(偶数边沿)采样,并在上升沿(奇数边沿)输出。
- SCK空闲时为低电平。
- 数据在时钟的下降沿被采样。
-
模式 2(CPOL = 1, CPHA = 0)
时序描述:
- 时钟极性(CPOL): 1,时钟线在空闲时保持高电平。
- 时钟相位(CPHA): 0 表示数据在时钟的下升沿(奇数边沿)采样,并在上降沿(偶数边沿)输出。
- SCK空闲时为高电平。
- 数据在时钟的上升沿被采样。
-
模式 3(CPOL = 1, CPHA = 1)
时序描述:
- 时钟极性(CPOL): 1,时钟线在空闲时为高电平。
- 时钟相位(CPHA): 1 表示数据在时钟的上降沿(偶数边沿)采样,并在下升沿(奇数边沿)输出。
- SCK空闲时为高电平。
- 数据在时钟的下降沿被采样。
SPI通信协议时序图
模式1举例说明:
总结
SPI有四种通信模式(背过):
时钟极性CPOL : 设置时钟空闲时的电平
当CPOL = 0 ,SCK引脚在空闲状态保持低电平;
当CPOL = 1 ,SCK引脚在空闲状态保持高电平。
时钟相位CPHA :设置数据采样时的时钟沿
当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样
当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样
SPI中时钟的极性和相位的作用是什么?
- SPI的时钟极性用来表示时钟信号在空闲时是高电平还是低电平。
- SPI的相位决定何时进行信号采样,在第一个跳变沿还是第二个跳变沿。
数据线被采样,都是等待数据线变化稳定半个时钟周期进行采样。
通信模式的设置:
由CPOL及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,因此通常主机要按照从机支持的模式去设置