如何理解SPI时钟模式?

How to understand the SPI clock modes?

网络上有许多描述 SPI timing/clock 模式的链接。例如,来自 here 的下图表示 CPOL/CPHA 的 4 种组合确定何时 sampling/transmitting 数据 wrt 时钟 rising/failing 边缘:

并且为了使SPI正常工作,需要控制器(或主机)和设备(或从机)都工作在相同的时钟模式下。

前几天看到一个QSPI controller的datasheet,说只支持mode 1 (CPOL=0, CPHA=1)。它还包含对 SPI 接口的 AC 时序要求,如下所示:

时序图确认控制器工作在模式1:空闲时sclk为低电平,数据在sclk下降沿采样。到目前为止一切顺利。

令我疑惑的是用户指南中的另一个说法:“SPI仅支持SPI模式1。但是,如果SPI设备遵循Soc AC时序,则无论模式如何都可以使用。”怎么可能?显然它违反了“相同模式”的规则。例如,当控制器处于模式 1(下降沿采样)而设备处于模式 0 或 3(上升沿采样)时,它如何工作?

顺便说一句,工作系统显示控制器实际上与 QSPI 闪存设备一起工作,其数据表显示它仅支持模式 0 和 3。这意味着我在理解 SPI 时钟模式时必须遗漏一些要点...

如有任何解释,我们将不胜感激。

您的“模式 1”qspi 控制器的行为与正常模式 1 spi 控制器不同。

看时序图:它在CLK的下降沿在MOSI上输出新数据,在CLK的下降沿对MISO进行采样。这不等同于四种 SPI 模式中的任何一种。 这样做是为了获得更高的性能。

(Q)SPI闪存在CLK上升沿采样MOSI,在CLK下降沿MISO输出新数据。 常规 SPI 控制器将在 CLK 的上升沿对 MISO 进行采样。这意味着从控制器到闪存、闪存访问和 MISO 返回控制器的整个 round-trip CLK 必须在半个时钟周期内发生。 这通常会将您限制在 25MHz 或更低。

通过让控制器在下降沿对 MISO 进行采样,round-trip 获得一个完整的时钟周期的时间,这意味着您可以达到 50MHz 或更高。

总的来说:

在 SPI 中,只有一个时钟沿对接收器很重要。在模式0和3下是上升沿,在模式1和2下是下降沿。

接收器要求它要读取的数据在重要边沿之前的一段时间内有效(称为“设置时间”),并要求它在边沿之后的一段时间内保持有效这很重要(称为“保持时间”)。

在这个小 window(设置时间加上保持时间)之外,数据线的值根本不重要。接收器在它采样数据的那个时钟边沿不做任何事情,然后这条线可能有任何值,包括介于高和低之间的中间电压。

每个发射器的唯一责任是满足接收器的要求。即master必须控制MOSI满足slave的要求,slave必须控制MISO满足master的要求。

在低速下,每个发送器满足其他设备要求的最简单方法是将相反时钟边沿时刻的数据更改为接收器关心的数据。这意味着在两端使用相同的时钟模式,如您问题中的图表所示。

在更高的速度下,这并不总是理想的,并且您的数据表摘录中描述的计时方法是普遍且完全正常的。

对于您的特定设备:

您的从属设备在 CLK 的下降沿对 MOSI 进行采样。它要求主机在此之前至少 tIS(输入采样时间)将 MOSI 驱动到正确的电平,并在此之后至少保持 tIH(输入保持时间)。

在另一个方向上,您的从设备在假定主设备对其进行采样的边沿之后至少将先前的 MISO 值保持 tCLQX(时钟低输出保持时间)。

您的从属设备在同一下降沿后不迟于 tCLQV(时钟低至输出有效时间)输出 下一个 MISO 值。

对于您问题中的原始时序图,您会假设 tCLQX 与 tCLQV 具有相同的值,并且也与时钟的下一个上升沿重合,但数据表说这确实如此不一定是这样。