I2C详解(2) I2C总线的规范以及用户手册(1) I2C 总线协议
I2C詳解(2) I2C總線的規范以及用戶手冊(1) I2C 總線協議
I2C詳解(1) 一文快速了解I2C的工作原理
I2C詳解(2) I2C總線的規范以及用戶手冊(1) I2C 總線協議
I2C詳解(3) I2C總線的規范以及用戶手冊(2) I2C 其他的總線協議以及總線速度
I2C詳解(4) I2C總線的規范以及用戶手冊(3) I2C電氣規格和時序
I2C詳解(5) I2C總線的規范以及用戶手冊(4) MIPI I3C 概述
I2C詳解(6) STM32軟件模擬I2C
文章目錄
- I2C詳解(2) I2C總線的規范以及用戶手冊(1) I2C 總線協議
- 前言
- 摘要
- 1. 引言
- 2. I2C總線特性
- 2.1 設計師的優勢
- 2.2 制造商的優勢
- 2.3 I2C設計人員的優勢
- 3. I2C 總線協議
- 3.1 標準模式、快速模式和快速模式+ 的 I2C 總線協議
- 3.1.1 SDA 和 SCL 信號
- 3.1.2 SDA 和 SCL 邏輯電平
- 3.1.3 數據有效性
- 3.1.4 起始和停止條件
- 3.1.5 字節格式
- 3.1.6 應答 (ACK) 和無應答 (NACK)
- 3.1.7 時鐘同步
- 3.1.8 仲裁
- 3.1.9 時鐘拉伸
- 3.1.10 目標地址和 R/W 位
- 3.1.11 10位尋址
- 3.1.12 保留地址
- 3.1.13 廣播尋址
- 3.1.14 軟件復位
- 3.1.15 起始字節
- 3.1.16 總線清除
- 3.1.17 設備標識
- 3.2 超快速 I2C 總線協議
- 3.2.1 USDA 和 USCL 信號
- 3.2.2 USDA 和 USCL 邏輯電平
- 3.2.3 數據有效性
- 3.2.4 起始和停止條件
- 3.2.5 字節格式
- 3.2.6 應答 (ACK) 和無應答(NACK)
- 3.2.7 目標地址和 R/W 位
- 3.2.8 10位尋址
- 3.2.9 UFm 中的保留地址
- 3.2.10 廣播尋址
- 3.2.11 軟件復位
- 3.2.12 起始字節
- 3.2.13 無響應的目標 復位
- 3.2.14 設備標識
前言
本文參考 NXP 2021.10.1 第七版的 UM1024 。
本文詳細的介紹了I2C的協議規范以及電氣規范,可以更加深入的了解I2C。
整理了文中的部分術語,以方便對照查閱。
Table 0.? 全文術語總結
| transmitter | (發送器) 將數據發送到總線的設備 |
| Receiver | (接收器) 從總線接收數據的設備 |
| Controller | (控制器) 啟動傳輸、生成時鐘信號并終止傳輸的設備 注:在之前的版本,可以翻譯為主機,但是在2021.11.01之后的第七版之后,為了符合MIPI I3C規范,都統一稱為控制器。 |
| Target | (目標) 被控制器尋址的設備 注:在之前的版本,可以翻譯為從機,但是在2021.11.01之后的第七版之后,為了符合MIPI I3C規范,都統一稱為目標。 |
| Multi-Controller | (多控制器) 多個控制器可以嘗試同時控制總線,而不會損壞數據 |
| Arbitration | (仲裁) 確保以下過程:如果多個控制器同時嘗試控制總線,則只允許一個控制器這樣做,并且仲裁勝利的數據不會損壞 |
| Synchronization | (同步) 同步兩個或多個設備的時鐘信號的過程 |
| Acknowledge (ACK) | (應答) 發送器在應答時鐘脈沖期間釋放SDA線,因此接收器可以將SDA線拉低,并在該時鐘脈沖的高電平期間保持穩定的低電平,表明該字節已成功接收,并且可以發送另一個字節。由于翻譯的問題,也可以理解成響應、確認等等。 |
| Not Acknowledge (NACK) | (無應答)當 SDA 在第九個時鐘脈沖期間保持高電平時,這被定義為“無應答”信號,然后,控制器可以生成停止條件以中止傳輸。產生無應答的條件在下文中。由于翻譯的問題,也可以理解成不響應、不確認等等。 |
| Standard-mode (Sm) | (標準模式) 雙向總線,最快速率達100 kbit/s |
| Fast-mode (Fm) | (快速模式) 雙向總線,最快速率達400 kbit/s |
| Fast-mode Plus (Fm+) | (快速模式+) 雙向總線,最快速率達 1 Mbit/s |
| High-speed mode (Hs-mode) | (高速模式) 雙向總線,最快速率達 3.4 Mbit/s |
| Ultra Fast-mode (UFm) | (超快速模式) 單向總線,最快速率達 5 Mbit/s |
| Bit banging | (位敲擊)(軟件模擬)。顧名思義,在指定的節拍,調整 IO 的輸出狀態,也就是軟件模擬 I2C 的時序 |
Table 1.? 修訂歷史記錄
| v.7 | 20211001 | 用戶手冊; 第七版 |
| 修改: | ? 更新 Table 5 ? 將術語“主/從”更新為“控制器/目標”,以符合MIPI I3C規范和恩智浦的包容性語言項目 ? 新增Section 9 | |
| v.6 | 20140404 | 用戶手冊; 第六版 |
| 修改: | ? Figure 41 更新 (重新計算) ? Figure 42 更新 (重新計算) | |
| v.5 | 20121009 | 用戶手冊; 第五版 |
| v.4 | 20120213 | 用戶手冊; 第四版 |
| v.3 | 20070619 | 當今的許多應用需要更長的總線和/或更快的速度。推出快速模式升級版是為了滿足這一需求,將驅動強度提高了 10×并將數據速率提高到 1 Mbit/s,同時保持與快速模式和標準模式速度以及軟件命令的向下兼容性。 |
| v2.1 | 2000 | Version 2.1 of the I2C 總線規范 |
| v2.0 | 1998 | I2C 總線已成為事實上的世界標準,現已在1000多個不同的IC中實施,并授權給50多家公司。然而,當今的許多應用需要更高的總線速度和更低的電源電壓。此更新版本的 I2C 總線規范滿足這些要求。 |
| v1.0 | 1992 | I2C 總線規范的1.0版 |
| 原始 | 1982 | 第一版 |
摘要
1. 引言
I2C 總線是事實上的世界標準,現在由50多家公司制造的1000多個不同IC中實施。此外,多功能 I2C 總線還用于各種控制架構,如系統管理總線 (SMBus)、電源管理總線 (PMBus)、智能平臺管理接口 (IPMI)、顯示數據通道 (DDC) 和高級電信計算架構 (ATCA)。
本文檔幫助器件和系統設計人員了解I2C總線的工作原理并實現工作應用。描述了各種操作模式。它全面介紹了 I2C 總線數據傳輸、握手和總線仲裁方案。詳細部分涵蓋了I2C總線在其每種工作模式下的時序和電氣規格。
I2C 兼容芯片的設計人員應以本文檔為參考,并確保新器件滿足本文檔中規定的所有限制。包含 I2C 器件的系統的設計人員應查看本文檔,并參閱各個元件數據手冊。
希望開發基于 I2C 的解決方案的讀者也可能對MIPI聯盟于2017年推出的I3C感興趣,恩智浦的參與和貢獻。MIPI I3C 提供與 I2C 的向后兼容性、更高的速度和低功耗,并且為實施者提供了免版稅版本。更多信息包含在本文檔末尾的 Section 9。
2. I2C總線特性
在消費電子、電信和工業電子中,看似不相關的設計之間往往有許多相似之處。例如,幾乎每個系統都包括:
? 一些智能控制,通常為單片機
? 通用電路,如LCD和LED驅動器,遠程I/O端口,RAM,EEPROM,實時時鐘或A/D和D/A轉換器
? 面向應用的電路,如無線電和視頻系統、溫度傳感器和智能卡的數字調諧和信號處理電路
為了利用這些相似性,使系統設計人員和設備制造商都受益,并最大限度地提高硬件效率和電路簡單性,飛利浦半導體(現為恩智浦半導體)開發了一種簡單的雙向2線總線,用于高效的IC間控制。該總線稱為 Inter-IC 或 I2C 總線。所有I2C總線兼容器件都集成了片內接口,允許它們通過I2C總線直接相互通信。這種設計理念解決了設計數字控制電路時遇到的許多接口問題。
以下是 I2C 總線的一些特性:
? 只需要兩根線;串行數據線 (SDA) 和串行時鐘線 (SCL).
? 連接到總線的每個設備都是可通過唯一地址尋址的軟件,并且始終存在簡單的控制器/目標關系;控制器可以作為控制器-發送器或控制器-接收器工作.
? 它是真正的多控制器總線,包括沖突檢測和仲裁,以防止兩個或多個控制器同時啟動數據傳輸時的數據損壞。
? 串行、面向 8 位的雙向數據傳輸在標準模式下最高可達 100 kbit/s,在快速模式下最高可達 400 kbit/s,在快速模式+ 中最高可達 1 Mbit/s,在高速模式下最高可達 3.4 Mbit/s。
? 串行、8 位定向、單向數據傳輸,在超快速模式下可達 5 Mbit/s。
? 片內濾波可抑制總線數據線上的尖峰,以保持數據完整性。
? 連接到同一總線的 IC 數量僅受最大總線電容的限制。在某些情況下,可能允許更大的電容。請參閱 Section 7.2。
Figure 1.? I2C 總線應用示例
2.1 設計師的優勢
I2C 總線兼容IC允許系統設計直接從功能框圖快速發展到原型。此外,由于它們直接“剪貼”到 I2C 總線上,無需任何額外的外部接口,因此它們允許通過“剪貼”或“不剪貼”IC進出總線來修改或升級原型系統。
以下是I2C總線兼容IC的一些功能,這些功能對設計人員特別有吸引力:
? 框圖上的功能塊與實際IC相對應;設計從框圖到最終原理圖的快速進行。
? 無需設計總線接口,因為 I2C 總線接口已集成在片上。
? 集成的尋址和數據傳輸協議允許系統完全由軟件定義。
? 相同的IC類型通常可用于許多不同的應用。
? 設計時間縮短,因為設計人員可以快速熟悉由I2C總線兼容IC表示的常用功能模塊。
? 可以在系統中添加或移除IC,而不會影響總線上的任何其他電路。
? 故障診斷和調試簡單;故障可立即追蹤。
? 通過組裝可重用的軟件模塊庫,可以縮短軟件開發時間。
除了這些優勢之外,I2C總線兼容系列中的 CMOS IC 還為設計人員提供了特別的功能,這些功能對便攜式設備和電池備份系統特別有吸引力。
他們有:
? 極低的電流消耗
? 高抗噪性
? 寬電源電壓范圍
? 工作溫度范圍廣
2.2 制造商的優勢
I2C 總線兼容IC不僅為設計人員提供幫助,還為設備制造商帶來了廣泛的優勢,因為:
? 簡單的2線串行 I2C 總線最大程度地減少了互連,因此IC具有更少的引腳,并且沒有那么多的PCB走線;結果使PCB更小、更便宜。
? 完全集成的 I2C 總線協議消除了對地址解碼器和其他“膠合邏輯”的需求。
? I2C 總線的多控制器功能允許通過與裝配線的外部連接對最終用戶設備進行快速測試和校準。
? 采用各種無引線封裝的 I2C 總線兼容 IC 進一步降低了空間要求。
這些只是其中的一些好處。此外,I2C 總線兼容IC允許簡單構建設備變體和輕松升級以保持設計最新,從而提高了系統設計靈活性。通過這種方式,可以圍繞基本模型開發整個設備系列。然后,只需將相應的IC粘貼到總線上,即可升級新設備或增強功能模型(即擴展內存、遙控器等)。如果需要更大的ROM,只需從我們的全面系列中選擇具有更大ROM的微控制器即可。由于新IC取代了舊IC,因此只需從總線上拆下過時的IC并剪切其后繼器,即可輕松為設備添加新功能或提高其性能。
2.3 I2C設計人員的優勢
微控制器的設計人員經常面臨節省輸出引腳的壓力。I2C 協議允許連接各種外設,無需單獨的尋址或芯片使能信號。此外,包含 I2C 接口的微控制器在市場上更為成功,因為現有的外圍設備種類繁多。
3. I2C 總線協議
3.1 標準模式、快速模式和快速模式+ 的 I2C 總線協議
兩根線,串行數據(SDA)和串行時鐘(SCL),在連接到總線的設備之間傳輸信息。每個器件都由一個唯一的地址(無論是微控制器、LCD驅動器、存儲器還是鍵盤接口)識別,并且可以作為發送器或接收器運行,具體取決于設備的功能。LCD驅動器可能只是一個接收器,而存儲器可以接收和發送數據。除發送器和接收器外,在執行數據傳輸時,設備也可以被視為控制器或目標 (參閱 Table 2)。控制器是在總線上啟動數據傳輸并生成時鐘信號以允許該傳輸的設備。此時,任何尋址的設備都被視為目標。
Table 2.? I2C 總線術語的定義
| Transmitter(發送器) | 將數據發送到總線的設備 |
| Receiver(接收器) | 從總線接收數據的設備 |
| Controller(控制器) | 啟動傳輸、生成時鐘信號并終止傳輸的設備 |
| Target(目標) | 被控制器尋址的設備 |
| Multi-controller(多控制器) | 多個控制器可以嘗試同時控制總線,而不會損壞數據 |
| Arbitration(仲裁) | 確保以下過程:如果多個控制器同時嘗試控制總線,則只允許一個控制器這樣做,并且仲裁勝利的數據不會損壞 |
| Synchronization(同步) | 同步兩個或多個設備的時鐘信號的過程 |
I2C 總線是一條多控制器的總線。這意味著可以連接多個能夠控制總線的設備。由于控制器通常是微控制器,因此讓我們考慮連接到 I2C 總線的兩個微控制器之間數據傳輸的情況(參閱 Figure 2).
Figure 2.? 使用兩個微控制器的 I2C 總線配置示例
本示例重點介紹 I2C 總線上的控制器-目標和接收器-發送器的關系。請注意,這些關系不是永久性的,取決于當時的數據傳輸方向。數據傳輸將按如下方式進行:
- 微控制器 A(控制器),地址微控制器 B(目標)
- 微控制器A(控制器-發送器),將數據發送到微控制器B(目標-接收器)
- 微控制器 A 終止傳輸。
- 微控制器 A(控制器)地址 微控制器 B(目標)
- 微控制器 A(控制器-接收器)從微控制器 B(目標發送器)接收數據
- 微控制器 A 終止傳輸。
即使在這種情況下,控制器(微控制器A)也可以產生時序并終止傳輸。
將多個微控制器連接到 I2C 總線的可能性意味著多個控制器可以嘗試同時啟動數據傳輸。為了避免此類事件可能帶來的混亂,已經制定了仲裁程序。此過程依賴于線與連接所有 I2C接口到 I2C 總線。
如果兩個或多個控制器試圖將信息放到總線上,則當另一個控制器產生“0”時,第一個控制器產生“1”將失去仲裁。仲裁期間的時鐘信號是控制器使用線與連接到 SCL 線路生成的時鐘的同步組合(有關仲裁的更多詳細信息,請參見 Section 3.1.8)。
在 I2C 總線上生成時鐘信號始終由控制器設備負責;每個控制器在總線上傳輸數據時都會生成自己的時鐘信號。來自控制器的總線時鐘信號只有在一下情況才能被改變:慢速目標設備占用時鐘線,或者在仲裁發生時由另一個控制器拉伸時。
Table 3 總結了 I2C總線規范中必需部分和可選部分的使用以及使用它們的系統配置。
Table 3.? I2C總線協議功能的適用性
M = 必須的; O = 可選的; n/a =不適用.
| 單控制器 | 多控制器 | 目標[1] | |
| START condition (起始條件) | M | M | M |
| STOP condition (停止條件) | M | M | M |
| Acknowledge (應答) | M | M | M |
| Synchronization (同步) | n/a | M | n/a |
| Arbitration (仲裁) | n/a | M | n/a |
| Clock stretching (時鐘拉伸) | O[2] | O[2] | O |
| 7-bit target address (7位目標尋址) | M | M | M |
| 10-bit target address (10位目標尋址) | O | O | O |
| General Call address(廣播尋址) | O | O | O |
| Software Reset (軟件復位) | O | O | O |
| START byte (起始字節) | n/a | O[3] | n/a |
| Device ID (設備標識) | n/a | n/a | O |
[1] 也指作為目標的控制器。
[2] 時鐘拉伸是某些目標的一個功能。如果系統中沒有目標可以延長時鐘(保持 SCL 低電平),則無需設計控制器來處理此過程。
[3] “位敲擊”(軟件模擬)多控制器系統應考慮START字節。請參見 Section 3.1.15.
3.1.1 SDA 和 SCL 信號
SDA和SCL都是雙向線路,通過電流源或上拉電阻連接到正電源電壓(參閱 Figure 3)。當總線空閑時,兩條線路都是高電平的。連接到總線的器件的輸出級必須具有漏極開路或集電極開路,才能執行線與功能。I2C 總線上的數據在標準模式下的傳輸速率高達 100 kbit/s,在快速模式下高達 400 kbit/s,在快速模式+ 中高達 1 Mbit/s,在高速模式下可以高達 3.4 Mbit/s。總線電容限制連接到總線的接口數量。
對于單個控制器應用,如果總線上沒有會延長時鐘的器件,控制器的 SCL 輸出可以是推挽式驅動器設計。
Figure 3.? 具有不同電源電壓的器件共享同一總線
3.1.2 SDA 和 SCL 邏輯電平
由于可以連接到 I2C 總線的不同技術器件(CMOS、NMOS、雙極性)種類繁多,邏輯“0” (低) 和“1” (高)的電平不是固定的,而是取決于相關的 VDD 電平。輸入參考電平設置為VDD的30% 和 70%; VIL 為 0.3 VDD,VIH 為 0.7 VDD。 參閱 Figure 38, 時序圖. 一些傳統器件輸入電平固定在 VIL = 1.5 V 和 VIH = 3.0 V,但所有新器件都需要此 30% / 70% 規格。有關電氣規格,請參見Section 6 。
3.1.3 數據有效性
SDA線路上的數據在時鐘的高電平期間內必須保持穩定。只有當SCL線上的時鐘信號為低電平時,數據線的高電平或低電平狀態才能改變(參閱 Figure 4)。 每個傳輸的數據位都會生成一個時鐘脈沖。
Figure 4.?I2C總線上的位傳輸
3.1.4 起始和停止條件
所有事務都以起始條件(S) 開頭,并由停止條件(P ) 終止 (參閱 Figure 5)。
當 SCL 為高時,SDA 從高電平變為低電平表示起始條件。
當 SCL 為高時,SDA 從低電平變為高電平表示停止條件。
Figure 5.?起始和停止條件
起始和停止條件始終由控制器生成。在起始條件之后,總線被視為忙碌狀態。在停止條件之后的一段時間內,總線被認為是再次空閑的。總線空閑情況請參閱 Section 6。
如果生成重復的起始(Sr) 而不是 STOP 條件,總線將保持忙碌狀態。在這方面,起始 (S) 和重復起始(Sr) 條件在功能上是相同的。因此,對于本文檔的其余部分,S符號用作通用術語,以表示起始和重復起始條件,除非有特別聲明Sr。
如果連接到總線的設備包含必要的接口硬件,則很容易檢測起始和停止條件。但是,沒有這種接口的微控制器必須在每個時鐘周期內至少對SDA線進行兩次采樣才能檢測到電平。
3.1.5 字節格式
SDA線路上的每個字節長度必須為八位。每次傳輸可以傳輸的字節數不受限制。每個字節后必須跟一個應答位。數據首先使用最高有效位(MSB)傳輸 (參閱 Figure 6). 如果目標在執行某些其他功能(例如為內部中斷提供服務)之前無法接收或傳輸另一個完整的數據字節,則可以將時鐘線 SCL 保持在低電平以強制控制器進入等待狀態。然后,當目標準備好接收另一個字節的數據并釋放時鐘線 SCL 時,數據傳輸將繼續。
Figure 6.? I2C總線上的數據傳輸
3.1.6 應答 (ACK) 和無應答 (NACK)
應答發生在每個字節之后。應答位允許接收器向發送器發出信號,表明該字節已成功接收,并且可以發送另一個字節。控制器生成所有時鐘脈沖,包括確認第九個時鐘脈沖。
應答信號定義如下:發送器在應答時鐘脈沖期間釋放SDA線,因此接收器可以將SDA線拉低,并在該時鐘脈沖的高電平期間保持穩定的低電平 (參閱 Figure 4)。必須考慮設置和保持時間 (在 Section 6中指定)。
當 SDA 在第九個時鐘脈沖期間保持高電平時,這被定義為“無應答”信號。然后,控制器可以生成停止條件以中止傳輸,或生成重復的 START 條件以啟動新的傳輸。有五個條件會導致 NACK 的生成:
3.1.7 時鐘同步
兩個控制器可以同時在一條空閑總線上開始傳輸,并且必須有一種方法來決定哪個控制總線并完成其傳輸。這是通過時鐘同步和仲裁完成的。在單控制器系統中,不需要時鐘同步和仲裁。
時鐘同步通過 I2C 接口的線與功能連接到 SCL來執行的。這意味著 SCL 從高電平變為低電平會導致相關控制器開始計算其低電平周期,一旦控制器時鐘變為低電平,它就會將 SCL 線保持在該狀態,直到達到時鐘高電平狀態(參閱 Figure 7)。 但是,如果另一個時鐘仍在其低電平周期內,則該時鐘的低電平到高電平轉換可能不會改變 SCL 線路的狀態。因此,SCL 線路由具有最長低電平周期的控制器保持為低電平。在此期間,具有較短低電平周期的控制器進入高電平的等待狀態。
Figure 7.? 仲裁程序中的時鐘同步
當所有相關控制器都已計算出其低電平周期時,時鐘線被釋放并變為高電平。然后,控制器時鐘和SCL線路的狀態之間沒有區別,并且所有控制器都開始計算其高電平周期。第一個完成高電平周期的控制器再次將 SCL 線拉至低電平。
通過這種方式,同步的SCL時鐘由具有最長低電平時鐘周期的控制器確定其低電平周期,其高電平周期由具有最短時鐘高電平周期的控制器確定。
3.1.8 仲裁
仲裁與同步一樣,是指僅當系統中使用多個控制器時才需要的協議的一部分。目標不參與仲裁程序。僅當總線空閑時,控制器才能啟動傳輸。兩個控制器可以在最短保持時間(tHD;STA) 的起始條件,該條件導致總線上的起始條件有效。然后需要仲裁來確定哪個控制者將完成其傳輸。
仲裁一位一位地進行。在每個位期間,當 SCL 為高電平時,每個控制器都會檢查 SDA 的電平是否與它發送的內容匹配。此過程可能需要很多位。只要傳輸是相同的,兩個控制器實際上可以毫無錯誤地完成整個事務。控制器首次嘗試發送高電平,但檢測到 SDA 電平為低電平時,控制器知道它已丟失仲裁并關閉其 SDA 輸出驅動器。另一個控制器繼續完成其事務。
在仲裁過程中不會丟失任何數據。丟失仲裁的控制器可以生成時鐘脈沖,直到它丟失仲裁的字節結束,并且必須在總線空閑時重新啟動其事務。
如果控制器還包含目標函數,并且在尋址階段丟失仲裁,則獲勝的控制器可能正在嘗試解決它。因此,丟失的控制器必須立即切換到其目標模式。
Figure 8 顯示了兩個控制器的仲裁程序。根據連接到總線的控制器數量,可能會涉及更多。當產生DATA1的控制器的內部數據電平與SDA線路上的實際電平之間存在差異時,DATA1輸出被關閉。這不會影響獲勝控制器啟動的數據傳輸。
Figure 8.?兩個控制器之間的仲裁程序
由于 I2C 總線的控制僅由競爭控制器發送的地址和數據決定,因此總線上沒有中央控制器,也沒有任何優先級順序。.
如果仲裁程序中,一個控制器發送重復起始或者停止條件,而另一個控制器仍在發送數據的那一刻,則存在未定義的條件。換句話說,以下組合會導致未定義的條件:
- 控制器 1 發送重復起始條件,控制器 2 發送數據位。
- 控制器 1 發送停止條件,控制器 2 發送數據位。
- 控制器 1 發送重復起始條件,控制器 2 發送停止條件。
3.1.9 時鐘拉伸
時鐘拉伸通過保持 SCL 線路低電平來暫停事務。在該線路再次釋放為高電平之前,事務無法繼續。時鐘拉伸是可選的,實際上,大多數目標設備都不包含 SCL 驅動程序,因此它們無法拉伸時鐘.
在字節層面,設備可能能夠以快速速率接收數據字節,但需要更多時間來存儲接收的字節或準備要傳輸的另一個字節。然后,目標可以在接收并確認字節后將 SCL 線路保持在低電平,以強制控制器進入等待狀態,直到目標準備好在某種握手過程中進行下一個字節傳輸 (參見 Figure 7).
在位級別上,諸如具有或不具有I2C總線有限硬件的微控制器之類的器件可以通過延長每個時鐘低電平周期來減慢總線時鐘速度。任何控制器的速度都適應該設備的內部運行速率。
在Hs模式下,此握手功能只能在字節級別上使用(參見 Section 5.3.2)。
3.1.10 目標地址和 R/W 位
數據傳輸遵循 Figure 9 所示的格式。 在 START 條件 (S) 之后,將發送一個目標地址。這個地址有七位長,后跟第八位,即數據方向位(R/W)——“0”表示傳輸(WRITE),“1”表示數據請求(READ) (參見 Figure 10)。數據傳輸始終由控制器
生成的停止條件 (P ) 終止。但是,如果控制器仍然希望在總線上進行通信,它可以生成重復起始條件 (Sr) 并尋址另一個目標,而無需首先生成起始條件。然后,在這種傳輸中可以實現讀/寫格式的各種組合。
Figure 9.? 完整的數據傳輸
Figure 10.? 起始過程之后的第一個字節
可能的數據傳輸格式如下:
- 控制器-發送器向目標接收器發送信號。傳輸方向不會改變 (參見 Figure 11)。目標接收器應答每個字節。
- 控制器在第一個字節后立即讀取目標 (參見 Figure 12). 在第一次應答時,控制器-發送器成為控制器-接收器,目標-接收器成為目標-發送器。 第一個應答仍由目標生成。控制器生成后續確認。停止條件由控制器生成,控制器在停止條件之前發送無應答(A)。
- 組合格式 (見 Figure 13)。在傳輸方向改變期間,起始條件和目標地址都會重復,但 R/W 位反轉。如果控制器-接收器發送重復起始條件,則在重復起始條件之前發送一個無應答信號( A ̄\overline{\text{A}}A )。
注意:
Figure 11.? 控制器-發送器,用于尋址具有 7 位地址的目標接收器(傳輸方向不變)
Figure 12.? 控制器緊接在第一個字節之后讀取目標的數據
Figure 13.?組合格式
3.1.11 10位尋址
10 位尋址擴展了可能的地址數。具有7位和10位地址的器件可以連接到相同的 I2C 總線,并且7位和10位尋址可以在所有總線速度模式下使用。目前,10 位尋址尚未得到廣泛使用。
10 位目標地址由 START 條件 (S) 或重復 START 條件 (Sr) 之后的前兩個字節組成。
第一個字節的前七位是組合1111 0XX,其中最后兩位(XX)是10位地址的兩個最高有效位(MSB);第一個字節的第八位是確定數據方向的 R/W 位。
盡管保留地址位 1111 XXX 有八種可能的組合,但只有四種組合 1111 0XX 用于 10 位尋址。其余四個組合 1111 1XX 保留用于將來的 I2C總線增強功能。
前面描述的 7 位尋址的所有讀/寫格式組合都可以使用 10 位尋址。這里詳細介紹了兩個:
- 控制器-發送器以 10 位目標地址傳輸到目標接收器。傳輸方向不會改變(見 Figure 14)。 當 10 位地址遵循 START 條件時,每個目標將目標地址 (1111 0XX) 的第一個字節的前七位與其自己的地址進行比較,并測試第八位(R/W 方向位)是否為 0. 多個設備可能會找到匹配項并生成確認 (A1)。找到匹配項的所有目標都將目標地址 (XXXX XXXX) 的第二個字節的八位與其自己的地址進行比較,但只有一個目標找到匹配項并生成確認(A2)。匹配的目標仍由控制器尋址,直到它收到 STOP 條件 (P ) 或重復的 START 條件 (Sr),之后跟著不同的目標地址。
- 控制器-接收器讀取具有 10 位目標地址的目標發送器。在第二個R/W位之后,傳輸方向發生了變化 (Figure 15). 直到應答位A2(包括),該過程與控制器 - 發送器對目標接收器的描述相同. 在重復的 START 條件 (Sr) 之后,匹配的目標會記住之前被尋址的地址。然后,此目標檢查 Sr 后面的目標地址的第一個字節的前七位是否與 START 條件 (S) 之后的相同,并測試第八個 (R/W) 位是否為 1。則目標認為它已作為發送器尋址,并生成確認 A3。目標發送器保持尋址狀態,直到它收到 STOP 條件 (P )或直到它收到另一個重復的 START 條件 (Sr),后跟另一個目標地址。在重復的 START 條件 (Sr) 之后,所有其他目標設備還將目標地址 (1111 0XX) 的第一個字節的前七位與其自己的地址進行比較,并測試第八個 (R/W) 位。但是,由于 R/W = 1(對于 10 位設備)或 1111 0XX 目標地址(對于 7 位設備)不匹配,因此不會對它們進行任何尋址。
Figure 14.? 控制器-發送器使用 10 位地址尋址目標接收器
Figure 15.? 控制器-接收器使用 10 位地址尋址目標發送器
有 10 位尋址的目標設備對“廣播尋址”的反應方式與具有 7 位尋址的目標設備的反應方式相同. 硬件控制器可以在“廣播尋址”后發送其10位地址。在這種情況下,“常規呼叫”地址字節后跟兩個連續的字節,其中包含控制器發送器的10位地址。格式如Figure 15 所示,其中第一個 DATA 字節包含控制器地址的八個最低有效位。
START字節 0000 0001 (01h) 可以采用與 7 位尋址相同的方式的 10 位尋址(見 Section 3.1.15)。
3.1.12 保留地址
保留兩組八個地址(0000 XXX 和 1111 XXX)用于Table 4.所示的目的。
Table 4.? 保留地址
X = don’t care; 1 = HIGH; 0 = LOW.
| 0000 000 | 0 | 廣播地址[1] |
| 0000 000 | 1 | START 字節[2] |
| 0000 001 | X | CBUS 地址[3] |
| 0000 010 | X | 為不同的總線格式保留[4] |
| 0000 011 | X | 保留供將來使用 |
| 0000 1XX | X | Hs高速模式 控制器代碼 |
| 1111 1XX | 1 | 設備標識 |
| 1111 0XX | X | 10位目標尋址 |
[1] 通用呼叫地址用于多種功能,包括軟件復位。
[2] 不允許任何設備在接收 START 字節時進行應答。
[3] CBUS地址已被保留,以便在同一系統中實現CBUS兼容和 I2C總線兼容器件的相互混合**。** I2C總線兼容設備不允許在接收到此地址時做出響應。
[4] 包含為不同總線格式保留的地址,以使 I2C和其他協議能夠混合使用。僅允許使用此類格式和協議的 I2C總線兼容設備響應此地址。
本地系統內地址的分配取決于系統架構師,他們必須考慮總線上使用的設備以及將來與其他傳統I2C總線的任何交互。 或者,具有七個用戶可分配地址引腳的設備允許分配所有128個地址。如果已知保留地址永遠不會用于其預期目的,則可以將保留地址用于目標地址。
3.1.13 廣播尋址
廣播尋址用于同時尋址連接到 I2C總線的每個設備。但是,如果設備不需要廣播地址結構中提供的任何數據,則可以通過不發出應答信號來忽略此地址。
如果設備確實需要來自通用廣播尋址的數據,它將在地址發送應答并充當目標接收方。如果一個或多個設備響應,控制器實際上不知道有多少設備確認。第二個和后面的字節由每個能夠處理此數據的目標接收器應答。如果設備無法處理其中一個字節則必須通過無應答來忽略它。同樣,如果一個或多個目標確認,則控制器將看不到無應答信號。
通用廣播地址的含義始終在第二個字節中指定。 (參閱Figure 16)。
Figure 16.?廣播尋址的格式
有兩種情況需要考慮:
- 當最低有效位 B 為“0”時。
- 當最低有效位 B 為“1”時。
當位 B 為“0”時,第二個字節具有以下定義:
-
0000 0110 (06h):
通過硬件復位和寫入目標地址的可編程部分。在接收到這個2字節序列時,所有設計用于響應廣播尋址的器件都會復位并接收其地址的可編程部分。
必須采取預防措施,確保器件在施加電源電壓后不會拉下SDA或SCL線路,因為這些低電平會阻塞總線。
-
0000 0100 (04h):
通過硬件寫入目標地址的可編程部分。行為如上,但設備不會重置。
-
0000 0000 (00h):
不允許將此代碼用作第二個字節。編程過程的序列發布在相應的器件數據手冊中。其余代碼尚未定義,設備必須忽略它們。
當位 B 是“1”時,2 字節序列是“硬件廣播尋址”。 這意味著序列由硬件控制器設備(例如鍵盤掃描儀)傳輸,該設備可以被編程為傳輸所需的目標地址。由于硬件控制器事先不知道必須將消息傳輸到哪個設備,因此它只能生成此硬件廣播尋址及其自己的地址 — 向系統標識自身 (見 Figure 17)。
Figure 17.? 從硬件控制器-發送器傳輸數據
第二個字節中剩余的七位包含硬件控制器的地址。該地址由連接到總線的智能設備(例如微控制器)識別,然后總線接受來自硬件控制器的信息。如果硬件控制器也可以充當目標,則目標地址與控制器地址相同。
在某些系統中,另一種方法可能是在系統重置后將硬件控制器-發送器設置為目標-接收器模式。通過這種方式,系統配置控制器可以告訴硬件控制器-發送器(現在處于目標-接收器模式)必須向哪個地址數據發送 (見 Figure 18)。完成此編程過程后,硬件控制器將保持控制器-發送器模式。
Figure 18.? 通過硬件發送器傳輸數據,能夠將數據直接轉儲到目標設備
3.1.14 軟件復位
在廣播尋址 (0000 0000)之后, 發送 0000 0110 (06h) 作為第二個字節會導致軟件重置。此功能是可選的,并非所有設備都響應此命令。在接收到這個2字節序列時,所有設計用于響應一般呼叫地址的器件都會復位并接收其地址的可編程部分。
必須采取預防措施,確保器件在施加電源電壓后不會拉下SDA或SCL線路,因為這些低電平會阻塞總線。
3.1.15 起始字節
微控制器可以通過兩種方式連接到 I2C總線。具有片上硬件 I2C總線接口的微控制器可以編程為僅被總線請求中斷。當設備沒有這樣的接口時,它必須通過軟件持續監控總線。顯然,微控制器監視或輪詢總線的次數越多,它執行其預期功能所花費的時間就越少。
在這種情況下,在傳輸數據之前,可以先執行一個比正常情況長得多的啟動過程 (見 Figure 19)。 啟動過程包括:
? 起始條件 (S)
? 起始字節 (0000 0001)
? 應答時鐘脈沖 (ACK)
? 重復的啟動條件 (Sr)
Figure 19.?起始字節的流程
在需要總線訪問的控制器傳輸 START 條件 S 后,將傳輸 START 字節 (0000 0001)。 因此,另一個微控制器可以以低采樣速率對SDA線進行采樣,直到檢測到START字節中的七個零之一。在SDA線路上檢測到此低電平后,微控制器可以切換到更高的采樣速率,以找到重復的START條件Sr,然后將其用于同步。
硬件接收器在收到重復的 START 條件 Sr 時重置,因此忽略 START 字節。
在 START 字節之后生成一個與確認相關的時鐘脈沖。這只是為了符合總線上使用的字節處理格式而存在。不允許任何設備確認 START 字節。
3.1.16 總線清除
在時鐘(SCL)卡在低電平的極少數情況下,如果您的 I2C 器件具有硬件復位輸入,則首選步驟是使用硬件復位信號復位總線。如果 I2C 器件沒有硬件復位輸入,請重新打開器件電源以激活強制內部上電復位 (POR) 電路。
如果數據線(SDA)卡在低電平,控制器應發送九個時鐘脈沖。保持總線低電平的設備應該在這九個時鐘內的某個時候釋放它。如果沒有,則使用硬件復位或重啟電源來清除總線。
3.1.17 設備標識
設備標識字段 (見 Figure 20) 是一個可選的 3 字節只讀(24 位)字,提供以下信息:
? 帶有制造商名稱的 12 位,每個制造商是唯一的 (例如,NXP)
? 九位部件標識,由制造商指定 (例如, PCA9698)
? 帶有芯片修訂版的三位,由制造商指定 (例如, RevX)
Figure 20.?設備標識字段
設備標識是只讀的,在設備中是硬連線的,可以按如下方式訪問:
起始條件
控制器發送保留的設備標識 I2C總線地址,后跟設置為“0”的 R/W位: ‘1111 1000’。
控制器發送它必須識別的目標設備的 I2C 總線目標地址。LSB 是一個“可忽略”的值。只有一個設備必須確認此字節(具有 I2C 總線目標地址的字節)。
控制器發送重復啟動的條件。
備注:STOP 條件后跟 START 條件將重置目標狀態機,并且無法執行設備 ID 讀取。此外,STOP 條件或重新啟動條件,然后訪問另一個目標設備會重置目標狀態機,并且無法執行設備 標識讀取。
控制器發送保留的設備標識 I2C 總線地址,后跟設置為“1”的R/W 位(讀):“1111 1001”。
設備標識讀取可以完成,從12個制造商位(第一個字節 + 第二個字節的4個MSB)開始,然后是9個部件識別位(第二個字節的 4 個 LSB + 第三個字節的 5 個 MSB),然后是3個版本修訂位(第三個字節的三個LSB)。
控制器通過發送不應答最后一個字節來結束讀取序列,從而重置目標設備狀態機并允許控制器發送停止條件。
備注:通過發送NACK,可以隨時停止讀取設備標識。
如果控制器繼續在第三個字節之后對字節進行應答,則目標將回滾到第一個字節,并不斷發送設備標識序列,直到檢測到無應答。
Table 5.?指定的設備商ID
| 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NXP Semiconductors |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | NXP Semiconductors (保留) |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | NXP Semiconductors (保留) |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | NXP Semiconductors (保留) |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | Ramtron International |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | Analog Devices |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | STMicroElectronics |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ON Semiconductor |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Sprintek Corporation |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | ESPROS Photonics AG |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | Fujitsu Semiconductor |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | Flir |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | O2Micro |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | Atmel |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | DIODES IncoRPorated |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | Pericom |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Marvell Semiconductor Inc |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ForteMedia |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | Snaju LLC |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | Intel |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | Pericom |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | Arctic Sand Technologies |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | Micron Technology |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | Semtech Corporation |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | IDT |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | TT Electronics |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | Alien Technology |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | LAPIS semiconductor |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | Qorvo |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | Wuxi Chipown Micro-Electronics limited (Chipown) |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | KOA Corporation |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | Prevo Technologies, Inc. |
3.2 超快速 I2C 總線協議
超快速模式(UFm)的 I2C 總線是一條 2 線推挽式串行總線,工作頻率范圍為 DC 至 5 MHz,沿一個方向傳輸數據。對于速度大于 1 MHz ,用于驅動 LED 控制器和其他不需要反饋的設備時,它最有用。UFm I2C 總線協議基于標準 I2C 總線協議,該協議由 START、目標地址、命令位、第九個時鐘和 STOP 位組成。命令位僅為“寫入”, 第九個時鐘上的數據位被驅動為高電平,由于總線的單向性質而忽略了ACK周期。2 線推挽式驅動器由超快速串行時鐘 (USCL) 和串行數據 (USDA)組成。
目標設備包含唯一的地址(無論是微控制器、LCD 驅動器、LED 控制器、GPO),并且僅作為接收器運行。LED驅動器可能只是一個接收器,可以由超快速模式支持,而存儲器既可以接收和發送數據,也不受超快速模式的支持。
由于UFM I2C 總線使用推挽式驅動器,因此它不具備線與開漏的標準模式、快速模式、快速模式+的 I2C 總線的多控制器功能。在 UFm 中,控制器是唯一在總線上啟動數據傳輸并生成時鐘信號以允許該傳輸的設備。所有其他已尋址的設備都被視為目標。
Table 6.?超快速模式 I2C 總線術語的定義
| transmitter(發送器) | 將數據發送到總線的設備 |
| Receiver(接收器) | 從總線接收數據的設備 |
| Controller(控制器) | 啟動傳輸、生成時鐘信號并終止傳輸的設備 |
| Target(目標) | 控制器尋址的設備 |
讓我們考慮一個控制器和連接到UFm I2C 總線的多個目標之間數據傳輸的情況 (見 Figure 21)。
Figure 21. 超快速模式 I2C 總線配置
這突出顯示了UFm I2C 總線上的控制器/發送器-目標/接收器關系。請注意,這些關系是永久性的,因為只允許在一個方向上進行數據傳輸。數據傳輸將按如下方式進行:
假設控制器想要向LED控制器2發送信息:
- ASIC A (控制器-發送器),通過在 USDA 上發送地址并在 USCL 上生成時鐘來尋址 LED 控制器 2(目標接收器)。
- ASIC A (控制器-發送器),將數據發送到美國農業部的LED控制器2(目標接收器),并在USCL上生成時鐘。
- ASIC A 終止傳輸.
由于推挽輸出上的總線爭用,不允許將多個 UFm 控制器連接到 UFm I2C 總線。如果系統中需要額外的控制器,則必須將其與另一個控制器完全隔離(即,使用真正的多路復用器),因為一次總線上只允許一個控制器。
UFm I2C 總線上的時鐘信號的產生始終由控制器設備負責,即控制器在總線上傳輸數據時生成時鐘信號。來自控制器的總線時鐘信號不能被具有時鐘延伸的目標器件改變,并且仲裁和時鐘同步過程在 I2C 總線中不存在。
Table 7 總結了UFm I2C 總線規范中強制性和可選部分的使用。
Table 7.?I2C 總線特性對UFm的適用性
M = 強制性的; O =可選的; n/p =不適用的
| 單控制器 | |
| START condition(起始條件) | M |
| STOP condition(停止條件) | M |
| Acknowledge(應答) | n/p |
| Synchronization(同步) | n/p |
| Arbitration(仲裁) | n/p |
| Clock stretching(時鐘拉伸) | n/p |
| 7-bit target address(7位地址) | M |
| 10-bit target address(10位地址) | O |
| General Call address(廣播尋址) | O |
| Software Reset(軟件復位) | O |
| START byte(起始字節) | O |
| Device ID(設備標識) | n/p |
3.2.1 USDA 和 USCL 信號
USDA和USCL都是單向線路,具有推挽輸出。當總線空閑時,兩條線路均由輸出級的上晶體管拉至高電平。在超快速模式下, I2C 總線上的數據可以以高達 5000 kbit/s 的速率傳輸。連接到總線的接口數量受總線負載、電纜末端反射、連接器和短截線的限制。
Figure 22.? USCL, USDA 輸出的簡化原理圖
3.2.2 USDA 和 USCL 邏輯電平
由于可以連接到 I2C總線的不同技術器件(CMOS、NMOS、雙極性)種類繁多,邏輯“0”(低)和“1”(高)的電平不是固定的,而是取決于相關的 VDD電平。 輸入參考電平設置為VDD的30 % 和 70%; VIL 為 0.3VDD 以及 VIH 為 0.7VDD。見 Figure 40, 時序圖。有關電氣規格,見Section 6。
3.2.3 數據有效性
USDA 線上的數據在時鐘的高電平期間必須穩定。只有當 USCL 線上的時鐘信號為低電平時,數據線的高電平或低電平狀態才能改變(見 Figure 23). 每個傳輸的數據位都會生成一個時鐘脈沖。
Figure 23.?UFm I2C 總線上的位傳輸
3.2.4 起始和停止條件
當總線不繁忙時,數據線和時鐘線都保持高電平。所有事務都以 START (S) 開頭,并且可以通過 STOP (P ) 終止(見 Figure 24)。 當 USCL 為高時,USDA 線上的高到低轉換定義了 START 條件。當 USCL 為高時,USDA 線上的從低到高的轉換定義了 STOP 條件。
Figure 24.?UFm I2C 總線的起始和停止條件的定義
START 和 STOP 條件始終由控制器生成。在 START 條件之后,總線被視為繁忙。在STOP條件之后的一段時間內,總線被認為是再次空閑的。這個總線空閑的情況在Section 6中指定。如果生成重復的 START (Sr) 而不是 STOP 條件,總線將保持忙碌狀態。在這方面,START (S) 和重復 START (Sr) 條件在功能上是相同的。因此,對于本文檔的其余部分,S符號用作通用術語,以表示START和重復的START條件,除非Sr特別相關。
如果連接到總線的設備包含必要的接口硬件,則很容易檢測START和STOP條件。然而,沒有這種接口的微控制器必須在每個時鐘周期內至少對USDA線路進行兩次采樣才能感測轉換。
3.2.5 字節格式
放在 USDA 線路上的每個字節的長度必須為 8 位。每次傳輸可以傳輸的字節數不受限制。控制器在每個字節后的應答周期內驅動 USDA HIGH。數據首先使用最高有效位 (MSB) 傳輸 (見 Figure 25). 如果目標無法接收另一個完整的數據字節或者當它正在執行某些其他功能(例如為內部中斷提供服務)時,則不允許目標將時鐘保持為低。
Figure 25.?UFm I2C 數據傳輸
3.2.6 應答 (ACK) 和無應答(NACK)
由于目標無法響應第九個時鐘周期,因此不需要 ACK 和 NACK。但是,時鐘周期在 UFm 中仍然保留著,以便與 I2C 總線協議兼容。ACK和NACK也被稱為第九個時鐘周期。控制器產生所有時鐘脈沖,包括第九個時鐘脈沖。第九個數據位始終驅動為 HIGH (‘1’)。目標設備在任何時候都不允許驅動SDA線路。
3.2.7 目標地址和 R/W 位
數據傳輸遵循圖 Figure 26 中所示的格式。 在 START 條件 (S) 之后,將發送一個目標地址。這個地址是七位長,后跟第八位,這是一個數據方向位(W)。“0”表示傳輸(WRITE);“1”表示對數據的請求(READ),UFm不支持(START字節, Section 3.2.12除外) 因為通信是單向的(參考 Figure 27)。數據傳輸始終由控制器生成的 STOP 條件 (P ) 終止。
但是,如果控制器仍然希望在總線上進行通信,它可以生成重復的 START 條件 (Sr) 并尋址另一個目標,而無需首先生成 STOP 條件。
Figure 26.?完整的 UFm 數據傳輸
Figure 27.?START 過程之后的第一個字節
UFm 數據傳輸格式是:
- 控制器-發送器向目標接收器發送信號。傳輸方向不會改變(見 Figure 28). 控制器從不應答,因為它從不接收任何數據,而是在第九位上生成“1”,以使目標符合 I2C 總線協議。
Figure 28.? 控制器-發射器,使用 7 位地址尋址目標接收器
注意:
3.2.8 10位尋址
10 位尋址擴展了可能的地址數。具有7位和10位地址的器件可以連接到相同的 I2C 總線,并且7位和10位尋址可以在所有總線速度模式下使用。
10 位目標地址由 START 條件 (S) 或重復 START 條件 (Sr) 之后的前兩個字節組成。
第一個字節的前七位是組合1111 0XX,其中最后兩位(XX)是10位地址的兩個最高有效位(MSB);第一個字節的第八位是確定數據方向的 R/W 位。
盡管保留地址位 1111 XXX 有八種可能的組合,但只有四種組合 1111 0XX 用于 10 位尋址。其余四個組合 1111 1XX 保留用于將來的 I2C總線增強功能。
只有前面描述的7位尋址的寫入格式才能使用10位尋址。詳見此處。
- 控制器-發送器以 10 位目標地址傳輸到目標接收器。傳輸方向不會改變 (見 Figure 29)。 當 10 位地址遵循 START 條件時,每個目標將目標地址 (1111 0XX) 的第一個字節的前七位與其自己的地址進行比較,并測試第八位(R/W 方向位)是否為 0(W)。找到匹配項的所有目標都將目標地址 (XXXX XXXX) 的第二個字節的八位與其自己的地址進行比較,但只有一個目標找到匹配項并生成確認(A2)。匹配的目標仍由控制器尋址,直到它收到 STOP 條件 (P ) 或重復的 START 條件 (Sr),之后跟著不同的目標地址。
Figure 29.? 控制器-發射器使用 10 位地址尋址目標接收器
START字節 0000 0001 (01h) 可以采用與 7 位尋址相同的方式的 10 位尋址 (見 Section 3.2.12).
3.2.9 UFm 中的保留地址
UFm I2C 總線具有與其他 I2C 總線模式不同的物理層。因此,可用的目標地址范圍是不同的。保留兩組八個地址(0000 XXX 和 1111 XXX),用于 Table 8所示的目的。
Table 8.?保留的地址
X = don’t care; 1 = HIGH; 0 = LOW.
| 0000 000 | 0 | 廣播地址 [1] |
| 0000 000 | 1 | START 字節 [2] |
| 0000 001 | X | 保留供將來使用 |
| 0000 010 | X | 保留供將來使用 |
| 0000 011 | X | 保留供將來使用 |
| 0000 1XX | X | 保留供將來使用 |
| 1111 1XX | X | 保留供將來使用 |
| 1111 0XX | X | 10位目標尋址 |
[1] 通用呼叫地址用于多種功能,包括軟件復位。
[2] 不允許UFm 設備在接收 START 字節時進行應答。
本地系統內地址的分配取決于系統架構師,他們必須考慮總線上使用的設備以及將來與其他傳統I2C總線的任何交互。 或者,具有七個用戶可分配地址引腳的設備允許分配所有128個地址。如果已知保留地址永遠不會用于其預期目的,則可以將保留地址用于目標地址。
3.2.10 廣播尋址
廣播尋址用于同時尋址連接到 I2C總線的每個設備。但是,如果設備不需要廣播地址結構中提供的任何數據,則可以通過無發出應答信號來忽略此地址。如果設備確實需要來自通用廣播尋址的數據,它將在地址發送應答并充當目標接收方。如果一個或多個設備響應,控制器實際上不知道有多少設備確認。第二個和后面的字節由每個能夠處理此數據的目標接收器應答。如果設備無法處理其中一個字節則必須通過無應答來忽略它。同樣,如果一個或多個目標確認,則控制器將看不到無應答信號。通用廣播地址的含義始終在第二個字節中指定。 (見 Figure 30)。
Figure 30.? 廣播尋址的格式
有兩種情況需要考慮:
- 當最低有效位 B 為“0”時.
- 當最低有效位 B 為“1”時.
當位 B 為“0”時,第二個字節具有以下定義:
0000 0110 (06h)
通過硬件復位和寫入目標地址的可編程部分。 在接收到這個2字節序列時,所有設計用于響應廣播尋址的器件都會復位并接收其地址的可編程部分。
0000 0100 (04h)
通過硬件寫入目標地址的可編程部分。行為如上,但設備不會復位。.
0000 0000 (00h)
不允許將此代碼用作第二個字節。編程過程的序列發布在相應的器件數據手冊中。其余代碼尚未定義,設備必須忽略它們。
當位 B 為“1”時,將忽略 2 字節序列。
3.2.11 軟件復位
在廣播尋址 (0000 0000)之后, 發送 0000 0110 (06h) 作為第二個字節會導致軟件重置。此功能是可選的,并非所有設備都響應此命令。在接收到這個2字節序列時,所有設計用于響應一般呼叫地址的器件都會復位并接收其地址的可編程部分。
3.2.12 起始字節
微控制器可以通過兩種方式連接到 I2C 總線。具有片上硬件 I2C 總線接口的微控制器可以編程為僅被總線請求中斷。當設備沒有這樣的接口時,它必須通過軟件持續監控總線。顯然,微控制器監視或輪詢總線的次數越多,它執行其預期功能所花費的時間就越少。
因此,快速硬件設備和依賴于軟件輪詢的相對較慢的微控制器之間存在速度差異。
在這種情況下,在傳輸數據之前,可以先執行一個比正常情況長得多的啟動過程(見 Figure 31)。啟動過程包括:
- 起始條件 (S)
- 起始字節 (0000 0001)
- 應答時鐘脈沖 (ACK)
- 重復的啟動條件 (Sr)
Figure 31.?開始字節的流程
在需要總線訪問的控制器傳輸START條件S后,將傳輸START字節(0000 0001) 。因此,另一個微控制器可以以低采樣率對USDA線進行采樣,直到檢測到START字節中的七個零之一。在USDA線路上檢測到此低電平后,微控制器可以切換到更高的采樣速率以找到重復的START條件Sr,然后將其用于同步。硬件接收器在收到重復的 START 條件 Sr 時重置,因此忽略 START 字節。在 START 字節之后生成一個與確認相關的時鐘脈沖。這只是為了符合總線上使用的字節處理格式而存在。不允許任何設備確認 START 字節。
3.2.13 無響應的目標 復位
在目標變得無響應的極少數情況下(例如,通過外部反饋而不是通過UFm I2C 總線確定),優先過程是使用軟件復位命令或硬件復位信號復位目標。如果目標不支持這些功能,則重新打開設備電源以激活強制內部上電復位 (POR) 電路。
3.2.14 設備標識
UFm 中不支持設備標識字段。
總結
以上是生活随笔為你收集整理的I2C详解(2) I2C总线的规范以及用户手册(1) I2C 总线协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入门训练 Fibonacci数列
- 下一篇: 不同的容器里实现 RadioButton