[技术问答]

怎样理解SPI总线时钟的极性(CPOL)与相位(CPHA)?

[复制链接]
343|28
手机看帖
扫描二维码
随时随地手机跟帖
minzisc|  楼主 | 2023-12-13 22:41 | 显示全部楼层 |阅读模式
在单片机与外围设备的通信中,SPI总线是一种常用的通信方式。SPI是英文"Serial Periphral Interface"的缩写,中文翻译为"串行外围设备接口"。今天这篇文章,我们就来谈谈SPI通信的原理,并详细讨论下总线时钟的极性与相位。
SPI(Serial Periphral Interface)最早是由摩托罗拉公司设计并实现,它是一种高速的、全双工的通信总线,采用主机(Master)-从机(Slave)的方式进行通信。SPI占用芯片的四个引脚,也就是说采用四条信号线来进行通信。这四条线分别是:主设备输入与从设备输出线(Master In Slave Out,MISO);主设备输出与从设备输入线(Master Out Slave In,MOSI);串行同步时钟信号线(Serial Clock,SCK);外围设备片选信号线(Slave Selection,SS)。
SPI总线的主机和从机都有一个移位寄存器,当主机向自己的移位寄存器写入数据时,数据会通过MOSI信号线进入到从机的移位寄存器;同时,从机移位寄存器里的数据,通过MISO信号线进入到主机的移位寄存器。这样,主机和从机就完成了一次数据交换。下面这张图,是SPI通信的简明原理图:
SPI数据的传输是在串行同步时钟信号(Serial Clock,SCK)的控制下进行的。主机的时钟发生器一方面控制主机的移位寄存器,另一方面通过从机的SCK信号线来控制从机的移位寄存器,从而保证主机与从机的数据交换是同步进行的。
SPI串行同步时钟可以设置为不同的极性(Clock Polarity ,CPOL)与相位(Clock Phase ,CPHA)。
时钟的极性(CPOL)用来决定在总线空闲时,同步时钟(SCK)信号线上的电位是高电平还是低电平。当时钟极性为0时(CPOL=0),SCK信号线在空闲时为低电平;当时钟极性为1时(CPOL=1),SCK信号线在空闲时为高电平;
时钟的相位(CPHA)用来决定何时进行信号采样。
当时钟相位为1时(CPHA=1),在SCK信号线的第二个跳变沿进行采样;这里的跳变沿究竟是上升沿还是下降沿?取决于时钟的极性。当时钟极性为0时,取下降沿;当时钟极性为1时,取上升沿;如下图:
当时钟相位为0时(CPHA=0),在SCK信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为0时,取上升沿;当时钟极性为1时,取下降沿;如下图:

使用特权

评论回复
sdlls| | 2024-2-2 20:49 | 显示全部楼层
时钟极性(CPOL)‌ 决定了时钟信号在空闲状态下的电平。如果CPOL=0,那么在空闲状态时SCK(Serial Clock)信号是低电平;如果CPOL=1,则在空闲状态时SCK信号是高电平。换句话说,CPOL的值反映了时钟信号的默认电平状态。

使用特权

评论回复
pentruman| | 2024-2-3 08:35 | 显示全部楼层
CPHA决定了在哪个时钟跳变沿进行数据采样。具体来说,当CPHA为0时,表示在时钟信号的第一个跳变沿进行数据采样;而当CPHA为1时,表示在时钟信号的第二个跳变沿进行数据采样。需要注意的是,这里的“第一个”和“第二个”跳变沿是相对于数据传输的开始而言的,而不是指整个通信过程中的第一个和第二个跳变沿。

使用特权

评论回复
mmbs| | 2024-2-3 17:05 | 显示全部楼层
SCLK线用于同步数据传输,它的极性(CPOL)和相位(CPHA)决定了数据传输的时钟特性。

使用特权

评论回复
mnynt121| | 2024-2-3 17:34 | 显示全部楼层
时钟极性决定了数据采样和传输是在时钟线的上升沿还是下降沿进行。

使用特权

评论回复
minzisc|  楼主 | 2024-2-3 19:35 | 显示全部楼层
在实际应用中,选择合适的CPOL和CPHA设置通常取决于数据的时序要求和设备的特性。例如,如果数据需要在时钟的第一个边沿采样以减少延迟,则选择模式0或模式2。如果数据采样和传输在时钟的第二个边沿更为合适,则选择模式1或模式3。

使用特权

