详解SPI中的极性CPOL和相位CPHA

详解SPI中的极性CPOL和相位CPHA
SPI由于接口相对简单(只需要4根线) , 用途算是比较广泛 , 主要应用在  , FLASH , 实时时钟 , AD转换器 , 还有数字信号处理器和数字信号解码器之间 。即一个SPI的通过SPI与一个从设备 , 即上述的那些Flash , ADC等 , 进行通讯 。而主从设备之间通过SPI进行通讯 , 首先要保证两者之间时钟SCLK要一致 , 互相要商量好了 , 要匹配 , 否则 , 就没法正常通讯了 , 即保证时序上的一致才可正常讯 。而这里的SPI中的时钟和相位 , 指的就是SCLk时钟的特性 , 即保证主从设备两者的时钟的特性一致了 , 以保证两者可以正常实现SPI通讯 。
SPI的极性和相位Phase , 最常见的写法是CPOL和CPHA , 不过也有一些其他写法 , 简单总结如下:
(1) CKPOL (Clock ) = CPOL = POL == (时钟)极性
(2) CKPHA (Clock Phase)= CPHA = PHA = Phase = (时钟)相位
(3) SCK=SCLK=SPI的时钟
(4) Edge=边沿 , 即时钟电平变化的时刻 , 即上升沿( edge)或者下降沿( edge)
对于一个时钟周期内 , 有两个edge , 分别称为:
(1) edge=前一个边沿=第一个边沿 , 对于开始电压是1 , 那么就是1变成0的时候 , 对于开始电压是0 , 那么就是0变成1的时候;
(2) edge=后一个边沿=第二个边沿 , 对于开始电压是1 , 那么就是0变成1的时候(即在第一次1变成0之后 , 才可能有后面的0变成1) , 对于开始电压是0 , 那么就是1变成0的时候;
本博文采用如下用法:
极性=CPOL相位==时钟第一个边沿和第二个边沿
CPOL和CPHA , 分别都可以是0或时1 , 对应的四种组合就是:
下面详细介绍 。
CPOL极性先说什么是SCLK时钟的空闲时刻 , 其就是当SCLK在发送8个bit比特数据之前和之后的状态 , 于此对应的 , SCLK在发送数据的时候 , 就是正常的工作的时候 , 有效的时刻了 。其英文精简解释为:Clock= IDLE state of SCK 。
SPI的CPOL , 表示当SCLK空闲idle的时候 , 其电平的值是低电平0还是高电平1:
CPOL=0 , 时钟空闲idle时候的电平是低电平 , 所以当SCLK有效的时候 , 就是高电平 , 就是所谓的-high;
CPOL=1 , 时钟空闲idle时候的电平是高电平 , 所以当SCLK有效的时候 , 就是低电平 , 就是所谓的-low;
从上图中可以看出 , (CPOL=0)的SCK 波形 , 它有(传输)8 个脉冲 , 而在脉冲传输前和完成后 都保持在【低电平状态】 。此时的状态就是时钟的空闲状态或无效状态 , 因为此时没有脉冲 ,  也就不会有数据传输 。同理得出 , (CPOL=)1 的图 , 时钟的空闲状态或无效状态时SCK 是保持 【高电平的】 。
CPHA相位首先说明一点 , = latch = read =  , 都是表示数据采样 , 数据有效的时刻 。相位 , 对应着数据采样是在第几个边沿(edge) , 是第一个边沿还是第二个边沿 , 0对应着第一个边沿 , 1对应着第二个边沿 。
对于:
CPHA=0 , 表示第一个边沿:
对于CPOL=0 , idle时候的是低电平 , 第一个边沿就是从低变到高 , 所以是上升沿;
【详解SPI中的极性CPOL和相位CPHA】

详解SPI中的极性CPOL和相位CPHA

文章插图
对于CPOL=1 , idle时候的是高电平 , 第一个边沿就是从高变到低 , 所以是下降沿;
CPHA=1 , 表示第二个边沿:
对于CPOL=0 , idle时候的是低电平 , 第二个边沿就是从高变到低 , 所以是下降沿;
对于CPOL=1 , idle时候的是高电平 , 第一个边沿就是从低变到高 , 所以是上升沿;
我们看上面的图 , 发现数据 SI 是对应 SCK 的第一个时钟沿 , 再仔细看 , 数据是在SCK的第一个时钟边沿保持稳定【数据被采样捕获】 , 在下一个边沿改变【SCK 的下降沿数据改变】因此我们得出结论:该系列FLASH 是【数据在第一个时钟沿被采样捕获】或【数据在SPCK 起始边沿捕获 , 在SPCK 下一个边沿改变】
如何判断CPOL和CPHA
如果起始的SCLK的电平是0 , 那么CPOL=0 , 如果是1 , 那么CPOL=1 , 然后看数据采样时刻 , 即时序图数据线上的数据那个矩形区域的中间所对应的位置 , 对应到上面SCLK时钟的位置 , 对应着是第一个边沿或是第二个边沿 , 即CPHA是0或1 。(对应的是上升沿还是还是下降沿 , 要根据对应的CPOL的值 , 才能确定) 。
(1)如何判断CPOL:SCLK的空闲时候的电压 , 是0还是1 , 决定了CPOL是0还是1;
(2)如何判断CPHA:而数据采样时刻对应着的SCLK的电平 , 是第一个边沿还是第二个边沿 , 对应着CPHA为0还是1 。
SCLK的极性 , 相位 , 边沿之间的内在逻辑
最后来看一下的SPI的CPOL和CPHA , 结合前面讲的理论知识 , 下面的图就很好理解啦!