新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 對I2C總線的時(shí)鐘同步和總線仲裁的深入理解

對I2C總線的時(shí)鐘同步和總線仲裁的深入理解

作者: 時(shí)間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
每一個(gè)IIC總線器件內(nèi)部的SDA、SCL引腳電路結(jié)構(gòu)都是一樣的,引腳的輸出驅(qū)動(dòng)與輸入緩沖連在一起。其中輸出為漏極開路的場效應(yīng)管、輸入緩沖為一只高輸入阻抗的同相器[1]。這種電路具有兩個(gè)特點(diǎn):

①由于SDA、SCL為漏極開路結(jié)構(gòu),借助于外部的上拉電阻實(shí)現(xiàn)了信號的“線與”邏輯;

本文引用地址:http://m.butianyuan.cn/article/201611/320014.htm

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

I2C總線接口內(nèi)部結(jié)構(gòu)

IIC設(shè)備對總線的操作僅有“把線路接地”——輸出邏輯0。基于IIC總線的設(shè)計(jì),線路上不可能出現(xiàn)電平?jīng)_突現(xiàn)象。如果一設(shè)備發(fā)送邏輯0,其他發(fā)送邏輯1,那么線路看到的只有邏輯0。也就是說,如果出現(xiàn)電平?jīng)_突,發(fā)送邏輯0的始終是“贏家”??偩€的物理接法允許主設(shè)備往總線寫數(shù)據(jù)的同事讀取數(shù)據(jù)。這樣兩主設(shè)備爭總線的時(shí)候“贏家”并不知道競爭的發(fā)生,只有“輸家”發(fā)現(xiàn)了沖突——當(dāng)寫一個(gè)邏輯1,卻讀到了0——而退出競爭。

時(shí)鐘同步

如果被控器希望主控器降低傳送速度可以通過將SCL主動(dòng)拉低延長其低電平時(shí)間的方法來通知主控器,當(dāng)主控器在準(zhǔn)備下一次傳送發(fā)現(xiàn)SCL的電平被拉低時(shí)就進(jìn)行等待,直至被控器完成操作并釋放SCL線的控制控制權(quán)。這樣以來,主控器實(shí)際上受到被控器的時(shí)鐘同步控制??梢奡CL線上的低電平是由時(shí)鐘低電平最長的器件決定;高電平的時(shí)間由高電平時(shí)間最短的器件決定。這就是時(shí)鐘同步,它解決了I2C總線的速度同步。

總線仲裁

假設(shè)主控器1要發(fā)送的數(shù)據(jù)DATA1為“101 ……”;主控器2要發(fā)送的數(shù)據(jù)DATA2為“1001 ……”總線被啟動(dòng)后兩個(gè)主控器在每發(fā)送一個(gè)數(shù)據(jù)位時(shí)都要對自己的輸出電平進(jìn)行檢測,只要檢測的電平與自己發(fā)出的電平一致,他們就會(huì)繼續(xù)占用總線。在這種情況下總線還是得不到仲裁。當(dāng)主控器1發(fā)送第3位數(shù)據(jù)“1”時(shí)(主控器2發(fā)送“0” ),由于“線與”的結(jié)果SDA上的電平為“0”,這樣當(dāng)主控器1檢測自己的輸出電平時(shí),就會(huì)測到一個(gè)與自身不相符的“0”電平。這時(shí)主控器1只好放棄對總線的控制權(quán);因此主控器2就成為總線的唯一主宰者。
不難看出:
  • ① 對于整個(gè)仲裁過程主控器1和主控器2都不會(huì)丟失數(shù)據(jù);
  • ② 各個(gè)主控器沒有對總線實(shí)施控制的優(yōu)先級別;
  • ③總線控制隨即而定,他們遵循“低電平優(yōu)先”的原則,即誰先發(fā)送低電平誰就會(huì)掌握對總線的控制權(quán)。
根據(jù)上面的描述,“時(shí)鐘同步”與“總線仲裁”可以總結(jié)如下規(guī)律:
  • ①主控器通過檢測SCL上的電平來調(diào)節(jié)與從器件的速度同步問題——時(shí)鐘同步;
  • ②主控器通過檢測SDA上自身發(fā)送的電平來判斷是否發(fā)生總線“沖突”——總線仲裁。因此,I2C總線的“時(shí)鐘同步”與“總線仲裁”是靠器件自身接口的特殊結(jié)構(gòu)得以實(shí)現(xiàn)的。

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



評論


技術(shù)專區(qū)

關(guān)閉