I2C协议详解
I2C協議詳解
一、I2C協議簡介
I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。主器件用于啟動總線傳送數據,并產生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發和收的關系不是恒定的,而取決于此時數據傳送方向。如果主機要發送數據給從器件,則主機首先尋址從器件,然后主動發送數據至從器件,最后由主機終止數據傳送;如果主機要接收從器件的數據,首先由主器件尋址從器件.然后主機接收從器件發送的數據,最后由主機終止接收過程。在這種情況下.主機負責產生定時時鐘和終止數據傳送。
二、I2C總線結構
I2C總線在物理連接上非常簡單,分別由SDA(串行數據線)和SCL(串行時鐘線)及上拉電阻組成。通信原理是通過對SCL和SDA線高低電平時序的控制,來產生I2C總線協議所需要的信號進行數據的傳遞。在總線空閑狀態時,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平。
三、I2C總線的特征
I2C總線上的每一個設備都可以作為主設備或者從設備,而且每一個設備都會對應一個唯一的地址(可以從I2C器件的數據手冊得知),主從設備之間就通過這個地址來確定與哪個器件進行通信,在通常的應用中,我們把CPU帶I2C總線接口的模塊作為主設備,把掛接在總線上的其他設備都作為從設備。I2C總線上的主設備與從設備之間以字節(8位)為單位進行雙向的數據傳輸。
四、I2C總線的三種狀態
-
空閑狀態
-
工作開始狀態
-
工作停止狀態
空閑狀態:當SCL與SDA同時為高電平時,為空閑態:
工作開始狀態:此時SCL為高,而SDA出現下降沿(START信號):
工作停止狀態:此時SCL為高,而SDA出現上升沿(STOP信號):
五、I2C總線協議
I2C協議規定,總線上數據的傳輸必須以一個起始信號作為開始條件,以一個結束信號作為傳輸的停止條件。起始和結束信號總是由主設備產生。總線在空閑狀態時,SCL和SDA都保持著高電平,當SCL為高電平時,SDA由高到低的跳變,則會產生一個起始條件;當SCL為高時,SDA由低到高的跳變,則會產生一個停止條件。在起始條件產生后,總線處于忙狀態,由本次數據傳輸的主從設備獨占,其他I2C器件無法訪問總線;而在停止條件產生后,本次數據傳輸的主從設備將釋放總線,總線再次處于空閑狀態,當然也可以不釋放總線,可以直接選取下一個從設備并且開始下一次傳輸,最后在釋放總線即可。
傳輸數據過程中,當SCL為高電平時,SDA的點平必須保持穩定,否則可能會產生開始位或者停止位,所以數據傳輸過程中,SCL為高電平時獲取SDA的數據,在SCL為低電平時可以進行點平的轉換(SCL為低電平時不會有影響)
六、I2C讀寫時序
- 寫時序
說明:主機要向從設備寫入數據時,主機先發送起始信號,再發送從機地址+讀寫位(AD+W),收到從機ACK后,主機發送寫入的寄存器地址,收到從機ACK后,主機發送要寫入的數據,收到從機的ACK后,主機發送停止位。
- 讀時序
說明:主機要從從設備讀取數據時,主機先發送起始信號,再發送從機地址+讀寫位(AD+W),收到從機ACK后,主機發送要讀取的寄存器地址,收到從機ACK后,因為要轉換數據流方向,主機要重新發送起始信號,接著發送從機地址+讀寫位(AD+R),收到從機的ACK后,開始讀取數據并發送ACK信號,數據接收完成后,主發送NACK信號和停止信號。
總結
- 上一篇: uilabel 自适应
- 下一篇: Reflection in .net