Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded SPI通信中CPOL/CPHA设置的使用_Embedded_Microcontroller_Spi_Serial Communication - Fatal编程技术网

Embedded SPI通信中CPOL/CPHA设置的使用

Embedded SPI通信中CPOL/CPHA设置的使用,embedded,microcontroller,spi,serial-communication,Embedded,Microcontroller,Spi,Serial Communication,有谁能给我一个现实生活中的例子,说明SPI通信中的4种CPOL/CPHA配置模式是有用的?我了解它们是如何工作的,但不知道何时使用它们。我已经阅读了一些关于非标准实现兼容性的参考资料,这是怎么回事 谢谢,我有一块板,它使用SPI接口连接闪存、实时时钟和加速计。这些设备的数据表分别指定了CPOL/CPHA的不同设置。因此,当微控制器打开特定设备的SPI接口时,它会为该设备适当配置SPI控制器。我认为这四种不同的模式没有什么意义。您只需要使用您要与之接口的设备指定的模式。某些设备可能在多种模式下工作

有谁能给我一个现实生活中的例子,说明SPI通信中的4种CPOL/CPHA配置模式是有用的?我了解它们是如何工作的,但不知道何时使用它们。我已经阅读了一些关于非标准实现兼容性的参考资料,这是怎么回事


谢谢,我有一块板,它使用SPI接口连接闪存、实时时钟和加速计。这些设备的数据表分别指定了CPOL/CPHA的不同设置。因此,当微控制器打开特定设备的SPI接口时,它会为该设备适当配置SPI控制器。我认为这四种不同的模式没有什么意义。您只需要使用您要与之接口的设备指定的模式。某些设备可能在多种模式下工作。在这种情况下,请使用方便的模式。

让我试着回答为什么引入了4种模式的问题。我无法提供任何确凿的证据,但我相信这是一个可能的解释:

首先,SPI非常简单,它是关于串行发送一些比特流,通过单独的时钟和数据线,SPI模式控制时钟极性和相位。考虑到SPI的简单性,例如,实现SPI从设备所需的只是一个串行输入移位寄存器,如(见a)


现在,虽然SPI设备制造商显然已经同意了一种普遍使用的模式,但我相信引入了其他模式,以简化与简单移位寄存器的接口。有许多可用的接口,对时钟极性/相位有各种要求-SPI模式使连接它们更容易,无需任何粘合逻辑。

SPI接口允许在两条线路(MOSI和MISO)上同时发送和接收数据。时钟极性(CPOL)和时钟相位(CPHA)是定义SPI总线使用的时钟格式的主要参数。根据CPOL参数,SPI时钟可以反转或非反转。CPHA参数用于移动采样相位。如果CPHA=0,则在前导(第一)时钟边缘对数据进行采样。如果CPHA=1,则数据将在后(秒)时钟边缘上采样,无论该时钟边缘是上升还是下降。

谢谢。但是为什么一开始会有4种模式呢?什么协议设计决策导致了这种情况?为什么不是所有SPI设备都使用一种模式?Bysantine:SPI的前身只有一种CPOL/CPHA模式。使用带上拉的open-L型驱动器时,SCK负极性最好。当总线主控器单独供电时为正极性,因为主控器通电/断电时SCK不会出现故障。当MISO与BUSY/READY多路复用时,CPHA=1很有用,CPHA=0需要从机中少1个触发器。