SPI中的CPOL和CPHA学习SPI必须掌握的知识,因为它涉及到“数据位采集”。重点掌握空闲时SCK的电平是怎么定义的。采集时,是怎么规定发生在哪个时钟边沿。CPOL用来决定SPI总线在空闲时,SPI_SCK引脚输出的电平;CPHA用来决定“数据位采集点”发生在第几边沿。
什么叫“SPI总线在空闲”?
对于SPI主机来说,就是没有数据传输,即:不发送数据,也不接收数据,这种总线的状态叫空闲状态。
SPI外设初始化完成后,SPI总线处于空闲状态,既不发送数据也不接收数据。
SPI_SCK引脚的输出电平是由CPOL位来决定。
CPOL=0,表示SPI总线在空闲时,SPI_SCK引脚输出低电平;
CPOL=1,表示SPI总线在空闲时,SPI_SCK引脚输出高电平;
什么是SPI时钟的第1边沿?
SPI总线从空闲状态进入传输数据时,出现的“第1个边沿”。
“第1个边沿”是上升沿,还是下降沿,要看CPOL的值。
CPOL=0,SPI_SCK引脚在SPI总线空闲时输出的是低电平,那么“SPI时钟的第1边沿”就是上升沿。
CPOL=1,SPI_SCK引脚在SPI总线空闲时输出的是高电平,那么“SPI时钟的第1边沿”就是下降沿。
什么是SPI时钟的第2边沿?
SPI总线从空闲状态进入传输数据时,出现的“第2个边沿”。
“第2个边沿”是上升沿,还是下降沿,要看CPOL的值。
CPOL=0,SPI_SCK引脚在SPI总线空闲时输出的是低电平,那么“SPI时钟的第2边沿”就是下降沿。
CPOL=1,SPI_SCK引脚在SPI总线空闲时输出的是高电平,那么“SPI时钟的第2边沿”就是上升沿。
为了保证SPI硬件协议得以实现,约定使用“CPHA位的值”来决定采集点。
CPHA=0表示在“SPI时钟的第1边沿”处采集数据;
CPHA=1表示在“SPI时钟的第2边沿”处采集数据;
小结:
下面这张图,做过SPI通讯的,一般都见过,但是真正看懂的人不多。我和大家一样,人云亦云,看久了,就会明白了。
上面的图,是把两种情况合在一起,看起来很费劲。若拆开了,就好懂了。见下图:
图中有文字,一看就知道了,不用再去看定义了。从上图可以看出,SPI总是先移出数据的最高位。
以上是我个人的理解,若有错误之处,请给我留言。