個人紀錄I2C重要知識

I2C傳輸速率一般是100k,200k,400k,3.2Mbps
其時鐘速率與可編程的時鐘輸出決定

I2C接口採用Open Drain機制, 器件本身不能輸出高電平,只能輸出低電平,需要外置上拉電阻(1k-10k)
外設數量限制:等效電<400pf

I2C起始信號與停止信號
SCL保持高電平 SDA從高拉低表示起始
SDA 從低位拉高表示停止位,
總線總是在收到起始位之後處於忙狀態,直到停止位之後釋放總線

I2C 傳輸
首字節是由地址位和傳輸方向位組成(7bit地址位+1bit讀寫位(0表示寫,1表示讀))之後會收到ACK(從設備將sda拉低)
然後進行數據操作傳輸大致可以分爲三種操作
主設備寫操作:
第一,主設備寫數據,數據傳輸格式如下
S 從設備地址(7bit) W ACK 數據 ACK 數據 ACK P

第二,主設備讀操作:
S 從設備地址(7bit) R ACK 數據 ACK 數據 NACK P

第三,主設備先寫然後重啓起始條件接着讀操作,或者主設備先讀然後重啓起始條件接着寫操作
S 從設備地址(7bit) R/W ACK 數據 ACK RS 從設備地址 R/W ACK 數據 ACK …

I2C總線競爭仲裁
總線上可能掛接多個器件,有時候會發生兩個或多個主器件同時想佔用總線的情況,這種情況就會出現總線仲裁
I2C協議規定,仲裁不能在下面的情況之間進行:
重複的起始條件和數據位
停止條件和數據位
重複的起始條件和停止條件
從機不被捲入衝裁過程

總線規範關於仲裁需要明白一些先決條件
(1)I2C總線的控制只由地址和主機碼以及競爭主機發送的數據決定,沒有中央主機,總線也沒有任何定製的優先權
(2)主控只能在總線空閒的時候啓動傳送,兩個或多個主機可能在起始條件的最小持續時間tHD;STA內產生一個起始條件,
結果在總線上產生一個規定的起始條件。
(3)當SCL線是高電平時,仲裁在SDA線發生;這樣,在其他主機發送低電平時,發送高電平的主機將斷開它的數據輸出級,
因爲總線上的電平與它自己的電平不相同。
然後,獲得進一步的判定條件:
(1)仲裁可以持續多位。首先是比較地址位。如果每個主機都試圖尋址同一的器件,仲裁會繼續比較數據位(假如主機是發送器),
或者比較響應位(假如主機是接收器)
(2)I2C總線的地址和數據信息由贏的仲裁的主機決定,在仲裁過程中不會丟失信息,
丟失仲裁的主機可以產生時鐘脈衝直到丟失仲裁的該字節末尾
(3)在串行傳輸過程中時,一旦有重複的起始條件或者停止條件發送到i2C總線的時候,仲裁過程仍在進行。
如果可能產生這種情況,有關的主機必須在幀格式相同位置發送這個重複起始或停止條件。
(4)此外,如果主機也結合了從機功能,而且在尋址階段丟失仲裁,它很有可能就是贏得仲裁的主機在尋址的器件,
那麼,丟失的主機必須立即切換到它的從機模式

時鐘同步:
時鐘SCL同步是建立在總線具有線“與”的邏輯功能,即只要總線節點上有一個發送低電平,總線上就表現爲低電平;
當所有節點都發送高電平時,才表現爲高電平。正是由於線“與”的邏輯功能,當多個節點同時發送
時鐘信號時,總線上表現的是統一的時鐘信號。這就是SCL的同步原理

如有問題歡迎交流,後續有更新再補上,接下來會更新i2c子系統的學習,盡情期待

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