對I2C總線的時鐘同步和總線仲裁的深入理解
①由于SDA、SCL為漏極開路結構,借助于外部的上拉電阻實現(xiàn)了信號的“線與”邏輯;
本文引用地址:http://m.butianyuan.cn/article/201611/320014.htm②引腳在輸出信號的同時還將引腳上的電平進行檢測,檢測是否與剛才輸出一致。為 “時鐘同步”和“總線仲裁”提供硬件基礎。
I2C總線接口內部結構
IIC設備對總線的操作僅有“把線路接地”——輸出邏輯0?;贗IC總線的設計,線路上不可能出現(xiàn)電平沖突現(xiàn)象。如果一設備發(fā)送邏輯0,其他發(fā)送邏輯1,那么線路看到的只有邏輯0。也就是說,如果出現(xiàn)電平沖突,發(fā)送邏輯0的始終是“贏家”??偩€的物理接法允許主設備往總線寫數(shù)據(jù)的同事讀取數(shù)據(jù)。這樣兩主設備爭總線的時候“贏家”并不知道競爭的發(fā)生,只有“輸家”發(fā)現(xiàn)了沖突——當寫一個邏輯1,卻讀到了0——而退出競爭。
時鐘同步
如果被控器希望主控器降低傳送速度可以通過將SCL主動拉低延長其低電平時間的方法來通知主控器,當主控器在準備下一次傳送發(fā)現(xiàn)SCL的電平被拉低時就進行等待,直至被控器完成操作并釋放SCL線的控制控制權。這樣以來,主控器實際上受到被控器的時鐘同步控制??梢奡CL線上的低電平是由時鐘低電平最長的器件決定;高電平的時間由高電平時間最短的器件決定。這就是時鐘同步,它解決了I2C總線的速度同步。
總線仲裁
假設主控器1要發(fā)送的數(shù)據(jù)DATA1為“101 ……”;主控器2要發(fā)送的數(shù)據(jù)DATA2為“1001 ……”總線被啟動后兩個主控器在每發(fā)送一個數(shù)據(jù)位時都要對自己的輸出電平進行檢測,只要檢測的電平與自己發(fā)出的電平一致,他們就會繼續(xù)占用總線。在這種情況下總線還是得不到仲裁。當主控器1發(fā)送第3位數(shù)據(jù)“1”時(主控器2發(fā)送“0” ),由于“線與”的結果SDA上的電平為“0”,這樣當主控器1檢測自己的輸出電平時,就會測到一個與自身不相符的“0”電平。這時主控器1只好放棄對總線的控制權;因此主控器2就成為總線的唯一主宰者。不難看出:
- ① 對于整個仲裁過程主控器1和主控器2都不會丟失數(shù)據(jù);
- ② 各個主控器沒有對總線實施控制的優(yōu)先級別;
- ③總線控制隨即而定,他們遵循“低電平優(yōu)先”的原則,即誰先發(fā)送低電平誰就會掌握對總線的控制權。
- ①主控器通過檢測SCL上的電平來調節(jié)與從器件的速度同步問題——時鐘同步;
- ②主控器通過檢測SDA上自身發(fā)送的電平來判斷是否發(fā)生總線“沖突”——總線仲裁。因此,I2C總線的“時鐘同步”與“總線仲裁”是靠器件自身接口的特殊結構得以實現(xiàn)的。
[1]同相器:當輸入高電平時輸出也是高電平,輸入低電平時輸出也是低電平。主要要于需要緩沖的場合,就是只要輸入很小的電流,可輸出較大的電流,增加帶載能力。
評論