SPI和IIC都是比較常用的短距離通訊方式,主要用在PCB板間或者芯片之間實現近距離通信。比如AT24C02就是通過IIC和單片機實現數據通信的,BMP280即可以通過IIC又可以通過SPI和單片機進行數據通信。
這兩種通信方式都有著各自的時序圖,在編程時需要認真研究時序圖,根據時序圖編寫程序,下面舉例子。
SPI通訊時序介紹
SPI是比較高速的通訊方式,具有三線制和四線制之分,四線制有CS,SCK,MISO,MOSI等。SPI具有四種工作模式,并且時鐘極性CPOL和時鐘相位CPHA可以配置,這個在編程序時需要注意:如果CPOL=0,則空閑狀態為低電平;如果CPOL=1,則空閑狀態為高電平。CPHA決定著在哪個邊沿進行數據采集。如果CPHA=0,則在第一個跳變沿進行數據采樣;如果CPHA=1,則在第二個跳變沿進行數據采樣。
對于具體程序代碼的編寫,可以根據時序圖慢慢研究,或者參考別人的代碼和時序圖進行對比。
IIC通訊時序介紹
IIC只有兩根線,分別為SCL和SDA。主從式結構,一個主機可以接多個主機,典型的拓撲結構圖如下所示。
IIC在通訊時,需要需要有三個過程/信號:開始信號、應答信號和結束信號。每種信號都有嚴格的時序要求。以起始和結束為例介紹一下,時序圖如下所示。
在SCL為高電平期間,如果SDA出現下降沿則為起始信號;如果SCL為高電平期間,SDA為上升沿,則為結束信號。在編程時就要依據這個時序圖。IIC可以使用普通GPIO口模擬,也可以使用單片機的片上資源,開始信號的實現代碼如下所示。
程序的實現沒法細細解釋,只能自己去編代碼,可以自己對著時序圖去編寫,也可以從網上參考代碼。
如果有具體的問題可以再次在悟空提問。