1. 程式人生 > >I2C匯流排仲裁原理

I2C匯流排仲裁原理

I2C (Inter-IntegratedCircuit)匯流排是一種由PHILIPS公司開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。

I2C中心以啟動訊號START來掌管匯流排,以停止訊號STOP來釋放匯流排;啟動訊號START後緊接著傳送一個地址位元組,其中7位為被控器件的地址碼,一位為讀/寫控制位R/W,R/W位為0表示由主控向被控器件寫資料,R/W為1表示由主控向被控器件讀資料;當被控器件檢測到收到的地址與自己的地址相同時,在第9個時鐘期間反饋應答訊號;每個資料位元組在傳送時都是高位(MSB)在前;訊號波形如下圖所示。

I2C總線上可能在某一時刻有兩個主控裝置要同時向匯流排傳送資料,這種情況叫做匯流排競爭。I2

C匯流排具有多主控能力,可以對發生在SDA線上的匯流排競爭進行仲裁,其仲裁原則是這樣的: 假設主控器1要傳送的資料DATA1為“101 ……”;主控器2要傳送的資料DATA2為“1001 ……”匯流排被啟動後兩個主控器在每傳送一個數據位時都要對自己的輸出電平進行檢測,只要檢測的電平與自己發出的電平一致,他們就會繼續佔用匯流排。在這種情況下匯流排還是得不到仲裁。當主控器1傳送第3位資料“1”時(主控器2傳送“0” ),由於“線與”的結果SDA上的電平為“0”,這樣當主控器1檢測自己的輸出電平時,就會測到一個與自身不相符的“0”電平。這時主控器1只好放棄對匯流排的控制權;因此主控器2就成為匯流排的唯一主宰者。不難看出:

1.     對於整個仲裁過程主控器1和主控器2都不會丟失資料;

2.     各個主控器沒有對匯流排實施控制的優先級別,他們遵循“低電平優先”的原則,即誰先發送低電平誰就會掌握對匯流排的控制權。


老羊快跑,一個安靜的公眾號