<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > I2C總線(xiàn)信號時(shí)序分析

I2C總線(xiàn)信號時(shí)序分析

作者: 時(shí)間:2011-07-20 來(lái)源:網(wǎng)絡(luò ) 收藏
  在通信的過(guò)程中,參與通信的雙方互相之間所傳輸的信息種類(lèi)歸納如下。

主控器向被控器發(fā)送的信息種類(lèi)有:?jiǎn)?dòng)信號、停止信號、7位地址碼、讀/寫(xiě)控制位、10位地址碼、數據字節、重啟動(dòng)信號、應答信號、時(shí)鐘脈沖。

被控器向主控器發(fā)送的信息種類(lèi)有:應答信號、數據字節、時(shí)鐘低電平。

下面對通信過(guò)程中出現的幾種信號狀態(tài)和時(shí)序進(jìn)行分析。

①總線(xiàn)空閑狀態(tài)。

總線(xiàn)的SDA和SCL兩條信號線(xiàn)同時(shí)處于高電平時(shí),規定為總線(xiàn)的空閑狀態(tài)。此時(shí)各個(gè)器件的輸出級場(chǎng)效應管均處在截止狀態(tài),即釋放總線(xiàn),由兩條信號線(xiàn)各自的上拉電阻把電平拉高。

②啟動(dòng)信號。

在時(shí)鐘線(xiàn)SCL保持高電平期間,數據線(xiàn)SDA上的電平被拉低(即負跳變),定義為I2C總線(xiàn)總線(xiàn)的啟動(dòng)信號,它標志著(zhù)一次數據傳輸的開(kāi)始。

啟動(dòng)信號是一種電平跳變時(shí)序信號,而不是一個(gè)電平信號。啟動(dòng)信號是由主控器主動(dòng)建立的,在建立該信號之前I2C總線(xiàn)必須處于空閑狀態(tài),如圖1所示。

  

圖1 I2C總線(xiàn)上的啟動(dòng)信號和停止信號   

③停止信號。

在時(shí)鐘線(xiàn)SCL保持高電平期間,數據線(xiàn)SDA被釋放,使得SDA返回高電平(即正跳變),稱(chēng)為I2C總線(xiàn)的停止信號,它標志著(zhù)一次數據傳輸的終止。

停止信號也是一種電平跳變時(shí)序信號,而不是一個(gè)電平信號,停止信號也是由主控器主動(dòng)建立的,建立該信號之后,I2C總線(xiàn)將返回空閑狀態(tài)。

④數據位傳送。

在I2C總線(xiàn)上傳送的每一位數據都有一個(gè)時(shí)鐘脈沖相對應(或同步控制),即在SCL串行時(shí)鐘的配合下,在SDA上逐位地串行傳送每一位數據。

進(jìn)行數據傳送時(shí),在SCL呈現高電平期間,SDA上的電平必須保持穩定,低電平為數據0,高電平為數據1。

只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。邏輯0的電平為低電壓,而邏輯1的電平取決于器件本身的正電源電壓VDD(當使用獨立電源時(shí)),如圖2所示。

  圖2 I2C總線(xiàn)上的數據位傳送   

⑤應答信號。

  I2C總線(xiàn)上的所有數據都是以8位字節傳送的,發(fā)送器每發(fā)送一個(gè)字節,就在時(shí)鐘脈沖9期間釋放數據線(xiàn),由接收器反饋一個(gè)應答信號。

  應答信號為低電平時(shí),規定為有效應答位(ACK簡(jiǎn)稱(chēng)應答位),表示接收器已經(jīng)成功地接收了該字節;應答信號為高電平時(shí),規定為非應答位(NACK),一般表示接收器接收該字節沒(méi)有成功。

  對于反饋有效應答位ACK的要求是,接收器在第9個(gè)時(shí)鐘脈沖之前的低電平期間將SDA線(xiàn)拉低,并且確保在該時(shí)鐘的高電平期間為穩定的低電平。

  如果接收器是主控器,則在它收到最后一個(gè)字節后,發(fā)送一個(gè)NACK信號,以通知被控發(fā)送器結束數據發(fā)送,并釋放SDA線(xiàn),以便主控接收器發(fā)送一個(gè)停止信號P,如圖3所示。

  圖3 I2C總線(xiàn)上的應答時(shí)序   

⑥插入等待時(shí)間。

如果被控器需要延遲下一個(gè)數據字節開(kāi)始傳送的時(shí)間,則可以通過(guò)把時(shí)鐘線(xiàn)SCL電平拉低并且保持,使主控器進(jìn)入等待狀態(tài)。

一旦被控器釋放時(shí)鐘線(xiàn),數據傳輸就得以繼續下去,這樣就使得被控器得到足夠時(shí)間轉移已經(jīng)收到的數據字節,或者準備好即將發(fā)送的數據字節。

帶有CPU的被控器在對收到的地址字節做出應答之后,需要一定的時(shí)間去執行中斷服務(wù)子程序,來(lái)分析或比較地址碼,其間就把SCL線(xiàn)鉗位在低電平上,直到處理妥當后才釋放SCL線(xiàn),進(jìn)而使主控器繼續后續數據字節的發(fā)送,如圖4所示。

  

