NXP:I2C總線技術規范和用戶手冊(中文版)(二)


本文是對NXP I2C-bus specification and user manual/UM10204/Rev. 6 — 4 April 2014的英文翻譯。

3 I2C總線協議

3.1 標准模式,快速模式和快速加模式的I2C總線協議

二線,串行數據SDA和串行時鍾SCL,在連接到總線上的設備之間傳輸信息。每個設備都通過唯一的地址識別(無論是微控制器,LCD驅動器,內存或鍵盤接口),並且運行作為一個傳送器或接收器,這個依賴於設備的功能。一個LCD驅動器可能僅僅是一個接收器,然而一個內存可能傳送或接收數據。除了傳送器和接收器,當執行數據傳輸的時候,設備可能被考慮作為一個master或slave(參看表1)。一個master作為一個在總線上發送數據,生成時鍾信號去允許傳輸的設備。那時,任何被尋址的設備都被當做一個slave。
表1. I2C總線術語的定義

術語 描述
發送器 發送數據到總線的設備
接收器 從總線上接收數據的設備
Master 啟動一個傳輸,生成時鍾信號,終止一個傳輸的設備
Slave 被master尋址的設備
多主機 超過一個master同時試圖控制總線而不破壞信息
仲裁 一個程序確保如果超過一個master同時想去控制總線,只有一個被允許這樣做,獲勝信息不會被破壞
同步 一個程序確保兩個或多個設備同步時鍾信號
I2C總線是一個多master總線。這意味着超過一個設備有能力控制總線。因為master通常是微控制器,讓我們考慮連接到I2C總線上的兩個微控制器的數據傳輸的情況(參看圖2)。
這個例子突出了I2C總線上master-slave和receiver-transmitter的關系。需要注意的是這些關系不是永久的,而是取決於當時數據傳輸的方向。數據的傳輸按如下方式執行:
1.假設微控制器A想發送信息給為控制器B:
微控制器A(master),尋址微控制器B(slave);
微控制器A(master發送器),發送數據給微控制器B(slave接收器);
微控制器A中止傳輸。
2.如果為控制器A想從微控制器B接收信息;
微控制器A(master)尋址微控制器B(slave);
微控制器A(master發送器),從微控制器B(slave接收器)接收數據;
微控制器A中止傳輸。
即使在這種情況下,主控器(微控制器A)也會產生定時並終止傳輸。
連接超過一個微控制到I2C總線上意味着超過一個master同時啟動數據傳輸。為了避免這樣的事件可能帶來的混亂,開發了一個仲裁程序。這樣的程序依賴於I2C總線上所有的I2C接口線與連接。
如果兩個或更多的master試圖發送信息到總線上,第一個產生1而另一個產生0的則丟失仲裁。在仲裁期間的時鍾信號是一個同步的使用連接到SCL線的線與master產生的時鍾組合(關於仲裁的更詳細信息參考3.1.8部分)。
I2C總線上時鍾信號的產生一直是master設備的職責;當總線上傳送數據時,每一個mater產生自己的時鍾信號。當仲裁發生時,它們被一個慢速的從設備按住時鍾線或被另一個主設備拉伸,Master上的總線時鍾信號只能被改變。
表2總結了I2C總線技術規范中強制和選擇部分的使用,以及哪一個系統配置使用它們。
[1]也指作為slave的master
[2]時鍾拉伸是一些slave的特性。如果在一個系統中沒有slave拉伸時鍾(維持SCL為低),master不需要被設計去處理這個程序。
[3]位敲擊(軟件仿真)多master系統應該考慮一個START字節。參考3.1.15部分。

3.1.1 SDA和SCL信號

SDA和SCL兩個是雙向線,通過一個電流源或上拉電阻連接到正的電源電壓(參看圖3)。當總線是空閑的時候,兩個線是為高。連接到總線上的設備的輸出級必須有開路漏極或開路集電極來執行線與功能。I2C總線上的數據能以標准模式最高100kbit/s,快速模式最高400kbit/s,快速加模式最高1Mbit/s,高速模式最高3.4Mbit/s的速率傳輸。總線電容限制了連接到總線上的接口的數量。
如果在總線上沒有設備拉伸時鍾,對於單一master的應用,master的SCL輸出可能是一個推拉驅動器設計。

