發表於 2019-09-13 15:46:00
I2C結合了SPI和UART的優點。使用I2C,您可以將多個從設備連接到單個主設備上(如SPI),並且可以讓多個主器件控制單個或多個從器件。當您希望有多個微控制器記錄數據到單個存儲卡或將文本顯示到單個LCD時,這非常有用。
使用I2C時,數據被轉換成messages,messages則被分解為數據幀。每條messages都有一個地址幀,其中包含從站的二進位地址,以及一個或多個包含正在傳輸的數據的數據幀。該消息還包括每個數據幀之間的啟動和停止條件,讀/寫位和ACK/NACK位:
啟動條件:在SCL線路從高電平切換到低電平之前,SDA線路從高電平切換到低電平。
停止條件:SCL線路從低電平切換到高電平後,SDA線路從低電平切換到高電平。
地址幀:每個從站唯一的7或10位序列,用於在主站想與之通信時識別從站。
讀/寫位:單個位,指定主器件是向從器件發送數據(低電壓電平)還是從器件請求數據(高電壓電平)。
ACK/NACK位:消息中的每個幀後跟一個應答/不應答位。如果成功接收到地址幀或數據幀,則從接收設備向發送方返回ACK位。
地址
I2C沒有像SPI這樣的從選擇線,因此它需要另一種方法讓從器件知道數據正在發送給它,而不是另一個從器件。它通過地址來做到這一點。地址幀始終是新消息中起始位之後的第一幀。
主設備將與其通信的從設備的地址發送給與其連接的每個從設備。然後,每個從設備將從主設備發送的地址與其自己的地址進行比較。如果地址匹配,則將低電壓ACK位發送回主機。如果地址不匹配,則從器件不執行任何操作,SDA線保持高電平。
讀/寫位
地址幀在末尾包括一個位,用於通知從設備,主設備是想要向其寫入數據還是從主設備接收數據。如果主設備想要向從設備發送數據,則讀/寫位是低電平。如果主設備向從設備請求數據,則該位是高電平。
數據框架
在主設備檢測到來自從設備的ACK位之後,準備好發送第一個數據幀。
數據幀始終為8位長,並以最高有效位先發送。緊接著每個數據幀的ACK/NACK位以驗證幀已被成功接收。在發送下一個數據幀之前,主機或從機必須接收ACK位(取決於發送數據的人)。
在發送了所有數據幀之後,主設備可以向從設備發送停止條件以停止傳輸。停止條件是SCL線上從低電平到高電平轉換後,SDA線上從低電平變為高電平,SCL線保持高電平。
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