徹底搞懂I2C匯流排(3)Ultra Fast-mode超快速模式下的I2C通訊協議
本文由德力威爾王術平原創,轉載、引用請註明出處,否則侵權。
摘要
軟硬體開發必讀文件:本章節詳細全面、通俗易懂地闡述了超快速模式下的I2C匯流排的連線方式、邏輯電平、資料有效性、啟動停止條件、位元組格式、資料應答、從機地址、保留地址、廣播地址、軟體復位、啟動位元組、裝置ID等內容。
三. I2C匯流排協議
3.3 超快速模式I2C匯流排協議
3.3.1 協議概述
3.3.1.1 術語定義
術語 |
描述 |
裝置 |
晶片、機器或器件(這裡特指具有I2C功能的) |
傳送器 |
向匯流排傳送資料的裝置 |
接收器 |
從匯流排接收資料的裝置 |
控制器 |
啟動傳輸、產生時鐘訊號和終止傳輸的裝置(舊標準稱主機) |
目標 |
由控制器定址的裝置(舊標準稱從機) |
圖1-41 術語定義
3.3.1.2 I2C匯流排裝置的主從角色分配和收發關係確定
UFm(Ultra Fast-mode)超快速模式 I2C匯流排是一種雙線推輓式序列匯流排,工作頻率為0~5 MHz,單向傳輸資料。最適合驅動大於1 MHz的傳輸速度且不需要反饋的器件(如驅動LED控制器)。UFm I2C匯流排協議基於標準的I2C匯流排協議,由起始位、從機地址、命令位(R/W位)、第九個時鐘和停止位組成。命令位只需一個“寫”位,由於匯流排的單向傳輸特性,第九個時鐘對應的資料位由主機拉高,忽略應答(ACK)週期,無須從機應答。主機的雙線推輓式驅動器由一個UFm序列時鐘(USCL)和序列資料(USDA)組成。
從機裝置包含唯一的地址(無論是微控制器、LCD驅動器、LED控制器還是GPO ,並且僅作為接收器執行。LED驅動器可能只是一個接收器,並且可以由超快速模式(UFm)支援,而儲存器可以接收和傳送資料,並且不被超快速模式(UFm)支援。
由於超快速模式(UFm) I2C匯流排使用推輓式驅動器,它不具備開漏輸出的“線與”功能,所以相容標準模式(Sm)、快速模式(Fm)和快速增強模式(Fm+)。在超快速模式(UFm)中,主機是在總線上啟動資料傳輸併產生時鐘訊號以允許傳輸的唯一裝置。被定址的所有其它裝置都被視為從機。所以超快速模式(UFm)僅適用於一主多從的I2C匯流排系統。
以下是連線到UFm I2C匯流排的一主多從之間的資料傳輸的情況(參見圖1-42):
圖1-42 連線到Ufs I2C匯流排的一主多從示例
我們發現在UFm I2C總線上是一主多從、主發從收的關係,並且這些關係是永久性的,因為資料傳輸只允許單向進行。假設主機想要向從機3傳送資訊,資料傳輸將如下進行:
①主機在USCL線上傳送時鐘,在USDA線上傳送地址,來定址從機3。
②主機在USCL線上傳送時鐘,在USDA線上傳送資料。
③主機終止傳輸。
由於主機是推輓輸出,故不允許將多個Ufm主機連線到UFm I2C匯流排。如果系統中需要額外的主機,它必須與另一個主機完全隔離(可以使用具有隔離功能的多路複用器),因為總線上同一時刻只允許一個主機。
UFm I2C總線上時鐘訊號的產生總是由主機裝置負責,也就是說,主機在總線上傳輸資料時產生時鐘訊號。來自主機的匯流排時鐘訊號不能被具有“時鐘拉伸”的從機裝置改變,並且在UFm I2C匯流排中不存在仲裁和時鐘
圖1-43總結了UFm I2C匯流排規範的強制和可選部分的使用。
I2C匯流排特性對UFm的適用性 |
|
特徵 |
配置 |
單主機 |
|
開始條件 |
強制 |
停止條件 |
強制 |
應答 |
不需要 |
同步 |
不需要 |
仲裁 |
不需要 |
時鐘拉伸 |
不需要 |
7位目標地址 |
強制 |
10位目標地址 |
可選 |
通用呼叫地址 |
可選 |
軟體復位 |
可選 |
開始位元組 |
可選 |
裝置ID |
不需要 |
圖1-43 I2C匯流排特性對UFm的適用性
3.3.2 USDA和USCL訊號線
USDA和USCL都是單向傳輸,推輓輸出(如圖1-44所示)。當匯流排空閒時,兩條線路都被內部的上拉單結電晶體拉到高電平。在超快速模式(UFm)下,I2C匯流排的傳輸速率最高可達5 Mbit/s。連線到匯流排的從機數量受到匯流排負載、電纜端反射、聯結器和走線樁頭的限制。
圖1-44 Ufm模式I2C介面內部推輓輸出結構
3.3.3 USDA和USCL邏輯電平
由於連線到I2C匯流排的裝置具有多樣性(CMOS、NMOS、雙極性等),邏輯“0”( 低)和邏輯“1”( 高)的電平不是固定的,取決於VDD的相關電平。輸入參考電平平設定為30 %VDD和70%VDD;VIL為0.3VDD,VIH為0.7VDD。參見超快模式匯流排電氣特徵引數章節。
3.3.4 資料有效性
USDA線上的資料必須在時鐘的高電平期間保持穩定。資料線的高電平或低電平狀態只能在USCL線上的時鐘訊號為低電平時改變(參見圖1-45)。每傳輸一個數據位產生一個時鐘脈衝。
圖1-45 Ufm I2C匯流排資料有效性
3.3.5 啟動和停止條件
所有的傳輸通訊都是以起點(S)開始,以終點(P)結束(參見圖1-46 )。當SCL為高電平時,SDA線上的高電平到低電平轉換表示傳輸啟動(Start)條件。當SCL為高電平時,SDA線上的低電平到高電平轉換表示停止(Stop)條件。
圖1-46 I2C匯流排啟動和停止條件
啟動和停止總是由主機發起。在啟動發起之後,匯流排被認為是忙碌的。在停止發起之後的某個時間(≥tBUF),匯流排被認為是再次空閒的。
無論是啟動(S)還是重啟(Sr)後,匯流排都會保持忙碌。在這方面,啟動(S)和重啟 (Sr)條件在功能上是相同的。因此,I2C規範中,啟動和重啟條件都用通用術語S符號表示,除非有特別說明。
如果連線到匯流排的裝置集成了I2C介面,則它們可以很容易地檢測到啟動和停止條件。如果沒有這種I2C介面的微控制器,則必須在每個SCL時鐘週期內,對SDA線路至少採樣兩次,以檢測啟動和停止條件。
3.3.6 位元組格式
放在USDA線上的每個位元組必須是8位長度。每次傳輸的位元組數不受限制。在應答週期中,無須從機應答,而是由主機在每個位元組後將USDA驅動到高電平。資料傳輸首先從最高有效位(MSB)開始(參見圖1-46A)。如果從機來不及響應主機下一位元組,則不準從機拉低時鐘線(禁止從機進行時鐘拉伸)。
圖1-46A 在UFm I2C總線上的位元組格式
3.3.7 應答(ACK)和不應答(NACK)
由於主機是推輓輸出,且單向傳輸,從機不能在第九個時鐘週期中拉低USDA做出響應,否則導致電源和地短路,因此不需要ACK和NACK。但是,第九個時鐘週期依舊被保留在UFm中,以與I2C匯流排協議相容。主機依然會產生第九個時鐘脈衝,但對應的第九個資料位總是被主機自己驅動為高電平 “1”,任何時候都不允許從機驅動USDA線。
3.3.8 7位從機地址和讀寫位
資料傳輸遵循圖1-47中所示的格式。在開始(S)條件之後,傳送從機地址。前七位表示從地址,最後一位表示資料傳輸方向位,邏輯“0”代表寫(/W),表示接下來的資料由主機發生給從機,UFm不支援對資料讀(R)的請求(特殊保留地址起始位元組除外),由於是單向通訊,資料傳輸總是由主機產生的停止條件(P)終止。如果主機仍然希望在總線上通訊,它可以立即重啟(Sr)並定址另一個從機,而無需停止後再啟動(S)。
圖1-47 I2C匯流排 UFm 資料傳輸
UFm資料傳輸格式是(參考圖1-48):
主機向從機發送訊號,傳送方向始終不變,主機從不接收任何資料,也從不應答,而是在第九時鐘週期中拉高USDA生成“1”,以符合I2C匯流排協議。操作時,需要注意以下事項:
①主機啟動(S)後可以和單個從機1通訊,也可以傳送重啟(Sr)和從機n地址後和從機n通訊。
②主機訪問從機儲存空間地址後,從機儲存地址的自動遞增或遞減由裝置的設計者決定,一般在從機裝置的資料手冊中規定。
③每個位元組後面都有一個不確認位,如圖 1-48位序列“/A”所示。
④I2C匯流排相容裝置必須在接收到啟動(S)或重啟(Sr)訊號時重置它們的匯流排邏輯,以便接收主機發送的從機定址地 址,即使這些起始條件沒有按照正確的格式定位。
⑤啟動(S)訊號後緊跟停止(P)訊號是非法格式。然而,許多裝置被設計成在這種條件下正常工作。
⑥連線到匯流排的每個裝置都可以通過唯一的地址定址。存在簡單的主機/從機關係,允許多個從機同時接收資料,如主機發送廣播呼叫地址,可能就有多個從機響應。
圖1-48 I2C匯流排 UFm 主發從收示例
3.3.9 10位從機地址
10位地址擴充套件了更多的地址數量,理論上可定址1024個裝置。具有7位和10位地址的裝置可以連線到同一個I2C匯流排,7位和10位定址適用於所有匯流排速度模式。
如圖1-49所示,10位從機地址由啟動(S)或重啟(Sr)訊號後的前兩個位元組構成,第一個位元組的前七位是
“1111 0XX”組合,其中兩位“XX”是10位地址的兩個最高有效位(MSB);第一個位元組的第八位是決定訊息方向的R/W位,此處R/W為 “0”(寫)。第二個位元組是10位地址的低8位。
圖1-49 UFm I2C匯流排10位定址過程
前面針對7位定址裝置描述的讀/寫格式的所有組合對於10位定址也是適合的。這裡舉例來進一步說明10位地址的用法:
主機向具有10位從機地址的從機發送資料。傳輸方向不變。主機啟動(熱啟動),傳送第一個定址位元組,每個從機判讀第一個定址位元組的第八位(R/W方向位)是否為0,如果為0,每個從機將第一個定址位元組的前七位(1111 0XX)與其自身地址進行比較,這時,前七位地址相同的從裝置會同時準備接收第二位元組地址,如果前七位不同,就不再響應後續地址的判斷;接著主機發送第二個定址位元組(XXXX XXXX),所有從機將該地址(XXXX XXXX)的全部八位與它們自己的地址進行比較,但是隻有一個從機找到匹配(但不應答),找到匹配的從機繼續保持被定址狀態,直到收到停止(P)或重啟(Sr)訊號。
特殊保留地址啟動位元組0000 0001 (01h)可以先於10位定址,方式與7位定址相同。
3.3.10 超快速模式中的保留地址
UFm I2C匯流排有一個不同於其他I2C匯流排模式的物理層。因此,可用的從機地址範圍是不同的。具體如圖1-50所示:
X =不關注;1 =高;0 =低電平。
目標地址 |
讀/寫位 |
描述 |
0000 000 |
0 |
廣播地址[1] |
0000 000 |
1 |
啟動位元組[2] |
0000 001 |
X |
保留供將來使用 |
0000 010 |
X |
保留供將來使用 |
0000 011 |
X |
保留供將來使用 |
0000 1XX |
X |
保留供將來使用 |
1111 1XX |
X |
保留供將來使用 |
1111 0XX |
X |
10位目標定址 |
圖1-50 超快模式中的保留地址
[1]廣播地址用於多種功能,包括軟體復位。[2]不允許任何UFm裝置在收到起始位元組時進行應答。
具體的地址分配取決於晶片架構師,他必須考慮總線上使用的裝置以及將來與保留地址的任何互動。例如,具有7個使用者可分配地址引腳的器件允許分配所有128個地址。如果已知保留地址永遠不會用於其他目的,則保留地址可以用於從機地址。
3.3.11 廣播呼叫地址
廣播呼叫地址(0000 0000)用於主機同時定址連線到I2C匯流排的每個從機。
主機啟動I2C匯流排後,第一位元組首先發送廣播呼叫地址(0000 0000),如果某些從機不需要被呼叫定址,它可以忽略這個地址。如果某些裝置確實需要傳輸資料,它就把自己作為一個接收器。如果有多個從機需要接收,主機實際上並不知道。第二個位元組及以後的位元組由每個能夠處理該資料的從機接收器接收。不能處理這些位元組的從機必須通過可以來忽略它(如圖1-51)。
圖1-51 超快模式中的廣播呼叫地址格式
主機緊接著傳送第二個位元組,第二個位元組是控制地址,是表示呼叫目的和含義的位元組,其具體含義如下
1)第二位元組第八位B=0時(如圖1-35),含義如下:
①0000 0110 (06h):從機硬體復位和寫資料到從機內部儲存空間。從機接收到第一位元組和本位元組序列後,被定址的所有從機復位,並接收主機接下來發送的資料,存入自己內部儲存空間(內部儲存空間地址具體規範由從機規格書給出)。
②0000 0100 (04h):寫資料到從機內部儲存空間。過程如上,但不會復位硬體。
③0000 0000 (00h):此程式碼不允許用作第二個位元組。
④除了以上三個位元組資料定義外,其餘的位元組資料定義官方尚未更新新增,裝置必須忽略它們。具體的軟體程式設計要求在相應的裝置器件資料表中有詳細規定。
2)第二位元組第八位B=1時,2位元組序列資料被忽略。
3.3.12 軟體復位
在一個廣播呼叫(0000 0000)之後,傳送0000 0110 (06h)作為第二個位元組會導致從機軟體復位。此功能是可選的,並非所有裝置都響應此命令。從機接收到上述2位元組序列後,被定址的所有從機復位,並接收主機接下來發送的資料,存入自己內部儲存空間(內部儲存空間地址具體規範由從機規格書給出)。
3.3.13 啟動位元組
微控制器可以通過兩種方式連線到I2C匯流排。第一種方式:微控制器片上集成了I2C匯流排硬體介面,程式設計師可以配置內部I2C暫存器,微控制器內部中斷會自動響應I2C匯流排的請求,讀寫速度快。第二種方式:微控制器片上沒有集成了I2C匯流排硬體介面,它必須通過軟體模擬模擬I2C的時序,持續監控匯流排。顯然,微控制器監控或輪詢匯流排的次數越多,它執行預定功能所花費的時間就越少,CPU開銷就大,響應速度就慢。
因此,有I2C硬體介面的快速裝置和依賴於軟體輪詢的相對較慢的微控制器之間存在速度差異。有這樣一種使用場景,沒有I2C介面的微控制器為節約CPU開銷,以低速方式輪詢I2C匯流排,具有I2C匯流排介面的單片機發送啟動位元組(啟動位元組是專門滿足裝置慢速輪詢而設計的握手同步的特殊位元組序列),當收到啟動位元組的輪詢微控制器在收到接下來的重啟(Sr)訊號後,便開始提高通訊速率,以響應高速器件的資料傳輸。也就是說,沒有I2C匯流排介面的微控制器,I2C總線上空閒時就以低速輪詢的方式去監控匯流排,以節約CPU開銷,當檢測到I2C總線上有主機發送了啟動位元組,就以低速輪詢的方式接收到了啟動位元組,隨即提高自己的輪詢速率,開始高速輪詢響應來自高速主機的資料傳輸,在接收完資料並接收到停止訊號後,又以低速輪詢方式去檢測匯流排。
啟動位元組程式就是高低速器件在資料傳輸之前可能會有一個比正常情況長得多的啟動程式(參見圖1-52)。啟動位元組程式包括::①開始條件;②一個起始位元組(0000 0001);③不應答時鐘脈衝(NACK);④重複起始條件(Sr)。
圖1-52 啟動位元組程式
具有I2C硬體介面的單片機發送啟動(S)訊號後,再發送起始位元組(0000 0001)。因此,另一個微控制器可以以低取樣速率對USDA線路進行取樣,只要檢測到起始位元組中的七個“0”當中的一個“0”,該微控制器就可以切換到更高的取樣速率,在收到接下來的重啟(Sr)訊號後,然後就和高速微控制器同步了。
在起始位元組後有一個應答相關的時鐘脈衝,但不允許任何器件應答(ACK),這只是為了符合總線上使用的位元組處理格式罷了,從機不應答(NACK)即可。
3.3.14 無響應的從機復位
如果從機無響應(無法接收主機資訊),對其解決辦法:首先是通過使用軟體復位命令或硬體復位訊號復位從機。如果從機不支援軟體復位和硬體復位,則重啟從機電源以強制啟用內部上電覆位(POR)電路。
3.3.15 裝置ID
超快速模式(UFm)的I2C匯流排不支援裝置ID讀取功能。
未完待續,敬請關注《徹底搞懂IIC匯流排(4)I2C匯流排的其他用途》。
本文由德力威爾王術平原創;轉載、引用請註明出處,否則侵權。
本文參考資料:
①https://www.nxp.com/docs/en/user-guide/UM10204.pdf。
②https://www.nxp.com/docs/en/application-note/AN10216.pdf。