3.1.2 SDA和SCL邏輯等級

由於各種可能連接到I2C總線上不同設備(CMOS, NMOS和兩極),邏輯等級0(低)和1(高)是不固定的,依賴於相關的Vdd的等級。輸入參考等級被設定為Vdd的30%和70%。參考圖38,時序圖。一些遺留設備輸入等級是固定在Vil=1.5v,Vih=3.0v,但是所有新設備要求這個30%/70%的規格。參考第6部分電氣規格。

3.1.3 數據有效性

SDA線上的數據在時鍾為高時必須穩定。數據線上高或低的狀態僅僅在時鍾信號SCL為低時改變(參看圖4)。每一個數據位的傳輸都有一個時鍾脈沖產生。

3.1.4 START和STOP條件

所有事務都是以START(S)開始和STOP(P)結束(參看圖5)。當SCL是高時,在SDA線上一個從高到低的轉變定義了一個開始條件。當SCL是高時,在SDA線上一個從低到高的轉變定義了一個停止條件。

開始和停止條件一直有master生成。開始條件以后,總線被認為是忙的狀態。停止條件以后的一段時間內,總線被認為是空閑的。總線空閑狀況是專門在第6部分說明。
如果重復的開始(Sr)條件生成代替停止條件,總線保持忙碌。在這方面,START (S)和重復的START (Sr)條件在功能上是相同的。因此,在本文檔的其余部分中,除非Sr特別相關,否則S符號將作為通用術語來表示START和重復START條件。
如果它們包含必要的硬件接口,通過設備對START和STOP條件的檢測是容易的。然而,沒有這種接口的微控制器必須在每個時鍾周期內至少采樣兩次SDA線,以感知過渡。

3.1.5 字節格式

放置在SDA線上的每一個字節必須是8bit寬。每一次傳輸可以被傳輸的字節數是沒有嚴格限制的。每一個字節后面必須跟一個ACK bit位。數據的最高位首先被傳輸(參看圖6)。如果一個slave不能接收或發送另一個完整的字節數據,直到它已經執行了一些其他的功能,例如服務內部中斷,它可以保持時鍾線SCL低,迫使主機進入一個等待狀態。當從機准備好接收另一個字節的數據並釋放時鍾線SCL時,數據傳輸就會繼續。

3.1.6 ACK和NACK

確認發生在每一個字節之后。該確認位允許接收方向發送方發出信號,表示該字節已被成功接收,並且可以發送另一個字節。Master生成時鍾脈沖,包括告知收到第九個時鍾脈沖。
確認信號定義如下:在確認時鍾脈沖期間,傳送器釋放SDA線,因此接收器置SDA線為低。在時鍾脈沖為高期間,接收器保持穩定的低(參看圖4)。建立和保持時間(在第6部分指定)必須考慮在內。
在第九個時鍾脈沖期間,當SDA保持為高,這個被定義為非確認Not Acknowledge。然后master生成一個stop位來退出傳輸或重新生成一個開始位開始一個新的傳輸。有五種狀況可能導致生成NACK位:
1.在總線上沒有傳送器指定地址的接收器,因此沒有設備響應一個確認位;
2.接收器不能接收或傳送,因為它正在執行一些實時的功能,沒有准備好與master開始通信;
3.在傳輸期間,接收器得到不能理解的數據或命令;
4.在傳輸期間,接收器不能接收更多的數據字節;
5.一個master接收器必須發送slave傳送器傳輸結束的信號。

3.1.7 時鍾同步

兩個master可以同時開始在總線上開始傳輸,因此必須有一種方法決定哪一個master控制總線,完成傳輸。這個是被時鍾同步和仲裁完成。在單一master系統中,不需要時鍾同步和仲裁。
時鍾同步是通過I2C接口到SCL線的線與連接實現的。這意味着SCL線上的HIGH到LOW的過渡會導致相關的主時鍾開始計算它們的LOW周期,一旦主時鍾變為LOW,它就會保持SCL線上的這個狀態,直到時鍾達到HIGH狀態(圖7)。然而,如果另一個時鍾仍然在它的LOW周期內,這個時鍾的LOW到HIGH的過渡可能不會改變SCL線的狀態。因此SCL線被具有最長低周期的master保持為低。具有更短low周期的master在這段時間內進入一個為高的等待狀態。

