i2c協議詳細介紹

1.SDA和SCL信號

  SDA和SCL都是雙向線,通過一個電流源或者上拉電阻連接到一個正電壓。當總線空閒時,兩線都是高電平。連接到總線的設備輸出狀態必須開漏或者開集電極來執行線與功能。總線數據的傳輸速率在標準模式下達到100kbit/s,在快速模式下達到400kbit/s,在快速+模式下達到1Mbit/s,在高速模式下達到3.4Mbit/s。總線電容限制了連接到總線上的接口數量

2.SDA和SCL的邏輯電平

  由於不同種類的技術設備(CMOS,NMOS,bipolar)都能接入IIC總線,邏輯電平0和1不是固定的,而是依賴於相關聯的Vdd。輸入參考電平是0.3Vdd和0.7Vdd(一些早期設備是固定的Vil=1.5V和Vih=3.0V)。

3.數據有效性

  SDA上的數據必須在SCL爲高電平時保持穩定,而在SCL爲低電平時,切換高低狀態。每發送一位數據,需要一個時鐘脈衝。

4、起始和停止狀態。

  全部的通信事物開始於一個起始信號,終止於一個停止信號。在SCL爲高電平時,SDA從高到低的轉換,定義爲起始狀態。在SCL爲高電平,SDA從低到高的轉換,定義爲停止狀態。

  

  起始狀態和停止狀態一直由主機生成。起始狀態之後總線處於忙的狀態。在停止狀態出現,再經過一個確定的時間後,總線狀態變成空閒。

  如果主機生成一個重複的起始狀態代替停止狀態,總線將一直保持忙狀態。在這方面,起始狀態和重複的起始狀態在功能上是一致的。

  連接到總線上的設備如果集成了所需的接口硬件,能夠很容易的監測到起始狀態和停止狀態。對於沒有此硬件的控制器,不得不在一個時鐘週期內至少採樣SDA線兩次,來監測其電平變化。

5.字節格式

  在SDA線上的每個字節都是8位長。每次傳輸能被髮送的字節數量無限制。每個字節後面必須跟隨來自接收方的ACK(一個低電平)。數據總是從字節的高位開始傳輸。如果從機不能夠接收或者發送另一個完整的字節數據,比如從機正在執行一箇中斷服務,從機應該保持SCL爲低電平,強制主機進入一個等待狀態。當從機準備好數據並且釋放SCL線,數據傳輸可繼續進行。

6.ACK和NACK

  每個字節後面都會產生ACK。接收者使用ACK位通知發送者字節數據已經被成功接收,下一個可以被髮送。主機產生所有的時鐘脈衝,也包括產生ACK的第九個時鐘脈衝。

  ACK信號被定義如下:發送者在ACK時鐘脈衝期間釋放SDA線,接收者能置SDA線爲低電平,並且在時鐘脈衝高電平期間保持低電平狀態。建立和保持時間也必須被考慮。

  在第九個時鐘脈衝如果SDA保持高電平,則被定義爲NACK信號。此時,主機能生成一個停止狀態來終止發送或者生成一個重複開始狀態來啓動一個新的發送。如下有五種情況能導致產生NACK信號:

  (1)總線上沒有數據地址對應的接收者,所以沒有設備能夠響應一個ACK。

  (2)接收者因爲正在執行一個實時功能,沒有準備好開始和主機通信,不能夠執行接收或者發送。

  (3)在數據傳輸期間,接收者獲取的數據或者命令不能被理解。

  (4)在數據傳輸期間,接收者不能接收更多的數據了。

  (5)當主機作爲接收者時,它必須使用NACK信號通知從機發送者停止傳輸。

7.時鐘同步
  兩個主機能同時在空閒的總線上開始發送。這裏必須有一個方式來決定哪個主機控制總線完成其數據傳輸。這個被時鐘同步和仲裁來完成。在單個主機系統中,時鐘同步和仲裁是不需要的。

  時鐘同步使用IIC接口的線與連接,在SCL線上完成。這意味着在SCL線上一個從高到低的轉換會造成主機開始對他們的低電平週期計數。一旦一個主機時鐘變爲低電平,它將使SCL線保持低電平直到時鐘的高電平狀態到達。如果另一個時鐘仍然保持低電平週期,則由低到高的時鐘電平轉換不能改變SCL線的狀態。SCL線因此被擁有最長低電平時鐘的主機保持爲低。此時,擁有更短低電平時鐘的主機則進入一個高電平等待狀態。當全部主機計數完其時鐘低電平週期,SCL線被釋放變爲高電平。然後主機開始計數其時鐘高電平週期,第一個完成時鐘高電平週期的主機將再次將SCL線拉低變爲低電平。

  通過這種方式,一個同步的SCL時鐘被生成。同步時鐘的低週期被擁有最長時鐘低週期的主機決定,同步時鐘的高週期被擁有最短時鐘高週期的主機決定。

  

8.仲裁

  當 SCL 線是高電平時,仲裁在 SDA 線上發生。在其他主機發送低電平時,發送高電平的主機將由於總線電平與自己不同而失去總線,繼而斷開其輸出級。

  

9.從機地址和讀寫位

  從機有7位地址,在EEPROM中有固定地址和硬件決定地址組成1010+A2A1A0,第八位爲讀寫位,0爲寫,1爲讀。

數據傳輸應該以一個停止位結束。如果在結束前,主機仍想傳輸數據,則可以重新發送起始位和地址數據。

  主機寫,從機主要產生ACK

  

  主機讀,從機發送數據後,主機產生ACK,最後一個數據主機發送NACK和STOP

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章