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)以支援一些常見的主控端控制器及感應器。
工具開發
限制
i2c在容易線長導致訊號品質不佳,速度越快能用的距離越短(一般約在10公分上下),上拉電阻用小一點可能有幫助
i2c阻抗50,usb阻抗100在做訊號轉換時阻抗不匹配會造成訊號極差
- 上升電阻計算:
衍生技術
參見
參考資料
註釋
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.