I²C

I2C bus
I²C（Inter-Integrated Circuit）字面上的意思是積體電路之間，它其實是I²C Bus簡稱，所以中文應該叫-{zh-hant:積體匯流排電路;zh-hans:集成電路總線}-，它是一種-{zh:串列;zh-hant:串列;zh-hans:串行}-通訊匯流排，使用多主從架構，由飛利浦公司在1980年代為了讓主機板、嵌入式系統或手機用以連接低速週邊裝置而發展。I²C的正確讀法為“I平方C”（"I-squared-C"），而“I二C”（"I-two-C"）則是另一種錯誤但被廣泛使用的讀法。自2006年10月1日起，使用I²C協定已經不需要支付專利費，但製造商仍然需要付費以取得I²C從屬裝置位址。

**設計概說**
 一般 I²C 晶片常用的傳輸格式有下列二種:
(啟始)-控制-指令-資料-(結束)
(啟始)-控制0-指令-(r啟始)-控制1-資料-(結束)
I²C-Bus
一個由單一主控端（一個微控制器）及三個從屬節點（一個類比數位轉換器）、一個數位類比轉換器以及一另一個微控制器）所構成，並使用了上拉電阻Rp。
I²C只使用兩條雙向漏極開路（Open Drain）線，其中一條線為傳輸數據的-{zh:串列;zh-hant:串列;zh-hans:串行}-資料線（SDA, Serial DAta line），另一條線是啟動或停止傳輸以及發送時鐘序列的-{zh:串列;zh-hant:串列;zh-hans:串行}-時脈（SCL, Serial CLock line）線，這兩條線上都有上拉電阻。I²C允許相當大的工作電壓範圍，但典型的電壓準位為+3.3V或+5v。
I²C的參考設計使用一個7位元長度的位址空間但保留了16個位址，所以在一組匯流排最多可和112個節點通訊應該為27＝128個，但是其中16個指令具有特殊定義，所以剩下112。。常見的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。
Data transfer sequence

**參考設計**
I²C僅使用兩個雙向開漏線，-{zh:串列;zh-hant:串列;zh-hans:串行}-數據線（SDA）和-{zh:串列;zh-hant:串列;zh-hans:串行}-時鐘線（SCL），以及上拉電阻。使用的典型電壓是+5 V或+3.3 V（雖然其他電壓系統也是允許的）。
在I²C參考設計中，使用7或10位（取決於所使用的設備）地址空間。普通I²C總線速度為100 kbit / s的標準模式和10 kbit / s的低速模式，但任意低時鐘頻率也是允許的。 I²C的最新修訂可以承載更多的節點，並以更快的速度運行400 kbit / s的快速模式，1 Mbit / s的快速模式加上或FM +和3.4 Mbit / s的高速模式。這些速度被更廣泛地使用在嵌入式系統中而不是PC上。I²C也有其他的特性，例如16位尋址。
請注意，這裡引用的比特率為主節點和從節點之間沒有時鐘延長或其他硬件開銷的傳輸比特率。協議開銷包括一個字節從地址（或許還有從設備內部寄存器地址）以及每個字節的ACK / NACK比特。因此這意味著，用戶數據的實際傳輸速率要低於峰值比特率。例如，如果與從設備以低效的每次僅一個字節數據進行傳輸，數據率將比峰值比特率少於一半（因為其餘的時鐘需要發送一個字節地址和ACK比特）。
節點的最大數量受限於地址空間以及400 pF的總總線電容。400 pF總電容也限制了實際通訊距離只有幾米。
如上所述，參考設計為使用-{zh:串列;zh-hant:串列;zh-hans:串行}-數據線（SDA）和-{zh:串列;zh-hant:串列;zh-hans:串行}-時鐘線（SCL）、擁有7位元尋址空間的總線。
總線上有兩種類型角色的節點：- 主節點 - 產生時鐘併發起與從節點的通訊- 從節點 - 接收時鐘並響應主節點的尋址
該總線是一種多主控總線，即可以在總線上放置任意多主節點。此外，在停止位元（STOP）發出後，一個主節點也可以成為從節點，反之亦然。
總線上有四種不同的操作模式，雖然大部分設備只作為一種角色和使用其中兩種操作模式：- 主節點發送 - 主節點發送數據給從節點- 主節點接收 - 主節點接收從節點數據- 從節點發送 - 從節點發送數據給主節點- 從節點接收 - 從節點接收主節點數據
一開始，主節點處於主節點發送模式，發送起始位元（START），跟著發送希望與之通訊的從節點的7位元地址，最後再發送1位讀寫位元，該位元表示主節點想要與從節點進行讀（1）還是寫（0）操作。
如果從節點在總線上，它將以ACK字元應答（低態觸發）該地址。主節點收到應答後，根據它發送的讀寫位元，處於發送模式或者接收模式，從節點則處於對應的相反模式（接收或發送）。
地址和數據首先發送最高有效位。
起始位元在SCL為高時，由SDA上準位從高變低表示；停止位元在SCL為高時，由SDA上準位從低變高表示。其他SDA上的準位變化在SCL為低時發生。
如果主節點想要向從節點寫數據，它將發送一個字節，然後從節點以ACK位元應答，如此重複。此時，主節點處於主節點發送模式，從節點處於從節點接收模式。
如果主節點想要讀取從節點數據，它將不斷接收從節點發送的一個個字節，在收到每個字節後發送ACK進行應答，除了接收到的最後一個字節。此時，主節點處於主節點接收模式，從節點處於從節點發送模式。
此後，主節點不是發送停止位元終止傳輸，就是發送另一個起始位元以發起另一次傳輸（即“組合消息”）。

