I2C總線的仲裁機制


在多主的通信系統中。總線上有多個節點,它們都有自己的尋址地址,可以作為從節點被別的節點訪問,同時它們都可以作為主節點向其他的節點發送控制字節和傳 送數據。但是如果有兩個或兩個以上的節點都向總線上發送啟動信號並開始傳送數據,這樣就形成了沖突。要解決這種沖突,就要進行仲裁的判決,這就是I 2C總線上的仲裁。

I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁。

1  SCL線的同步(時鍾同步)

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

 

 

時鍾的同步

 

2 SDA仲裁

SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。節點在發送1位數據后,比較總線上所呈現的數據與自己發送的是否一致。是,繼續發送;否則,退出競爭。SDA線的仲裁可以保證I2C總線系統在多個主節點同時企圖控制總線時通信正常進行並且數據不丟失。總線系統通過仲裁只允許一個主節點可以繼續占據總線

3 仲裁過程

                        

 

兩個主節點的仲裁過程

上圖是以兩個節點為例的仲裁過程。DATA1和DATA2分別是主節點向總線所發送的數據信號,SDA為總線上所呈現的數據信號,SCL是總線上所呈現的時鍾信號。當主節點1、2同時發送起始信號時,兩個主節點都發送了高電平信號。這時總線上呈現的信號為高電平,兩個主節點都檢測到總線上的信號與自己發送的信號相同,繼續發送數據。第2個時鍾周期,2個主節點都發送低電平信號,在總線上呈現的信號為低電平,仍繼續發送數據。在第3個時鍾周期,主節點1發送高電平信號,而主節點2發送低電平信號。根據總線的線“與”的邏輯功能,總線上的信號為低電平,這時主節點1檢測到總線上的數據和自己所發送的數據不一樣,就斷開數據的輸出級,轉為從機接收狀態。這樣主節點2就贏得了總線,而且數據沒有丟失,即總線的數據與主節點2所發送的數據一樣,而主節點1在轉為從節點后繼續接收數據,同樣也沒有丟掉SDA線上的數據。因此在仲裁過程中數據沒有丟失。

總結:SDA仲裁和SCL時鍾同步處理過程沒有先后關系,而是同時進行的。

 

 

 

對I2C總線的時鍾同步和總線仲裁的深入理解

        每一個IIC總線器件內部的SDA、SCL引腳電路結構都是一樣的,引腳的輸出驅動與輸入緩沖連在一起。其中輸出為漏極開路的場效應管、輸入緩沖為一只高輸入阻抗的同相器[1]。這種電路具有兩個特點:

①由於SDA、SCL為漏極開路結構,借助於外部的上拉電阻實現了信號的“線與”邏輯;

②引腳在輸出信號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致。為 “時鍾同步”和“總線仲裁”提供硬件基礎。

I2C總線接口內部結構

        IIC設備對總線的操作僅有“把線路接地”——輸出邏輯0。基 於IIC總線的設計,線路上不可能出現電平沖突現象。如果一設備發送邏輯0,其他發送邏輯1,那么線路看到的只有邏輯0。也就是說,如果出現電平沖突,發 送邏輯0的始終是“贏家”。總線的物理接法允許主設備往總線寫數據的同事讀取數據。這樣兩主設備爭總線的時候“贏家”並不知道競爭的發生,只有“輸家”發 現了沖突——當寫一個邏輯1,卻讀到了0——而退出競爭。

時鍾同步

              如果被控器希望主控器降低傳送速度可以通過將SCL主動拉低延長其低電平時間的方法來通知主控器,當主控器在准備下一次傳送發現SCL的電平被拉低時就 進行等待,直至被控器完成操作並釋放SCL線的控制控制權。這樣以來,主控器實際上受到被控器的時鍾同步控制。可見SCL線上的低電平是由時鍾低電平最長 的器件決定;高電平的時間由高電平時間最短的器件決定。這就是時鍾同步,它解決了I2C總線的速度同步。

總線仲裁

               假設主控器1要發送的數據DATA1為“101 ……”;主控器2要發送的數據DATA2為“1001 ……”總線被啟動后兩個主控器在每發送一個數據位時都要對自己的輸出電平進行檢測,只要檢測的電平與自己發出的電平一致,他們就會繼續占用總線。在這種情 況下總線還是得不到仲裁。當主控器1發送第3位數據“1”時(主控器2發送“0” ),由於“線與”的結果SDA上的電平為“0”,這樣當主控器1檢測自己的輸出電平時,就會測到一個與自身不相符的“0”電平。這時主控器1只好放棄對總 線的控制權;因此主控器2就成為總線的唯一主宰者。 不難看出:

  • ① 對於整個仲裁過程主控器1和主控器2都不會丟失數據;
  • ② 各個主控器沒有對總線實施控制的優先級別;
  • ③總線控制隨即而定,他們遵循“低電平優先”的原則,即誰先發送低電平誰就會掌握對總線的控制權。

根據上面的描述,“時鍾同步”與“總線仲裁”可以總結如下規律:

  • ①主控器通過檢測SCL上的電平來調節與從器件的速度同步問題——時鍾同步;
  • ②主控器通過檢測SDA上自身發送的電平來判斷是否發生總線“沖突”——總線仲裁。因此,I2C總線的“時鍾同步”與“總線仲裁”是靠器件自身接口的特殊結構得以實現的。

 

[1]同相器:當輸入高電平時輸出也是高電平,輸入低電平時輸出也是低電平。主要要於需要緩沖的場合,就是只要輸入很小的電流,可輸出較大的電流,增加帶載能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM