本頁使用了標題或全文手工轉換

I²C

維基百科,自由的百科全書
跳至導覽 跳至搜尋
I2C bus

I²CInter-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從屬裝置位址。

設計概說[編輯]

I²C只使用兩條雙向漏極開路(Open Drain)(串列資料(SDA)及串列時脈(SCL))並利用電阻將電位上拉。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)、高速模式(3.4 Mbit/s)。

雖然最大的節點數目是被位址空間所限制住,但實際上也會被匯流排上的總電容所限制住,一般而言為400 pF。

Data transfer sequence

參考設計[編輯]

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)、擁有7bit尋址空間的匯流排。 匯流排上有兩種類型角色的節點:

  • 主節點 - 產生時鐘並行起與從節點的通訊
  • 從節點 - 接收時鐘並回應主節點的尋址

該匯流排是一種多主控匯流排,即可以在匯流排上放置任意多主節點。此外,在停止位(STOP)發出後,一個主節點也可以成為從節點,反之亦然。

匯流排上有四種不同的操作模式,雖然大部分裝置只作為一種角色和使用其中兩種操作模式:

  • 主節點傳送 - 主節點傳送資料給從節點
  • 主節點接收 - 主節點接收從節點資料
  • 從節點傳送 - 從節點傳送資料給主節點
  • 從節點接收 - 從節點接收主節點資料

一開始,主節點處於主節點傳送模式,傳送起始位(START),跟著傳送希望與之通訊的從節點的7bit位位址,最後再傳送一個bit讀寫位,該資料位表示主節點想要與從節點進行讀(1)還是寫(0)操作。

如果從節點在匯流排上,它將以ACK字元位元位應答(低有效)該位址。主節點收到應答後,根據它傳送的讀寫位,處於傳送模式或者接收模式,從節點則處於對應的相反模式(接收或傳送)。

位址和資料首先傳送最高有效位。 起始位在SCL位高時,由SDA上電平從高變低表示;停止位在SCL為高時,由SDA上電平從低變高表示。其他SDA上的電平變化在SCL為低時發生。

如果主節點想要向從節點寫資料,它將傳送一個位元組,然後從節點以ACK位應答,如此重複。此時,主節點處於主節點傳送模式,從節點處於從節點接收模式。

如果主節點想要讀取從節點資料,它將不斷接收從節點傳送的一個個位元組,在收到每個位元組後傳送ACK進行應答,除了接收到的最後一個位元組。此時,主節點處於主節點接收模式,從節點處於從節點傳送模式。

此後,主節點要麼傳送停止位終止傳輸,要麼傳送另一個START位元以發起另一次傳輸(即「組合訊息」)。

修訂[編輯]

原始的I²C系統是在1980年代所建立的一種簡單的內部匯流排系統,當時主要的用途在於控制由飛利浦所生產的晶片。

  • 1992年完成了最初的標準版本釋出,新增了傳輸速率為400 kbit/s的快速模式及長度為10位元的定址模式可容納最多1008個節點。
  • 1998年釋出了2.0版,新增了傳輸速率為3.4Mbit/s的高速模式並為了節省能源而減少了電壓及電流的需求。
  • 2.1版則在2001年完成,這是一個對2.0版做一些小修正,
  • 3.0版於2007年釋出。
  • 2012年2月13日釋出Specification Rev. 新增 5-MHz的超快速模式(UFM)。
  • 2012年,第4版增加5 MHz的超快速模式(UFM),使用推挽式邏輯沒有上拉電阻新的USDA和USCS線,並增加了製造商指定的ID表。
  • 2012年,第5版修正錯誤。
  • 在2014年,第6版糾正了兩個圖。這是目前最新的標準。[1]

應用[編輯]

I²C-Bus

I²C被應用在簡單且其製造成本較傳輸速度更為重要的週邊上。一些常見的應用如下:

  • 為了儲存使用者的設定而存取NVRAM晶片。
  • 存取低速的數位類比轉換器(DAC)。
  • 存取低速的類比數位轉換器(ADC)。
  • 改變監視器的對比度、色調及色彩平衡設定(視訊資料通道)。
  • 改變音量大小。
  • 取得硬體監視及診斷資料,例如中央處理器的溫度及風扇轉速。
  • 讀取實時時鐘(Real-time clock)。
  • 在系統裝置中用來開啟或關閉電源供應。

I²C的另一個強大用途在於微控制器的應用,利用兩根通用的輸入輸出接腳及軟體的規劃,可以讓微控制器控制一個小型網路。

週邊可以在系統仍然在運作的同時加入或移出匯流排,這代表對於有熱插拔需求的裝置而言是個理想的匯流排。

像I²C這樣的匯流排之所以流行起來,是因為電腦工程師發現到對於整合電路設計而言,許多的製造成本源自於封裝尺寸及接腳數量。更小的包裝通常能夠減少重量及電源的消耗,這對於行動電話及手持式電腦而言格外重要。

操作系統的支援[編輯]

Linux中,I²C已經列入了核心模組的支援了,更進一步的說明可以參考核心相關的檔案及位於/usr/include/linux/i2c.h 的這個標頭檔OpenBSD則在最近的更新中加入了I²C的架構(framework)以支援一些常見的主控端控制器及感應器。

工具開發[編輯]

I²C主機介面卡[編輯]

I²C協定分析儀[編輯]

邏輯分析儀[編輯]

限制[編輯]

衍生技術[編輯]

參見[編輯]

參考資料[編輯]

註釋[編輯]

  1. ^ 應該為27=128個,但是其中16個指令具有特殊定義,所以剩下112。
  2. ^ 400 kbit / s的快速模式,1 Mbit / s的快速模式加上或FM +和3.4 Mbit / s的高速模式

外部連結[編輯]