????????I2C Bus(Inter-Integrated Circuit Bus)?最早是由Philips半導體(現被NXP收購)開發的兩線式串行總線,常用于微控制器與外設之間的連接。
一、概述
????????以下是 I2C 總線的一些特性:
- 只需要兩條總線;一條串行數據線 (SDA) 和一條串行時鐘線 (SCL)。
- ?連接到總線的每個設備都可以通過唯一的地址進行尋址,并且始終存在簡單的主/從關系;master可以作為主發送器或主接收器運行。
- 沒有嚴格的波特率要求,例如 RS232,主機生成總線時鐘
- 多主機總線,包括沖突檢測和仲裁,以防止兩個或多個主機同時啟動數據傳輸時數據損壞。
- 串行、面向 8 位的雙向數據傳輸在標準模式(standard mode)下最高可達 100 kbit/s,在快速模式(fast mode)下最高可達 400 kbit/s,在快速模式 Plus 下最高可達 1 Mbit/s ,或在高速模式(high-speed mode)下高達 3.4 Mbit/s。
- 在超快速模式下,面向 8 位的串行單向數據傳輸速度高達 5 Mbit/s。
- 片上濾波可抑制總線數據線上的尖峰信號,以保持數據完整性。
- ?可連接到同一總線的IC 數量僅受最大總線電容的限制。 在某些條件下可能允許更大的電容。
? ? ? ? 一個I2C應用如下:
二、I2C協議
?1、標準模式與快速模式協議
????????兩線一一串行數據(SDA)和串行時鐘(SCL)線在連接到總線的器件間傳輸信息。每個器件都有一個唯一的地址識別(無論是微控制器、LCD驅動器、存儲器或鍵盤接囗),而且都可以作為一個發送器或接收器(由器件的功能決定),很明顯,LCD驅動器只是一個接收器,而存儲器則既可以接收又可以發送數。除了發送器和接收器外,器件在執行數據傳輸時也可以被看作是主機或從機,主機是初始化總線的數據傳輸并產生允許傳輸的時鐘信號的器件,此時,任何被尋址的器件都被認為是從機。
????????SDA和SCL都是雙向線路,都通過一個電流源或上拉電阻連接到正的電源電壓,當總線空
閑時,這兩條線都是高電平。
????????連接到總線的器件輸出級必須是漏極開路或集電極開路才能執行線與的功能。
????????I2C 總線規范的強制要求和可選部分的使用以總結如下:
1) 數據有效性
????????在時鐘的高電平期間(SCL為高),SDA 線上的數據必須是穩定的。 只有當 SCL 線上的時鐘信號為 LOW 時,數據線的 HIGH 或 LOW 狀態才能改變。 每一個時鐘脈沖傳輸一個數據位。
2)啟動和停止條件
????????所有傳輸都以 START (S) 開始,并以 STOP (P) 結束。
- 啟動條件:SCL為高電平時,SDA 線上的高電平到低電平轉換。
- 停止條件:SCL為高電平時,SDA 線上的低電平到高電平轉換。
?
????????START 和 STOP 條件始終由主機生成。 在 START 條件之后,總線被認為是忙碌的。 在 STOP 條件之后的某個時間,總線被認為再次空閑。
????????如果生成重復的 START (Sr) 而不是 STOP 條件,則總線保持忙碌。 在這方面,START (S) 和重復 START (Sr) 條件在功能上是相同的。
3)字節格式
????????SDA 線上的每個字節都必須是 8 位。 每次傳輸可傳輸的字節數不受限制。 每個字節后必須跟一個確認位(ack)。 數據首先以最高有效位 (MSB)傳輸。 如果從機在執行其他功能(例如服務內部中斷)之前無法接收或發送另一個完整字節的數據,則它可以將時鐘線 SCL 保持為低電平以強制主機進入等待狀態。 當從設備準備好接收另一個字節的數據并釋放時鐘線 SCL 時,數據傳輸將繼續。
4)確認位
????????確認位(ACK)在每個字節之后發送。確認位允許接收器通知發送器該字節已成功接收并且可以發送另一個字節。主機生成所有時鐘脈沖,包括確認位的第九個時鐘脈沖。
????????確認信號定義如下:發送器在確認時鐘脈沖期間釋放 SDA 線,因此接收器可以將 SDA 線拉低,并在該時鐘脈沖的高電平期間保持穩定的低電平。還必須考慮建立和保持時間。
????????當 SDA 在第 9 個時鐘脈沖期間保持高電平時,這被定義為未確認信號。然后,主機可以生成一個停止條件來中止傳輸,或者生成一個重復的 START 條件來開始新的傳輸。有五個條件會導致 未確認信號(NACK) 的產生:
- 發送地址的總線上沒有接收器,因此沒有設備響應確認。
- 接收器無法接收或發送,因為它正在執行一些實時功能,還沒有準備好開始與主設備的通信。
- ?在傳輸過程中,接收方得到了它不理解的數據或命令。
- 在傳輸過程中,接收方不能再接收任何數據字節。
- 主接收器必須向從發送器發出傳輸結束信號。
5)時鐘同步
????????兩個主機可以同時在空閑總線上開始傳輸,并且必須有一種方法來決定哪一個控制總線并完成其傳輸。 這是通過時鐘同步和仲裁完成的。
????????在單主系統中,不需要時鐘同步和仲裁。
????????使用 I2C 接口與 SCL 線的線與連接來執行時鐘同步。
????????這意味著 SCL 線上的高電平到低電平轉換會導致相關主設備開始對它們的低電平周期進行計數,并且一旦主時鐘變為低電平,它就會將 SCL 線保持在該狀態,直到達到時鐘高電平狀態。 但是,如果另一個時鐘仍在其低電平周期內,則該時鐘從低電平到高電平的轉換可能不會改變 SCL 線的狀態。 因此,SCL 線由具有最長低電平周期的主機保持低電平。 具有較短低電平周期的主機在此期間進入 高電平的等待狀態。
????????當所有相關的主機都計完它們的低電平周期時,時鐘線被釋放并變為高電平。 這樣主時鐘和 SCL 線的狀態之間就沒有區別了,所有的主時鐘開始計數它們的高電平周期。 第一個完成其高電平周期的主機再次將 SCL 線拉低。 這樣,一個同步的SCL時鐘就產生了,它的低電平周期由時鐘低電平周期最長的主機決定,高電平周期由時鐘高電平周期最短的主機決定。
6)仲裁
????????仲裁與同步一樣,是指僅當系統中使用多個主設備時才需要的協議的一部分。從設備不參與仲裁程序。?只有當總線空閑時,主機才可以開始傳輸。
????????兩個主設備可以在 START 條件的最小保持時間內生成一個 START 條件,從而在總線上產生一個有效的 START 條件。然后需要仲裁來確定哪個主機將完成其傳輸。
????????仲裁是一位一位進行的。在每一位進行傳輸期間,當 SCL 為高電平時,每個主機都會檢查 SDA 電平是否與其發送的電平相匹配。這個過程可能需要很多位。只要傳輸相同,兩個主機實際上可以無誤地完成整個事務。第一次主機嘗試發送高電平,但檢測到 SDA 電平為低電平時,主機知道它已失去仲裁并關閉其 SDA 輸出驅動器。另一個主節點繼續完成其事務。在仲裁過程中不會丟失任何信息。失去仲裁的主機可以生成時鐘脈沖,直到失去仲裁的字節結束,并且必須在總線空閑時重新開始其事務。如果主機還包含從機功能并且在尋址階段失去仲裁,則獲勝的主機可能正在嘗試對其進行尋址。因此,丟失的主設備必須立即切換到其從設備模式。
?????????由于 I2C 總線的控制完全取決于競爭主機發送的地址和數據,因此沒有中央主機,也沒有總線上的任何優先級順序。
7)讀寫控制
????????在 START 條件 (S) 之后,發送從地址。 該地址有 7 位長,后跟第 8 位,即數據方向位 (R/W)——“0”表示傳輸 (WRITE),“1”表示請求數據 (READ)。
?????????數據傳輸總是由主機產生的停止條件 (P) 終止。 但是,如果主機仍然希望在總線上進行通信,它可以生成重復的 START 條件 (Sr) 并尋址另一個從機,而無需首先生成 STOP 條件。 在這樣的傳輸中,讀/寫格式的各種組合都是可能的。
2、?Ultra Fast-mode 協議
????????UFm(Ultra Fast-mode) I2C 總線是一種 2 線串行總線,可在高至 5 MHz 的頻率范圍內單向傳輸數據。當速度大于 1 MHz 時,驅動 LED 控制器和其他不需要反饋的設備最為有用。
???????? UFm I2C 總線協議基于標準 I2C 總線協議,該協議由 START、從地址、命令位、第九個時鐘和一個停止位組成。命令位僅為“寫”,第 9 個時鐘上的數據位被驅動為高電平,由于總線的單向特性而忽略 ACK 周期。
????????2 線驅動器由 UFm 串行時鐘 (USCL) 和串行數據 (USDA) 組成。從設備包含一個唯一地址(無論是微控制器、LCD 驅動器、LED 控制器還是 GPO)并且僅作為接收器運行。 LED驅動器可能只是一個接收器,UFm可以支持,而存儲器可以接收和傳輸數據,UFm不支持。 UFm I2C 總線也不支持多主機功能。在 UFm 中,主機是唯一在總線上啟動數據傳輸并生成時鐘信號以允許傳輸的設備。尋址的所有其他設備都被視為從設備。
? ? ? ? 其規范要求如下:
? ? ? ? ?USDA和USCL都是單向線路,當總線空閑時,兩條線都被輸出級的上晶體管拉高。其基本傳輸條件與標準模式一致。