當所有相關的master已經計算了它們低周期的數時,時鍾線釋放,置高。在master時鍾和SCL線的狀態是沒有不同的,所有的master開始計算置高的周期。完成高周期的第一個master再次拉SCL為低。
通過這種方式,一個同步的SCL時鍾產生,它的LOW周期由時鍾LOW周期最長的master決定,它的HIGH周期由時鍾HIGH周期最短的master決定。

3.1.8 仲裁

仲裁,像同步一樣,指的是協議的一部分要求,只有在系統中超過一個主機時才需要。Slave不參與仲裁過程。只有在總線空閑時,master才可以開始一個傳輸。兩個master在START條件的最小保持時間(tHD;STA)產生一個START條件,從而在總線上產生一個總線START條件。然后,仲裁決定哪一個master完成它的傳輸。
仲裁逐比特進行。在每一個比特中,當SCL為高,每個master將檢查SDA是否和它發送的相匹配。這個過程可能發送很多bit。只要傳輸時相同的,兩個master實際可能完成一個完整的沒有錯誤的傳輸。Master第一次試着發送一個高,但是檢測到SDA是低,master知道它已經丟失了仲裁,然后關閉它的SDA輸出驅動。另外一個maser繼續完成它的傳輸。
仲裁過程不會丟失信息。丟失仲裁的master能產生時鍾脈沖,直到丟失仲裁的一個字節結束,並且必須在總線空閑時,重新啟動它的事務。
如果主機同時具有從機功能,主機在尋址階段丟失了仲裁,那么獲勝的主機可能正在尋址它。因此,丟失的master必須立即轉換到slave模式。
圖8顯示了兩個master仲裁的過程。更多的master可能參與到仲裁中,這取決於有多少個master連接到總線上。當生成DATA1的master內部數據的電平和SDA線上實際的電平出現差異時,DATA1輸出關閉。這不影響獲勝master啟動的數據傳輸。

因為I2C總線的控制完全取決於競爭master發送的地址和數據,因此沒有中心master,也沒有任何優先級順序。
如果仲裁過程在當一個master發送重復的START或STOP的狀況而另外一個master仍然在發送數據的時刻發生,這是一個未定義的狀況。換句話說,以下情況結合在一起導致一個未定義的狀況。
1.Master1發送重復的START且Master2發送一個數據位;
2.Master1發送一個STOP且Master2發送一個數據位;
3.Master1重復發送START且Master2發送STOP;

3.1.9 時鍾拉伸

時鍾拉伸通過保持SCL為低暫停一個事務。事務直到SCL重新釋放為高,事務才可以繼續。時鍾拉伸是可選擇的,實際上,大多數的salve設備不包括一個SCL驅動,因此它不能拉伸時鍾。
在字節級,一個設備能以較快速度接收數據字節,但是需要時間去存儲一個接收的字節或准備另一個要傳輸的字節。在接收並確認一個字節后,Slave可以將SCL線保持在LOW狀態,迫使Master進入等待狀態,直到Slave在握手過程中准備好進行下一個字節的傳輸。
在bit級,像微控制器這樣的具有或沒有I2C有限硬件的device能通過延長每個時鍾低周期來降低總線時鍾。任何master和此device內部的運行速度相適應。
在高速模式,握手特性只能在字節級中使用。

3.1.10 slave時鍾和R/W位

數據傳輸遵循以下圖9顯示的格式。START后,發送slave的地址。地址是7bit,第8bit為數據方向位(R/W)-0表示寫傳輸,1表示讀數據(參考圖10)。數據傳輸一直通過master發送STOP結束。然而,如果一個master仍然希望在總線上通信,它能產生一個重復的START(Sr)並在不首先生成STOP條件的情況下訪問另一個從服務器。在這樣的一個傳輸內,多種讀寫格式的結合是可能的。


