新聞中心

I2C總線的基本操作

作者: 時間:2011-07-23 來源:網(wǎng)絡(luò) 收藏
  上只具有SOL(時鐘)和SDA(數(shù)據(jù))2根信號線。如果是單純的串行傳輸,一旦因?yàn)槟撤N原因造成引腳的偏差,則可能會造成不能區(qū)分總線上傳輸?shù)氖菙?shù)據(jù)還是地址信息的后果。解決上述問題的簡單辦法就是附加獨(dú)立于總線的Reset(復(fù)位)信號,由主機(jī)控制該信號。因?yàn)镮2C至少利用2根線進(jìn)行所有的操作,因此在數(shù)據(jù)傳輸時,通常當(dāng)SCL為低電平時,設(shè)置下一個數(shù)據(jù);當(dāng)SDA變化后,SCI為高電平,這可以解釋為一連串操作的開始/結(jié)束。

1. 起始條件

始條件表示一系列操作的開始。圖1表示起始條件以及隨后數(shù)據(jù)傳輸?shù)拈_始操作。在的空閑狀態(tài)下,SDA及SCL通過上拉電阻都為高電平。在這樣的狀態(tài)下,如果SCL仍保持高電平,而SDA變?yōu)榈碗娖?則成為開始指令。

  

圖1 的起始條件   

由于該狀態(tài)并不出現(xiàn)于地址及數(shù)據(jù)的發(fā)送與接收過程中,因此,即使在途中發(fā)生異常,只要檢測出該狀態(tài),初始化內(nèi)部的狀態(tài)機(jī),就可以使其恢復(fù)。

2. 結(jié)束條件

在一系列操作的最后是結(jié)束條件。結(jié)束條件如圖2所示。當(dāng)SOL為高電平時,一旦SDA由低電平變化為高電平,即成為結(jié)束條件,主機(jī)與器件之間的通信將停止,器件恢復(fù)為空閑狀態(tài)。進(jìn)行寫操作時的結(jié)束狀態(tài)是開始進(jìn)行EEPROM內(nèi)部單元寫操作的指示標(biāo)志。

 

圖2 I2C總線的結(jié)束條件   

結(jié)束前所傳輸?shù)臄?shù)據(jù)是ACK/NoACK的狀態(tài)位,如果是ACK,則該狀態(tài)位為低電平。但如果發(fā)生某種錯誤時,則表示為NoACK的高電平。讀操作時的最后字節(jié)是主機(jī)向器件返回NoˉACK信息,所以SDA為高電平。這樣就不能形成結(jié)束條件所需要的SDA的上升沿,因此在結(jié)束之前需要加入啞元“0”數(shù)據(jù)位作為解決辦法。

在最終數(shù)據(jù)的ACK NoACK之后,主機(jī)通過下述的流程,形成結(jié)束條件,如下所述:

①SCL變?yōu)榈碗娖剑?/P>

②SDA變?yōu)榈碗娖剑?/P>

③SOL變?yōu)楦唠娖剑òl(fā)送啞元數(shù)據(jù));

④SDA變?yōu)楦唠娖剑ńY(jié)束條件)。

3. 數(shù)據(jù)傳輸

數(shù)據(jù)傳輸?shù)牧鞒倘鐖D3所示。除去開始與結(jié)束條件,在傳輸包含地址指定等數(shù)據(jù)時,能夠使SDA發(fā)生變化的條件只能是在SOL為低電平時。因此,總線操作以如下的步驟進(jìn)行:

①SCL變?yōu)榈碗娖剑?/P>

②為SDA設(shè)置數(shù)據(jù)(主機(jī)或者器件);

③SCL變?yōu)楦唠娖健?/P>

進(jìn)行數(shù)據(jù)讀操作時,主機(jī)在SOL恢復(fù)為高電平之前讀取數(shù)據(jù)。

圖3 I2C總線的數(shù)據(jù)傳輸



關(guān)鍵詞: I2C總線 基本操作

評論


相關(guān)推薦

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

關(guān)閉