我对SPI有一个简单的怀疑。我已经完成了SPI协议。我理解的每一件事。但我不知道时钟相位和时钟极性。
As there are 4 wires(MOSI, MISO, CS and SCK). I came to know from document,
SPI中有4种工作模式取决于时钟相位和时钟极性。例如,如果时钟的相位为零(即CPHA = 0),数据在时钟的上升沿锁存,CPOL = 0,并且在时钟的下降沿,CPOL = 1.根据我的理解,锁存数据,时钟需要做如下,
#define CPOL 1 // Set CPOL to 1 or 0
#define CPHA 1 // Set CPHA to 1 or 0
#if CPHA
#define SCK_POST
#if CPOL
#define SCK_INIT 1
#define SCK_PRE SCK=0
#define SCK_MID SCK=1
#else
#define SCK_INIT 0
#define SCK_PRE SCK=1
#define SCK_MID SCK=0
#endif
#else
#define SCK_PRE
#if CPOL
#define SCK_INIT 1
#define SCK_MID SCK=0
#define SCK_POST SCK=1
#else
#define SCK_INIT 0
#define SCK_MID SCK=1
#define SCK_POST SCK=0
#endif
#endif
1. My question is how the clock phase and clock polarity is configured.
由于时钟相位和时钟极性没有引脚。
2. Why 4 modes are there, it seems two mode is enough.
答案 0 :(得分:2)
重。为什么4种模式,极性决定了时钟的空闲状态,相位决定了哪个边沿数据读/写发生,因此这导致2×2 = 4种不同的可能性。 (参见diagrams。)从技术上讲,一种模式对于以这种方式传输数据“足够”,但不是强迫每个人都实现一种特定模式,SPI允许这四种可能性以获得更大的灵活性。
至于如何配置时钟相位和极性,取决于您使用的设备,并且您不指定任何设备。通常,该器件具有寄存器,其位对应于时钟相位和极性。有些芯片可能会实现类似SPI的3线协议,这种协议是不可配置的,您需要在总线上配置其他设备以匹配它。