(3)I2C匯流排的位元組格式,時鐘同步和仲裁

來源:互聯網
上載者:User

標籤:blog   http   使用   資料   2014   linux   

位元組格式

發送到SDA線上的每個位元組必須是8位.每次傳輸的位元組數量是不受限制的.每個位元組後必須跟著一個ACK應答位.資料從最高有效位(MSB)開始傳輸.如果從機要執行一些功能後才能接收或者發送新的完整資料,比如說服務一個內部中斷,那麼它可以將時鐘線SCL拉低來強制使主機進入wait狀態.當從機準備好新的位元組資料轉送時,釋放時鐘線SCL,資料轉送便繼續進行.

 

ACK和NACK

每個位元組後都有ACK發生.ACK應答位允許接收器通知發送器位元組成功接收了下一個位元組可以發送了.主機產生所有的時鐘脈衝,包括應答位的第9個時鐘脈衝.

ACK應答訊號是如下定義的:在ACK的第9個時鐘脈衝中發送器釋放SDA線,所以接收器可以將SDA拉低,使得在這個時鐘脈衝的高電平期間保證SDA是低電平.建立和保持時間也應該計算在內.

當在第9個時鐘脈衝期間SDA仍然是高,這時定義為NACK訊號.這時主機可以產生一個終止條件來終止傳輸,或者一個重複的開始條件來開始一個新的傳輸.這裡有5中情況導致NACK的產生:

1.匯流排當前的傳輸地址上沒有接收器,所以沒有裝置用ACK來響應.

2.因為接收者正在處理一些即時的功能,尚未準備與主機的通訊,所以接收者不能收發.

3.在傳輸期間,接收者收到不能識別的資料或者命令.

4.在傳輸期間,接收者無法接收更多的資料位元組.

5.主-接收器要通知從-發送器傳輸的結束.

時鐘同步

在空閑匯流排上兩個主機可以同時開始傳輸,所以必須要有一個方法來決定哪個主機來控制匯流排並完成其資料轉送.這個方法就是時鐘同步和仲裁.在單主機系統中,時鐘同步和仲裁不需要了.

時鐘同步通過使用I2C介面與SCL線的線與串連實現.意味著SCL線從高到低期間會引起主機開始計算它的低電平周期,一旦主機時鐘變低,它會保持SCL線處於這種狀態直到時鐘到達高電平.然而,如果另一個時鐘依舊是低電平,時鐘的從低到高的變化並不會改變SCL線的狀態.SCL拉低的時間由最長的低電平周期決定.短一些的低電平周期的主機在這時進入HIGH wait-state.

 

當所有的主機的低電平周期都結束了,時鐘線才回到高電平.這時主機時鐘和SCL的狀態一致,所有的主機開始計數他們的高電平周期.第一個結束高電平的主機將SCL線重新拉低.

這樣的話,同步的SCL時鐘的低電平周期由所有主機中最長的低電平周期決定,高電平周期由最短的高電平周期決定.

仲裁

仲裁和同步一樣,都是在系統中多於一個主機條件下協議要求的一部分.從機不參與仲裁處理.只有當匯流排空閑時,主機才可以開始一個傳輸.兩個主機可能在開始條件規定的最小保持時間(tHD;SDA)內產生一個開始條件,結果匯流排上產生一個有效開始條件.這個時候就需要仲裁來決定哪個主機完成它的傳輸.

仲裁處理是逐個bit進行的.在每個bit,當SCL為高,每個主機都check一下來看看SDA的電平是否和它發送的電平吻合.這個過程可能會持續很多個bit.只要傳輸是同一的,那麼兩個主機可以無誤的完成完整的傳輸.當一個主機試著發送高,但是檢測到SDA為低,那麼這個主機知道自己失去仲裁然後關掉自己的SDA輸出.另外的主機就會去完成它的傳輸.

在仲裁處理過程中沒有資訊丟失.失去仲裁的主機在它失去仲裁的位元組末尾處產生時鐘脈衝,當匯流排空閑時必須重啟它的傳輸.

如果一個主機包含從機的功能,當它在定址階段丟失仲裁,那麼贏得仲裁的主機可能會定址它.丟失仲裁的主機必須立即切換到它的從模式.

顯示了兩個主機的仲裁處理.在主機產生的DATA1和SDA線的實際電平的值出現不同時,DATA1的輸出就關掉了.主機1失去了仲裁.贏得仲裁的主機2的傳輸資料不受影響.

 

因為I2C匯流排只是僅由地址來控制,資料只由贏得仲裁的主機發送,這裡沒有最重要的主機,在匯流排上也沒有優先順序順序.

在仲裁處理進行中的時候,一個主機發送重複的開始條件或者是終止條件而另一個主機仍然在發送資料,那麼這時候有一個未定的狀態.換句話說,下面的條件下會出現這種情況:

主機1發送重複的開始條件,主機2發送一個資料位元

主機1發送終止條件,主機2發送一個資料位元

主機1發送重複的開始條件,主機2發送終止條件

本篇文章來源於 Linux公社網站(www.linuxidc.com)  原文連結:http://www.linuxidc.com/Linux/2012-08/67658p3.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.