评论回复
tabmone| | 2024-2-3 22:03 | 显示全部楼层
理解CPOL和CPHA的设置对于确保SPI通信的正确性至关重要

使用特权

评论回复
gygp| | 2024-2-4 20:58 | 显示全部楼层
SPI总线的两个关键参数是时钟极性CPOL(Clock Polarity)和时钟相位CPHA(Clock Phase),它们共同决定了数据采样和移出的精确时刻。

使用特权

评论回复
zwsam| | 2024-2-5 10:41 | 显示全部楼层

使用特权

评论回复
robertesth| | 2024-2-5 11:54 | 显示全部楼层
时钟相位指的是数据采样相对于时钟边沿的时间点。
如果CPHA为0,则数据采样发生在时钟的第一个边沿(上升沿或下降沿,由CPOL决定)。
如果CPHA为1,则数据采样发生在时钟的第二个边沿(上升沿或下降沿,由CPOL决定)。

使用特权

评论回复
adolphcocker| | 2024-2-5 12:53 | 显示全部楼层
CPOL和CPHA的组合决定了SPI总线的时钟信号的特定模式,常见的模式有以下四种:

Mode 0:CPOL=0,CPHA=0。时钟信号在空闲状态时为低电平,在上升沿采样数据。
Mode 1:CPOL=0,CPHA=1。时钟信号在空闲状态时为低电平,在下降沿采样数据。
Mode 2:CPOL=1,CPHA=0。时钟信号在空闲状态时为高电平,在上升沿采样数据。
Mode 3:CPOL=1,CPHA=1。时钟信号在空闲状态时为高电平,在下降沿采样数据。

使用特权

评论回复
geraldbetty| | 2024-2-5 13:27 | 显示全部楼层
如果CPHA=0,数据将在SCK信号的首个跳变沿(上升沿或下降沿)被采样,具体是哪个跳变沿取决于CPOL的值;如果CPHA=1,数据将在SCK信号的第二个跳变沿(上升沿或下降沿)被采样。

使用特权

评论回复
robincotton| | 2024-2-5 14:41 | 显示全部楼层
在进行SPI通信时,需要确保主设备和从设备使用相同的工作模式。在STM32系列单片机中,可以通过SPI_CR1寄存器来设置时钟的极性(CPOL)与相位(CPHA)。

使用特权

评论回复
nomomy| | 2024-2-5 15:35 | 显示全部楼层
在实际应用中,通常需要参考设备的数据手册来确定这些设置

使用特权

评论回复
minzisc|  楼主 | 2024-2-6 10:25 | 显示全部楼层
CPOL定义了时钟信号在空闲状态时的电平。具体来说,当CPOL为0时,表示时钟信号在空闲状态为低电平;而当CPOL为1时,表示时钟信号在空闲状态为高电平。在通信过程中,数据在时钟信号的跳变沿进行传输,而这个跳变沿(上升沿或下降沿)则由时钟相位(CPHA)决定。

使用特权

评论回复
vivilyly| | 2024-2-6 11:34 | 显示全部楼层
时钟相位是指数据采样时刻相对于时钟信号上升沿的位置。CPHA=0表示在时钟信号的上升沿采样数据,CPHA=1表示在时钟信号的下降沿采样数据。CPHA参数决定了数据的采样时刻,对于正确接收和发送数据同样至关重要。

使用特权

评论回复
mmbs| | 2024-2-6 12:00 | 显示全部楼层
通过SCK时钟的空闲状态来判断极性CPOL是0还是1,当空闲状态SCK=0,则CPOL =0。反之,SCK=1 ,则CPOL=1。

使用特权

评论回复
yeates333| | 2024-2-6 12:28 | 显示全部楼层
通过数据采样时刻对应的SCK时钟是前沿(第一个边沿)还是后沿(第二个边沿)来判断相位CPHA是0还是1。

使用特权

评论回复
mollylawrence| | 2024-2-6 15:40 | 显示全部楼层
时钟极性指的是SPI总线空闲时钟线的状态,即在没有数据传输时,时钟线是高电平还是低电平。
如果CPOL为0,则表示空闲时钟线状态为低电平。
如果CPOL为1,则表示空闲时钟线状态为高电平。

使用特权

评论回复
lzmm| | 2024-2-6 20:19 | 显示全部楼层
总线是一种同步串行通信接口,广泛应用于各种嵌入式系统中。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

5170

帖子

4

粉丝