I2C匯流排的仲裁機制
在多主的通訊系統中。總線上有多個節點,它們都有自己的定址地址,可以作為從節點被別的節點訪問,同時它們都可以作為主節點向其他的節點發送控制位元組和傳送資料。但是如果有兩個或兩個以上的節點都向總線上傳送啟動訊號並開始傳送資料,這樣就形成了衝突。要解決這種衝突,就要進行仲裁的判決,這就是I2C總線上的仲裁。
I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁。
1 SCL線的同步(時鐘同步)
SCL同步是由於匯流排具有線“與”的邏輯功能,即只要有一個節點發送低電平時,總線上就表現為低電平。當所有的節點都發送高電平時,匯流排才能表現為高電平。正是由於線“與”邏輯功能的原理,當多個節點同時傳送時鐘訊號時,在總線上表現的是統一的時鐘訊號。這就是
2 SDA仲裁
SDA線的仲裁也是建立在匯流排具有線“與”邏輯功能的原理上的。節點在傳送1位資料後,比較總線上所呈現的資料與自己傳送的是否一致。是,繼續傳送;否則,退出競爭。SDA線的仲裁可以保證I2C匯流排系統在多個主節點同時企圖控制匯流排時通訊正常進行並且資料不丟失。匯流排系統通過仲裁只允許一個主節點可以繼續佔據匯流排
3 仲裁過程
兩個主節點的仲裁過程
上圖是以兩個節點為例的仲裁過程。DATA1和DATA2分別是主節點向匯流排所傳送的資料訊號,SDA為總線上所呈現的資料訊號,SCL是總線上所呈現的時鐘訊號。當主節點1、2同時傳送起始訊號時,兩個主節點都發送了高電平訊號。這時總線上呈現的訊號為高電平,兩個主節點都檢測到總線上的訊號與自己傳送的訊號相同,繼續傳送資料。第
總結:SDA仲裁和SCL時鐘同步處理過程沒有先後關係,而是同時進行的。