日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > I2C之知(三)--I2C總線的字節(jié)格式、時鐘同步和仲裁

          I2C之知(三)--I2C總線的字節(jié)格式、時鐘同步和仲裁

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          字節(jié)格式
          發(fā)送到SDA線上的每個字節(jié)必須是8位.每次傳輸?shù)淖止?jié)數(shù)量是不受限制的.每個字節(jié)后必須跟著一個ACK應(yīng)答位.數(shù)據(jù)從最高有效位(MSB)開始傳輸.如果從機(jī)要執(zhí)行一些功能后才能接收或者發(fā)送新的完整數(shù)據(jù),比如說服務(wù)一個內(nèi)部中斷,那么它可以將時鐘線SCL拉低來強(qiáng)制使主機(jī)進(jìn)入wait狀態(tài).當(dāng)從機(jī)準(zhǔn)備好新的字節(jié)數(shù)據(jù)傳輸時,釋放時鐘線SCL,數(shù)據(jù)傳輸便繼續(xù)進(jìn)行.


          ACK和NACK
          每個字節(jié)后都有ACK發(fā)生.ACK應(yīng)答位允許接收器通知發(fā)送器字節(jié)成功接收了下一個字節(jié)可以發(fā)送了.主機(jī)產(chǎn)生所有的時鐘脈沖,包括應(yīng)答位的第9個時鐘脈沖.
          ACK應(yīng)答信號是如下定義的:在ACK的第9個時鐘脈沖中發(fā)送器釋放SDA線,所以接收器可以將SDA拉低,使得在這個時鐘脈沖的高電平期間保證SDA是低電平.建立和保持時間也應(yīng)該計算在內(nèi).
          當(dāng)在第9個時鐘脈沖期間SDA仍然是高,這時定義為NACK信號.這時主機(jī)可以產(chǎn)生一個終止條件來終止傳輸,或者一個重復(fù)的開始條件來開始一個新的傳輸.這里有5中情況導(dǎo)致NACK的產(chǎn)生:
          1.總線當(dāng)前的傳輸?shù)刂飞蠜]有接收器,所以沒有設(shè)備用ACK來響應(yīng).
          2.因為接收者正在處理一些實時的功能,尚未準(zhǔn)備與主機(jī)的通信,所以接收者不能收發(fā).
          3.在傳輸期間,接收者收到不能識別的數(shù)據(jù)或者命令.
          4.在傳輸期間,接收者無法接收更多的數(shù)據(jù)字節(jié).
          5.主-接收器要通知從-發(fā)送器傳輸?shù)慕Y(jié)束.

          時鐘同步
          在空閑總線上兩個主機(jī)可以同時開始傳輸,所以必須要有一個方法來決定哪個主機(jī)來控制總線并完成其數(shù)據(jù)傳輸.這個方法就是時鐘同步和仲裁.在單主機(jī)系統(tǒng)中,時鐘同步和仲裁不需要了.
          時鐘同步通過使用I2C接口與SCL線的線與連接實現(xiàn).意味著SCL線從高到低期間會引起主機(jī)開始計算它的低電平周期,一旦主機(jī)時鐘變低,它會保持SCL線處于這種狀態(tài)直到時鐘到達(dá)高電平.然而,如果另一個時鐘依舊是低電平,時鐘的從低到高的變化并不會改變SCL線的狀態(tài).SCL拉低的時間由最長的低電平周期決定.短一些的低電平周期的主機(jī)在這時進(jìn)入HIGH wait-state.

          當(dāng)所有的主機(jī)的低電平周期都結(jié)束了,時鐘線才回到高電平.這時主機(jī)時鐘和SCL的狀態(tài)一致,所有的主機(jī)開始計數(shù)他們的高電平周期.第一個結(jié)束高電平的主機(jī)將SCL線重新拉低.
          這樣的話,同步的SCL時鐘的低電平周期由所有主機(jī)中最長的低電平周期決定,高電平周期由最短的高電平周期決定.

          仲裁
          仲裁和同步一樣,都是在系統(tǒng)中多于一個主機(jī)條件下協(xié)議要求的一部分.從機(jī)不參與仲裁處理.只有當(dāng)總線空閑時,主機(jī)才可以開始一個傳輸.兩個主機(jī)可能在開始條件規(guī)定的最小保持時間(tHD;SDA)內(nèi)產(chǎn)生一個開始條件,結(jié)果總線上產(chǎn)生一個有效的開始條件.這個時候就需要仲裁來決定哪個主機(jī)完成它的傳輸.
          仲裁處理是逐個bit進(jìn)行的.在每個bit,當(dāng)SCL為高,每個主機(jī)都check一下來看看SDA的電平是否和它發(fā)送的電平吻合.這個過程可能會持續(xù)很多個bit.只要傳輸是同一的,那么兩個主機(jī)可以無誤的完成完整的傳輸.當(dāng)一個主機(jī)試著發(fā)送高,但是檢測到SDA為低,那么這個主機(jī)知道自己失去仲裁然后關(guān)掉自己的SDA輸出.另外的主機(jī)就會去完成它的傳輸.
          在仲裁處理過程中沒有信息丟失.失去仲裁的主機(jī)在它失去仲裁的字節(jié)末尾處產(chǎn)生時鐘脈沖,當(dāng)總線空閑時必須重啟它的傳輸.
          如果一個主機(jī)包含從機(jī)的功能,當(dāng)它在尋址階段丟失仲裁,那么贏得仲裁的主機(jī)可能會尋址它.丟失仲裁的主機(jī)必須立即切換到它的從模式.
          下圖顯示了兩個主機(jī)的仲裁處理.在主機(jī)產(chǎn)生的DATA1和SDA線的實際電平的值出現(xiàn)不同時,DATA1的輸出就關(guān)掉了.主機(jī)1失去了仲裁.贏得仲裁的主機(jī)2的傳輸數(shù)據(jù)不受影響.

          因為I2C總線只是僅由地址來控制,數(shù)據(jù)只由贏得仲裁的主機(jī)發(fā)送,這里沒有最重要的主機(jī),在總線上也沒有優(yōu)先級順序.
          在仲裁處理正在進(jìn)行的時候,一個主機(jī)發(fā)送重復(fù)的開始條件或者是終止條件而另一個主機(jī)仍然在發(fā)送數(shù)據(jù),那么這時候有一個未定的狀態(tài).換句話說,下面的條件下會出現(xiàn)這種情況:
          主機(jī)1發(fā)送重復(fù)的開始條件,主機(jī)2發(fā)送一個數(shù)據(jù)位
          主機(jī)1發(fā)送終止條件,主機(jī)2發(fā)送一個數(shù)據(jù)位
          主機(jī)1發(fā)送重復(fù)的開始條件,主機(jī)2發(fā)送終止條件


          評論


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

          關(guān)閉