SPI 通信方式總結
在SPI通信中,通信管腳的配置是一部分,而對於通信的配置則顯得跟重要,因爲這個配置錯誤的話,會導致接收的數據是錯位的,並且這個跟從設備相關。
下面已STM8L的SPI爲例:
SPI初始化的函數原型是:
void SPI_Init(SPI_TypeDef* SPIx, SPI_FirstBit_TypeDef SPI_FirstBit,
SPI_BaudRatePrescaler_TypeDef SPI_BaudRatePrescaler,
SPI_Mode_TypeDef SPI_Mode, SPI_CPOL_TypeDef SPI_CPOL,
SPI_CPHA_TypeDef SPI_CPHA, SPI_DirectionMode_TypeDef SPI_Data_Direction,
SPI_NSS_TypeDef SPI_Slave_Management, uint8_t CRCPolynomial)
{
}
其中我們重點關注SPI_CPHA和SPI_CPOL,這兩個參數代表了時鐘的相位即時鐘的極性。
在手冊中,對這兩個參數不同的組合,列出不同的通信時序圖:
CPOL表示時鐘在空閒狀態的極性是高電平還是低電平,而CPHA則表示數據是在什麼時刻被採樣的,
具體有下面四種類型分別對應上面的時序圖。
Mode | CPOL | CPHA |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
最近調試W25Q16 Flash時,使用不對的配置,發現接收回來的數據不對,之後查了下W25Q16的數據手冊,返現其中W25Q16的SPI總線模式是Mode0 或Mode3 ,這個在手冊中或本文中下面的時序圖中可以看出,那麼就要將CPOL和CPHA都配置爲0或1。