前幾天遇到了軟件模擬spi的時候,讀和寫不一致的現象,后來仔細研究了一下,其實是時序性問題不對。
spi的有四種時序,硬件實現的時候,很簡單,初始化后直接調用api即可。但是軟件模擬就比較麻煩。
舉例如下:
讀時序如下:
寫時序如下:
這兩個結合起來就是下面四種spi模式的第四種
也就是模式2,如下所示:
值得注意的是:
按照上面的時序圖,單片機應該是在上升沿輸出數據(即寫數據),
但是,讀數據,看時序圖好像是也上上升沿,其實是錯誤的,應該是下降沿讀數據,即單片機在下降沿的時候采樣叢集的數據。
網絡參考:https://blog.csdn.net/ybhuangfugui/article/details/52068759
2.模擬SPI初始化
3.模擬SPI寫函數(時序)
這種時序的寫法在學習過51的朋友來看再熟悉不過了。
注意:
1、高字節在前,說以上面紅色標記的的部分就是將高位先輸出,依次移位輸出。
2、在時鍾的上升沿將數據輸出,所以在“時鍾-高”之前將數據輸出。
4.模擬SPI讀函數(時序)
讀時序和寫時序原理類似,但還是存在差異。
注意:
1、高位先輸出來(從機輸出),所以,需要將讀取的數據依次移向高位。
2、在時鍾的下降沿讀出數據,所以,我紅色標記的部分可以看得出來,是在時鍾為低之后才去讀取數據。