**修訂**

**應用**
STMicroelectronics 24C08: Serial EEPROM with I2C bus
ADC board with I2C interface
I²C被應用在構造簡單且可以犧牲傳輸速度來降低製造成本的-{zh:週邊;zh-hant:週邊;zh-hans:外設}-上。一些常見的應用如下：- 為了保存使用者的設定而存取NVRAM晶片。- 存取低速的數位類比轉換器（DAC）和類比數位轉換器（ADC）。- 改變監視器的對比度、色調及色彩平衡設定（VESA顯示數據頻道）。- 控制小型液晶或OLED屏幕。- 改變音量大小。- 取得硬體監視及診斷資料，例如中央處理器的溫度及風扇轉速。- 讀取即時時鐘（Real-time clock）。- 在系統設備中用來開啟或關閉電源供應。
I²C的一個優勢在於其接腳數少。通過兩個接腳以及相應的軟件，微控制器就可以控制某一個網絡內的設備，而使用其他技術則需要更多的接腳。而且，較少的接腳數可以減小封裝尺寸，進而減少重量及電源的消耗，這對於行動電話及手持式電腦而言格外重要。由於電腦工程師發現到對於整合電路設計而言，許多的製造成本源自於封裝尺寸及接腳數量，因而像I²C這樣的匯流排受到了廣泛應用。
-{zh:週邊;zh-hant:週邊;zh-hans:外設}-可以在系統仍然在運作的同時加入或移出匯流排，這代表對於有熱插拔需求的裝置而言是個理想的匯流排。- arduino mega上的pin腳- raspberry pi 4 上的pin腳
可參考arduino mega 轉 raspberry pi 4 i2c 3v轉5v的轉換電路

**操作系統的支援**
在Linux中，I²C已經列入了-{zh:核心模組;zh-hant:核心模組;zh-hans:內核模塊}-的支援了，更進一步的說明可以參考-{zh:核心;zh-hant:核心;zh-hans:內核}-相關的文件及位於/usr/include/linux/i2c.h 的這個標頭檔。OpenBSD則在最近的更新中加入了I²C的架構（framework）以支援一些常見的主控端控制器及-{zh:感應器;zh-hant:感應器;zh-hans:傳感器}-。

**工具開發**

**I²C主機適配器**

**I²C協議分析儀**

**邏輯分析儀**

**限制**
i2c在容易線長導致訊號品質不佳，速度越快能用的距離越短(一般約在10公分上下)，上拉電阻用小一點可能有幫助
i2c阻抗50,usb阻抗100在做訊號轉換時阻抗不匹配會造成訊號極差
*上升電阻計算:

**衍生技術**

**參見**
 序列周邊介面- I²S- 1-Wire Bus- Serial Peripheral Interface Bus- SMBus

**參考資料**

**註釋**

**外部連結**
  Philips I2C specificationsdate=20130511150526 -  Detailed introduction, Primer date=20201212104553 -  Introduction to I2C-  I2C Bus / Access Bus date=20200718131532 -  Using the I2C Bus with Linux date=20201201065448 -  OpenBSD iic(4) manual pagefix-attempted=yes - Linux package  lm-sensors support I2C bus among others.-  massmind i2c page date=20081007101600  Source code, samples and technical information for using i2c with PC, PIC and SX microcontrollers.-  I2C bus-  Serial buses information pagedate=20080719114000 -  I2C Bus Technical Overview and Frequently Asked Questions date=20090806082509 -  The I2C Faq Version 2.0-  The Bus Buffer Resource. For 2-wire buses such as I2C, SMBus, PMBus, IPMB & IPMI-  I2C Licensing Information