圖4 I2C總線(xiàn)上的插入等待時(shí)間   

⑦重啟動(dòng)信號。

在主控器控制總線(xiàn)期間完成了一次數據通信(發(fā)送或接收)之后,如果想繼續占用總線(xiàn)再進(jìn)行一次數據通信(發(fā)送或接收),而又不釋放總線(xiàn),就需要利用重啟動(dòng)Sr信號時(shí)序。

重啟動(dòng)信號Sr既作為前一次數據傳輸的結束,又作為后一次數據傳輸的開(kāi)始。利用重啟動(dòng)信號的優(yōu)點(diǎn)是,在前后兩次通信之間主控器不需要釋放總線(xiàn),這樣就不會(huì )丟失總線(xiàn)的控制權,即不讓其他主器件節點(diǎn)搶占總線(xiàn)。

⑧時(shí)鐘同步。

如果在某一I2C總線(xiàn)系統中存在兩個(gè)主器件節點(diǎn),分別記為主器件1和主器件2,其時(shí)鐘輸出端分別為CLK1和CL【0,它們都有控制總線(xiàn)的能力。

假設在某一期間兩者相繼向SCL線(xiàn)發(fā)出了波形不同的時(shí)鐘脈沖序列CLK1和CLK2(時(shí)鐘脈沖的高、低電平寬度都是依靠各自?xún)炔繉?zhuān)用計數器定時(shí)產(chǎn)生的),在總線(xiàn)控制權還沒(méi)有裁定之前這種現象是可能出現的。

鑒于I2C總線(xiàn)的“線(xiàn)與”特性,使得時(shí)鐘線(xiàn)SCL上得到的時(shí)鐘信號波形,既不像主器件1所期望的CLK1,也不像主器件2所期望的CLK2,而是兩者進(jìn)行邏輯與的結果。

CLKI和CLK2的合成波形作為共同的同步時(shí)鐘信號,一旦總線(xiàn)控制權裁定給某一主器件,則總線(xiàn)時(shí)鐘信號將會(huì )只由該主器件產(chǎn)生,如圖5所示。

  

圖5 I2C總線(xiàn)上的時(shí)鐘同步   

⑨總線(xiàn)沖突和總線(xiàn)仲裁。

假如在某I2C總線(xiàn)系統中存在兩個(gè)主器件節點(diǎn),分別記為主器件1和主器件2,其數據輸出端分別為DATA1和DATA2,它們都有控制總線(xiàn)的能力,這就存在著(zhù)發(fā)生總線(xiàn)沖突(即寫(xiě)沖突)的可能性。

假設在某一瞬間兩者相繼向總線(xiàn)發(fā)出了啟動(dòng)信號,鑒于:I2C總線(xiàn)的“線(xiàn)與”特性,使得在數據線(xiàn)SDA上得到的信號波形是DATA1和DATA2兩者相與的結果,該結果略微超前送出低電平的主器件1,其DATA1的下降沿被當做SDA的下降沿。

在總線(xiàn)被啟動(dòng)后,主器件1企圖發(fā)送數據“101……”,主器件2企圖發(fā)送數據“100101……”。

兩個(gè)主器件在每次發(fā)出一個(gè)數據位的同時(shí)都要對自己輸出端的信號電平進(jìn)行抽檢,只要抽檢的結果與它們自己預期的電平相符,就會(huì )繼續占用總線(xiàn),總線(xiàn)控制權也就得不到裁定結果。

主器件1的第3位期望發(fā)送“1”,也就是在第3個(gè)時(shí)鐘周期內送出高電平。

在該時(shí)鐘周期的高電平期間,主器件1進(jìn)行例行抽檢時(shí),結果檢測到一個(gè)不相匹配的電平“0”,這時(shí)主器件1只好決定放棄總線(xiàn)控制杈;因此,主器件2就成了總線(xiàn)的惟一主宰者,總線(xiàn)控制權也就最終得出了裁定結果,從而實(shí)現了總線(xiàn)仲裁的功能。

從以上總線(xiàn)仲裁的完成過(guò)程可以得出:仲裁過(guò)程主器件1和主器件2都不會(huì )丟失數據;各個(gè)主器件沒(méi)有優(yōu)先級別之分,總線(xiàn)控制權是隨機裁定的,即使是搶先發(fā)送啟動(dòng)信號的主器件1最終也并沒(méi)有得到控制杈。

系統實(shí)際上遵循的是“低電平優(yōu)先”的仲裁原則,將總線(xiàn)判給在數據線(xiàn)上先發(fā)送低電平的主器件,而其他發(fā)送高電平的主器件將失去總線(xiàn)控制權,如圖6所示。

  

圖6 I2C總線(xiàn)上的總線(xiàn)仲裁   

⑩總線(xiàn)封鎖狀態(tài)。

在特殊情況下,如果需要禁止所有發(fā)生在I2C總線(xiàn)上的通信活動(dòng),封鎖或關(guān)閉總線(xiàn)是一種可行途徑,只要掛接于該總線(xiàn)上的任意一個(gè)器件將時(shí)鐘線(xiàn)SCL鎖定在低電平上即可。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>