I²C
類別 | 串列 匯流排 | ||
---|---|---|---|
產品歷史 | |||
設計者 | 飛利浦半導體,現為恩智浦半導體 | ||
設計時間 | 1982年 | ||
數據 | |||
數據訊號 | 集極開路 | ||
寬度 | 1-bit (SDA) with separate clock (SCL) | ||
位元速率 | 在不同模式下 0.1, 0.4, 1.0, 3.4 or 5.0Mbit/s | ||
協定 | 串列, 半雙工 |
I²C(Inter-Integrated Circuit)字面上的意思是集成電路之間,它其實是I²C Bus簡稱,所以中文應該叫積體匯流排電路,它是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統或手機用以連接低速週邊裝置而發展。I²C的正確讀法為「I平方C」("I-squared-C"),而「I二C」("I-two-C")則是另一種錯誤但被廣泛使用的讀法。自2006年10月1日起,使用I²C協定已經不需要支付專利費,但製造商仍然需要付費以取得I²C從屬裝置地址[1]。
設計概說
[編輯]- 一般 I²C 晶片常用的傳輸格式有下列二種:
(啟始)-[控制]-[指令]-[資料]-(結束)
(啟始)-[控制0]-[指令]-(r啟始)-[控制1]-[資料]-(結束)
I²C只使用兩條雙向汲極開路(Open Drain)線,其中一條線為傳輸數據的串列資料線(SDA, Serial DAta line),另一條線是啟動或停止傳輸以及傳送時鐘序列的串列時脈(SCL, Serial CLock line)線,這兩條線上都有上拉電阻[2]。I²C允許相當大的工作電壓範圍,但典型的電壓準位為 3.3V或 5v。
I²C的參考設計使用一個7位元長度的地址空間但保留了16個地址,所以在一組匯流排最多可和112個節點通訊[a]。常見的I²C匯流排依傳輸速率的不同而有不同的模式:標準模式(100 kbit/s)、低速模式(10 kbit/s),但時鐘頻率可被允許下降至零,這代表可以暫停通訊。而新一代的I²C匯流排可以和更多的節點(支援10位元長度的地址空間)以更快的速率通訊:快速模式(400 kbit/s)、快速 模式(1 Mbit/s)高速模式(3.4 Mbit/s)超高速模式(5 Mbit/s)。
雖然最大的節點數目是被地址空間所限制住,但實際上也會被匯流排上的總電容所限制住,一般而言為400 pF。
參考設計
[編輯]I²C僅使用兩個雙向開漏線,串列數據線(SDA)和串列時鐘線(SCL),以及上拉電阻。使用的典型電壓是 5 V或 3.3 V(雖然其他電壓系統也是允許的)。
在I²C參考設計中,使用7或10位(取決於所使用的裝置)地址空間。普通I²C匯流排速度為100 kbit / s的標準模式和10 kbit / s的低速模式,但任意低時鐘頻率也是允許的。 I²C的最新修訂可以承載更多的節點,並以更快的速度執行[b]。這些速度被更廣泛地使用在嵌入式系統中而不是PC上。I²C也有其他的特性,例如16位元定址。
請注意,這裏參照的位元速率為主節點和從節點之間沒有時鐘延長或其他硬件開銷的傳輸位元速率。協定開銷包括一個位元組從地址(或許還有從裝置內部暫存器地址)以及每個位元組的ACK / NACK位元。因此這意味着,用戶數據的實際傳輸速率要低於峰值位元速率。例如,如果與從裝置以低效的每次僅一個位元組數據進行傳輸,數據率將比峰值位元速率少於一半(因為其餘的時鐘需要傳送一個位元組地址和ACK位元)。
節點的最大數量受限於地址空間以及400 pF的總匯流排電容。400 pF總電容也限制了實際通訊距離只有幾米。
如上所述,參考設計為使用串列數據線(SDA)和串列時鐘線(SCL)、擁有7位元定址空間的匯流排。
匯流排上有兩種類型角色的節點:
- 主節點 - 產生時鐘並行起與從節點的通訊
- 從節點 - 接收時鐘並響應主節點的定址
該匯流排是一種多主控匯流排,即可以在匯流排上放置任意多主節點。此外,在停止位元(STOP)發出後,一個主節點也可以成為從節點,反之亦然。
匯流排上有四種不同的操作模式,雖然大部分裝置只作為一種角色和使用其中兩種操作模式:
- 主節點傳送 - 主節點傳送數據給從節點
- 主節點接收 - 主節點接收從節點數據
- 從節點傳送 - 從節點傳送數據給主節點
- 從節點接收 - 從節點接收主節點數據
一開始,主節點處於主節點傳送模式,傳送起始位元(START),跟着傳送希望與之通訊的從節點的7位元地址,最後再傳送1位讀寫位元,該位元表示主節點想要與從節點進行讀(1)還是寫(0)操作。
如果從節點在匯流排上,它將以ACK字元應答(低態觸發)該地址。主節點收到應答後,根據它傳送的讀寫位元,處於傳送模式或者接收模式,從節點則處於對應的相反模式(接收或傳送)。
地址和數據首先傳送最高有效位。 起始位元在SCL為高時,由SDA上準位從高變低表示;停止位元在SCL為高時,由SDA上準位從低變高表示。其他SDA上的準位變化在SCL為低時發生。
如果主節點想要向從節點寫數據,它將傳送一個位元組,然後從節點以ACK位元應答,如此重複。此時,主節點處於主節點傳送模式,從節點處於從節點接收模式。
如果主節點想要讀取從節點數據,它將不斷接收從節點傳送的一個個位元組,在收到每個位元組後傳送ACK進行應答,除了接收到的最後一個位元組。此時,主節點處於主節點接收模式,從節點處於從節點傳送模式。
此後,主節點不是傳送停止位元終止傳輸,就是傳送另一個起始位元以發起另一次傳輸(即「組合訊息」)。
修訂
[編輯]年份 | 版本 | 最高速度 | 註解 | |
---|---|---|---|---|
1982 | Original | 100 kbit/s | 當時的I²C系統是一種簡單的內部匯流排系統,當時主要的用途在於控制由飛利浦所生產的晶片。 | n/a |
1992 | 1 | 400 kbit/s | 新增了傳輸速率為400 kbit/s的快速模式及長度為10位元的定址模式,該模式下可容納最多1008個節點。這是最初的標準版本。 | n/a |
1998 | 2 | 3.4 Mbit/s | 新增了傳輸速率為3.4Mbit/s的高速模式,並減小匯流排需要的電壓及電流以節省能源。 | n/a |
2000 | 2.1 | 3.4 Mbit/s | 僅對2.0版做一些小修正,功能並無變化。 | [3] |
2007 | 3 | 3.4 Mbit/s | 新增了高速 模式,這一模式需要20 mA的電流來驅動。添加裝置ID機制。 | [4] |
2012 | 4 | 5 Mbit/s | 增加5 MHz的超快速模式(UFM),這種模式是單工模式。使用帶有推輓輸出的新型USDA和USCS線,這兩條線上不再有上拉電阻。增加了製造商指定的ID表。 | [5] |
2012 | 5 | 5 Mbit/s | 修正錯誤。 | [6] |
2014 | 6 | 5 Mbit/s | 修正兩幅圖。這是目前最新的標準。 | [2] |
應用
[編輯]I²C被應用在構造簡單且可以犧牲傳輸速度來降低製造成本的週邊上。一些常見的應用如下:
- 為了儲存用戶的設置而存取NVRAM晶片。
- 存取低速的數碼模擬轉換器(DAC)和模擬數碼轉換器(ADC)。
- 改變監視器的對比度、色調及色彩平衡設置(VESA顯示數據頻道)。
- 控制小型液晶或OLED螢幕。
- 改變音量大小。
- 取得硬件監視及診斷資料,例如中央處理器的溫度及風扇轉速。
- 讀取即時時鐘(Real-time clock)。
- 在系統裝置中用來開啟或關閉電源供應。[8]
I²C的一個優勢在於其接腳數少。通過兩個接腳以及相應的軟件,微控制器就可以控制某一個網絡內的裝置,而使用其他技術則需要更多的接腳。而且,較少的接腳數可以減小封裝尺寸,進而減少重量及電源的消耗,這對於流動電話及手持式電腦而言格外重要。由於電腦工程師發現到對於整合電路設計而言,許多的製造成本源自於封裝尺寸及接腳數量,因而像I²C這樣的匯流排受到了廣泛應用。
週邊可以在系統仍然在運作的同時加入或移出匯流排,這代表對於有熱插拔需求的裝置而言是個理想的匯流排。
- arduino mega上的pin腳
- raspberry pi 4 上的pin腳
可參考arduino mega 轉 raspberry pi 4 i2c 3v轉5v的轉換電路
操作系統的支援
[編輯]在Linux中,I²C已經列入了核心模組的支援了,更進一步的說明可以參考核心相關的檔案及位於/usr/include/linux/i2c.h 的這個標頭檔。OpenBSD則在最近的更新中加入了I²C的架構(framework)以支援一些常見的主控端控制器及感應器。
工具開發
[編輯]I²C主機配接器
[編輯]I²C協定分析儀
[編輯]邏輯分析儀
[編輯]限制
[編輯]i2c在容易線長導致訊號質素不佳,速度越快能用的距離越短(一般約在10公分上下),上拉電阻用小一點可能有幫助
i2c阻抗50,usb阻抗100在做訊號轉換時阻抗不匹配會造成訊號極差
- 上升電阻計算:
衍生技術
[編輯]參見
[編輯]參考資料
[編輯]- ^ I2C Licensing Information (PDF). nxp.com. [2018-04-29]. (原始內容存檔 (PDF)於2017-01-10).
- ^ 2.0 2.1 I2C-bus specification (PDF). Rev 6. NXP Semiconductors. April 4, 2014 [2015-11-02]. (原始內容存檔 (PDF)於2014-07-25).
- ^ I2C-bus specification Rev 2.1; Philips Semiconductors; January 2000; Archived. (PDF). [2007-02-12]. (原始內容存檔 (PDF)於2007-02-12).
- ^ I2C-bus specification Rev 3; NXP Semiconductors; June 19, 2007; Archived. (PDF). [2012-02-07]. (原始內容存檔 (PDF)於2012-02-07).
- ^ I2C-bus specification Rev 4; NXP Semiconductors; February 13, 2012; Archived. (PDF). [2012-05-02]. (原始內容存檔 (PDF)於2012-05-02).
- ^ I2C-bus specification Rev 5; NXP Semiconductors; October 9, 2012; Archived. (PDF). [2012-10-17]. (原始內容存檔 (PDF)於2012-10-17).
- ^ 8-Kbit serial I2C bus EEPROM (PDF) (PDF). STMicroelectronics. October 2017 [19 November 2019]. (原始內容存檔 (PDF)於2019-10-18).
|url-status=
和|dead-url=
只需其一 (幫助) - ^ Benefits of Power Supplies Equipped with I2C Ethernet Communications. Aegis Power Systems, Inc. Aegis Power Systems, Inc. [2015-12-21]. (原始內容存檔於2015-12-22).
註釋
[編輯]外部連結
[編輯]- Philips I2C specifications(頁面存檔備份,存於互聯網檔案館)
- Detailed introduction, Primer (頁面存檔備份,存於互聯網檔案館)
- Introduction to I2C
- I2C Bus / Access Bus (頁面存檔備份,存於互聯網檔案館)
- Using the I2C Bus with Linux (頁面存檔備份,存於互聯網檔案館)
- OpenBSD iic(4) manual page[永久失效連結]
- Linux package lm-sensors support I2C bus among others.
- massmind i2c page (頁面存檔備份,存於互聯網檔案館) Source code, samples and technical information for using i2c with PC, PIC and SX microcontrollers.
- I2C bus
- Serial buses information page(頁面存檔備份,存於互聯網檔案館)
- I2C Bus Technical Overview and Frequently Asked Questions (頁面存檔備份,存於互聯網檔案館)
- The I2C Faq Version 2.0
- The Bus Buffer Resource. For 2-wire buses such as I2C, SMBus, PMBus, IPMB & IPMI
- I2C Licensing Information