可能的數據傳輸是:
1.Master-傳送器傳送給Slave-接收器。傳輸的方向不改變。Slave接收器確認每一個字節。
2.第一個字節后,Master立即讀Slave(參考圖12)。在第一次確認的時刻,master-發送器變為master接收器,slave接收器變為slave-發送器。第一次確認仍然由salve產生。master隨后產生確認。STOP由master產生,它在STOP條件之前發送一個not-acknowledge (a)。
3.結合的格式(參考圖13)。在一個傳輸的方向改變過程中,START和Slave地址都是重復的,但是R/W位翻轉。如果master接收器發送一個重復的START,在重復的START之前發送一個not-acknowledge (a)。
注意:
1.例如,可以使用結合的格式去控制一個串行內存。內部memory位置必須在第一個數據字節期間寫入。START和地址重復之后,數據可以傳輸。
2.所有對先前訪問的內存位置的自動遞增或遞減的決定,等等,都是由設備的設計者做出的。
3.每一個字節都跟着一個確認位,在序列中用A或A-表示。
4.I2C總線兼容設備必須在接收到START或重復START時復位它們的總線邏輯,以便它們都預期的發送slave地址,即使這些START條件沒有按照適當的格式定位。
5.START之后立即跟着一個STOP是不合法的。然而,許多設備被設計成在這種條件下正常工作。
6.每一個連接到總線上的設備是可以通過一個獨特的地址尋址。通常存在一個簡單的master/slave關系,但是有能同時接收和響應的多個相同的slave是可能的,例如在組廣播中。
這種技術在使用總線轉換設備時效果最好,像PCA9546A,其中所有四個通道是打開的,同時配置相同的設備,理解決定每一個slave確認,然后依次打開一個通道從而讀回每一個單獨設備的配置去確認編程是不可能的。參考單個元件data sheets。


3.1.11 10bit尋址

10bit擴展了可能地址的數量。具有7bit和10bit地址的設備可以連接到相同的I2C總線,而且7bit和10bit的尋址可以在所有的總線速度中使用。當前,10bit尋址沒有被廣泛使用。
10bit slave地址由跟在START或重復START后的前兩個字節組成。
第一個字節的前7個bit是1111_0XX,最后兩個bit XX是兩個10bit地址的最高位,第一個字節的第8個bit是R/W位,這一位決定信息的方向。
盡管預留地址位1111_XXXX是由八種可能的組合,但是10bit尋址只使用四種1111_0XX組合。剩下的四種組合1111_1XX是為將來的I2C總線增強預留。
之前描述的7bit地址的所有讀寫格式的組合可能具有10bit地址。詳細描述如下兩個:
1.Master-傳送器傳送給具有10bit slave地址的slave-接收器。傳送方向不改變(參看圖14)。當一個10bit地址符合START條件時,每一個slave將salve地址(1111_0XX)第一個字節的前7個bit和它自己的地址比較,檢測第8個bit(R/W方向位)是否是0。超過一個device發現匹配並產生一個確認(A1)是可能的。發現匹配的所有slave將slave地址的第二個字節的8個bit(XXXX_XXXX)和自己的地址比較,但是只有一個slave發現匹配,並且產生一個確認(A2)。匹配的slave保持被master尋址,直到它接收一個STOP或一個重復的START,后面跟着一個不同的slave地址。
2.Master-接收器讀取具有10bit地址的slave-發送器。第二個(R/W)位后,傳輸方向改變(參考圖15)。直到並包括確認位A2,這個步驟是和描述一個master-傳送尋址slave-接收相同。重復的START之后(Sr),一個匹配的slave會記住它之前被尋址過。這個slave然后檢查Sr后面的slave地址的第一個字節的前7位是否與START條件(S)之后的7位相同,並測試第8位(R/W)是否為1。如果匹配,slave認為它作為一個傳送器尋址,且生成一個確認A3。slave保持被尋址直到它接收一個STOP或直到它接收另外一個重復START,這個重復START后面跟着一個不同的salve地址。一個重復START后,所有其它slave設備也將把slave地址(1111_0XX)的第一個字節的前7個bit和它們自己的地址比較,和測試第8bit(R/W)。然而,它們都不會被尋址,因為R/W(對10bit設備)或1111_0XX slave地址(對7bit設備)不匹配。


具有10bit地址的salve設備具有和7bit地址的salve設備以相同的方式響應廣播呼叫。硬件master能在廣播呼叫后傳送它的10bit地址。在這種情況下,廣播呼叫的地址字節后面跟着兩個連續字節,包含master-傳送器的10bit地址。這種格式顯示在圖15中,第一個DATA字節包含master地址的低8bit。
START字節0000_0001(01h)像在7bit尋址一樣在10bit尋址之前。

3.1.12 預留地址

兩組八位地址(0000_XXX和1111_XXX)為將來可能的用於預留,顯示在表3。

[1] 廣播地址為包括軟件復位的幾個功能使用。
[2] 不允許在START字節接收時確認。
[3] 預留CBUS地址,使CBUS兼容設備和I2C-bus兼容設備能夠在同一系統中混合使用。I2C總線的兼容設備不允許在這個地址接收時響應。
[4] 其中包括為不同總線格式保留的地址,以使I2C和其他協議能夠混合使用。只有能和這樣格式工作的I2C兼容設備允許對這樣的地址響應。
本地系統內的地址分配由系統架構師負責,系統架構師必須考慮總線上使用的設備以及未來與其他傳統i2c總線的任何交互。例如,有7個用戶可分配的地址pin腳的設備允許分配所有的128個地址。如果知道保留地址永遠不會被用於它的預期目的,保留地址可以被用作從地址。

3.1.13 廣播呼叫地址

廣播呼叫地址是對連接到I2C總線上的每一個設備同時進行尋址。然而,如果一個設備不需要廣播呼叫結構提供的任何數據,它能通過不發送確認來忽略這個地址。如果一個設備確實需要從廣播地址獲取數據,它對這個地址發出確認,並且行為表現像一個salve-接收器。如果超過一個設備響應,Master事實上不知道有多少個設備確認。第二個和后面的字節被每一個可以處理這個數據的slave-接收器確認。不能處理這些字節中的任何一個字節的slave通過不確認忽略它。同樣,如果一個或多個slave進行了應答,那么不應答將不會被master看到。廣播呼叫地址的含義一直在第二個字節中指定(參看圖16)。

有兩種情況需要考慮:
1.當低位bit B是0;
2.當低位bit B是1。
當bit B是0時,第二個字節有如下的定義:
1.0000_0110(06h):通過硬件對slave地址可編程部分進行復位和寫入。在接收到這兩個字節序列時,對所有被設計為可以對廣播呼叫地址響應的設備復位並接收它們地址的可編程部分。必須采取預防措施,以確保設備在施加電源電壓后,設備不會拉下SDA或SCL線,因為它們低電平會阻塞總線。
2.0000_0100(04h):通過硬件寫入slave地址的可編程部分。行為如上,但設備不會復位。
3.0000_0000(00h):此代碼不允許作為第二個字節使用。
編程程序的序列在適當的設備數據表中公布。剩余的代碼還沒有被修復,設備必須忽略它們。
當bit B是1時,兩個字節序列是一個硬件廣播呼叫。這意味着這個序列被硬件master設備發送,例如鍵盤掃描儀,可以通過編程傳送一個需要的salve地址。因為一個硬件master不會事先知道要傳輸的信息發送給哪一個設備,它只能產生這個硬件廣播呼叫和它本身的地址---向系統標識自己(參看圖17)。

保留在第二個字節的7個bit包含硬件master的地址。這個地址被連接到總線上的智能設備識別(例如,微控制器),然后總線接收來自硬件master的信息。如果硬件master也作為slave,slave地址與master地址相同。
在一些系統中,另一種選擇可能是硬件master傳送器以slave-接收器的模式設置。通過這種方式,配置master的系統可以告訴硬件主發送器(現在處於從接收模式)必須向哪個地址數據發送(參見圖18)。在這個編程過程之后,硬件主機保持在master-發送器模式。

3.1.14 軟件復位


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM