積體電路間 (I2C) 匯流排為何讓連接 IC 變得如此簡單?又該如何使用?
資料提供者:DigiKey 北美編輯群
2020-04-07
在印刷電路板 (PCB) 上使用並列匯流排進行積體電路間的通訊和控制並不實際。即便是 8 位元的處理器,光是資料傳輸就需要 16 條線路,位址匯流排則需要更多條。如果多個 IC 需要共用一條通訊匯流排,那就更成問題了,因為空間不足,無法容納所有這些電路板走線。解決方法是使用序列通訊匯流排來連接 IC,例如積體電路間 (I2C) 匯流排;這種雙線序列匯流排可用於解決此問題。
本文將介紹 I2C 匯流排的起源,及其如何在 IC 間提供高效率的序列連結。接著會探討 I2C 的實體實作方式和通訊協定結構,並針對這個極為普遍的通訊匯流排,介紹一些常見的應用。其中會以 Microchip Technology 的 I2C 介面和解決方案作為展示範例。此外,本文也會探討 I2C 與系統管理匯流排 (SMBus) 的相似處和差異點。
什麼是 I2C 匯流排?
在 1980 年代早期,I2C 匯流排由 Phillips Semiconductors (NXP Semiconductors 的前身) 所開發。這是一種簡易的雙向雙線匯流排,讓一片共用 PC 板上的積體電路,能實現有效的通訊和控制。最早的匯流排規格於 1992 年完成,此後便成為業界既定標準,超過 50 家 IC 製造商的元件中皆採行此標準。正是因為如此普遍,在系統設計做法上,不需客製化設計就能立即將 IC 加入 I2C 匯流排結構。其他幾種特殊的匯流排 (例如 SMBus 和電源管理匯流排 (PMBus)),以及其他幾種產品,都採用此基本架構。
I2C 匯流排屬於可定址匯流排,因此能連結多個 IC 和感測器;7 位元或 10 位元位址欄位允許主控元件將訊息傳送到選定的元件。最初,I2C 的時脈速度上限是 100 kHz,但經過數年的發展,更高速的工作模式已將此上限推高至 3.4 MHz。
I2C 匯流排使用兩條電線,即指定為序列數據線 (SDA) 與序列時脈線 (SCL)。SDA 和 SCL 屬於開汲極/開集極雙向線路,並透過電流源或上拉電阻連接至正電源匯流排。此匯流排可連接多個元件,最大數量視匯流排電容量而定。主控元件控制著匯流排,匯流排上每個元件都有唯一的位址。主控元件可透過匯流排傳輸和接收資料 (圖 1)。I2C 支援多重主控操作,其碰撞偵測和仲裁功能可防止兩個或更多個主控元件同時啟動資料傳輸。不過,本文將著重探討單一主控配置。
圖 1:Microchip Technology 的展示電路板線路圖;此板件實作 I2C 匯流排,並將其連接至五種不同的元件。主控元件透過連接器 P1 自板外連接。SCL 和 SDA 線以綠色繪出,兩個上拉電阻以藍色圈出。(圖片來源:Microchip Technology)
圖 1 顯示 Microchip Technology 的 PKSERIAL-I2C1 I2C 展示板線路圖。此展示板使用五種不同的元件來實作 I2C 匯流排,包括 EEPROM、溫度感測器、12 位元類比數位轉換器 (ADC)、10 位元數位類比轉換器,以及 8 位元串並聯轉換器。主控元件並非板載,而是透過連接器 P1 連接。SDA 和 SCL 匯流排線以綠色繪出,上拉電阻以藍色圈出。
SDA 和 SCL 位準一般是正電源電壓的固定百分比,通常以 VDD 表示。針對邏輯「1」(高) 和邏輯「0」(低),參考位準分別設定為 VDD 的 70% 和 30%。
時脈訊號以突衝方式產生,每個傳輸的資料位元使用一個時脈。時脈為高位準時,SDA 線上的資料必須有效。只有時脈為低位準時,才能變更資料。
從設計人員的角度來說,由於 IC 中已整合 I2C 介面,無需再設計介面,因此新專案變得更簡單。只要直接將每個元件連接到匯流排即可。在匯流排上可以加入或移除 IC,而不會影響其他電路 (假設 IC 的總數量不會超越電容量上限)。簡單的雙線匯流排可將每個 IC 上的引腳數,及 PC 板上的走線數減至最少。
I2C 通訊協定
匯流排為 8 位元導向式協定,並以位元組進行通訊。如前所述,在現在所謂的標準模式中,時脈速率上限原本為 100 kHz。目前,匯流排在快速模式中支援 400 kbit/s,在快速增強模式中支援高達 1 Mbit/s,在高速模式 (Hs-Mode) 中支援高達 3.4 Mbit/s。
透過圖示匯流排上的典型傳輸,最能說明 I2C 通訊協定 (圖 2)。畫面的圖片源自 Teledyne LeCroy 的示波器,此產品具有低速序列資料觸發器和解碼選項 WS4KHD-EMB TD。此示波器選項能觸發並解碼多達 19 個低速序列資料介面,其中就包括 I2C。
圖 2:典型的 I2C 資料封包含有一個開始位元、位址欄位、確認位元、17 個各自擁有 ACK 位元的資料位元組,最後還有一個停止位元。每個欄位均以顏色編碼式重疊部分來識別。上方 (黃色) 走線為整個 SDA 封包,下方則是 SCL 時脈 (紅色)。第三和第四條走線是兩個訊號的橫向擴大視圖。(圖片來源:DigiKey)
此示波器可針對特定的序列事件觸發,包括開始、停止、遺失確認 (ACK)、位址、資料、位址與資料、訊框長度,及 EEPROM 資料傳輸。序列資料標準的通訊協定元素,以顏色編碼式重疊部分來識別。每個協定欄位都是以二進位、十六進位或 ASCII 進行解碼,所選程式碼會顯示在重疊部分內。
SDA 訊號以黃色走線顯示,SCL 訊號則是紅色走線。灰色重疊方塊代表開始和停止功能。磚紅色重疊標記位址資料,藍色欄位是封包資料,橄欖色重疊方塊則標記 ACK 功能。
頂部走線顯示從開始到停止的整個 I2C SDA 封包。緊接其下是相對應的 SCL 訊號。再向下第三條走線是 SDA 訊號的時間擴大縮放走線,其下方則是同步 SCL 訊號。
在資料傳輸之間匯流排閒置時,SDA 和 SCL 線皆保持高態。SCL 訊號包括以時脈速率發出的九個突衝脈衝,每個傳輸的資料位元使用一個,額外的一個用於 ACK 位元。
所有匯流排交易都是先從主控元件產生的一個開始位元開始,此位元在縮放的 SDA 走線中以灰色重疊方塊表示。當主控元件在 SCL 線處於高態時拉低 SDA 線,即表示開始。一旦主控元件發出開始位元,匯流排即視為處於忙碌狀態。主控元件能發出多個開始事件,在此情況下,後面的開始事件通常稱為重新開始。
所有資料傳輸的長度都是 8 位元 (一個位元組),每個後面都跟隨一個 ACK 位元。位元傳輸會先以最高有效位元 (MSB) 開始。每個位元組傳輸都必須經過確認。如果從屬元件因忙碌而無法接收或傳送資料,則可以拉低 SCL 線。這會迫使主控元件進入等待狀態,直到從屬元件釋出 SCL 線為止。
當傳送元件於第九個確認時脈脈衝之前釋放 SDA 線後,即形成 ACK 位元。如果接收元件接收到資料位元組,則會拉低 SDA 線。在圖 2 的 SDA 縮放視圖中,緊鄰第九時脈脈衝的前方有一個窄尖波,這表示 SDA 線經釋放返回至高態。接收器將拉低 SDA 線,用以產生 ACK 訊號;該訊號以橄欖色方塊重疊作為符號標記。如果接收器未在第九時脈脈衝之前拉低 SDA 線,就是一個非確認 (NACK) 回應。如果發生 NACK,主控元件可以產生停止訊號並中止傳輸,也可以重複發出開始事件以重試。
在開始條件之後,即會發出從屬位址。這由磚紅色重疊方塊表示。位址格式可能有兩種,即 7 位元或 10 位元,以 7 位元位址最常見。開始後的前 7 個位元代表位址資料。第 8 個位元表示資料方向 (讀取或寫入)。低態的 SDA 線表示寫入,而此時高態的 SDA 線則表示讀取作業。10 位元定址使用開始條件後的前兩個位元組。I2C 會預留數個位址用於內部功能。解碼位址資料以二進位、十六進位或 ASCII 格式,顯示在位址重疊方塊中。
藍色重疊欄位標記資料傳輸。每個的長度為 8 位元,後接一個 ACK/NACK 回應。I2C 封包的資料位元組數沒有限制,但圖 2 中包含 17 個位元組。經解碼的資料 (例如位址解碼) 顯示在資料重疊方塊中。資料流之後會接一個停止位元,其由主控元件在資料傳輸結束時產生,如頂部資料走線中的灰色重疊方塊所示。此停止位元是 SDA 線由低態轉換至高態,同時 SCL 線處於高態。在送出停止訊號後,匯流排再度閒置。
顯示圖底部的表格總結了相關資料封包的全部資訊,包括自觸發後的時間、位址長度、位址、讀取或寫入作業、封包長度,以及資料內容摘要。表格中的項目數量與示波器擷取的 I2C 封包數量相符,後者在此例中僅為一行。
如果發生通訊協定錯誤,則在其他協定重疊方塊後面以亮紅色方塊表示。
I2C 元件
I2C 匯流排最大的優勢之一是有非常多裝置已將此匯流排納入設計本身。Microchip Technologies 展示板提供了一些 IC 類型範例,這些 IC 含有 I2C 匯流排或 SMBus 等衍生產品。
Microchip Technology 的 PIC16F677 是一種 8 位元微控制器,已在許多嵌入式設計中採用。此元件實作的同步序列埠經過控制後,可透過序列周邊裝置介面 (SPI) 或 I2C 與其他控制器或周邊裝置進行通訊 (圖 3)。
圖 3:Microchip Technology 的 PIC16F677 是一種 8 位元微控制器,內建的同步序列埠 (以橘色繪出),經編程後可作為 SPI 或 I2C 匯流排。(圖片來源:Microchip Technology)
此微控制器支援使用 7 位元或 10 位元定址的 I2C 主控和從屬模式。該元件將 SCK/SCL 引腳用於 I2C SCL 時脈訊號,將 SDI/SDA 引腳用於資料訊號。
這兩個引腳連接至 I2C 匯流排上的 SCL 和 SDA 線,即可與其他裝置通訊。常見的做法是連接至 I2C 型的感測器,例如 Microchip Technology 的 TCN75AVOA713 雙線序列溫度感測器 (圖 4)。
圖 4:Microchip Technology 的 TCN75A 溫度感測器直接連至 PIC16F677 微控制器,以傳遞溫度資料。(圖片來源:Microchip Technology)
這款溫度感測器具備序列通訊能力,因此功能性更高。內部的使用者可編程式暫存器可用於設定溫度測量解析度、省電關機模式,甚至能設定警示輸出,在溫度範圍超過預設限值時做出警示。
此外,也有許多元件可將 I2C 序列資料流解碼,並分割成平行資料。請參考 Microchip Technology 的 MIC74YQS-TR 雙線 I/O 擴充器和風扇控制器 (圖 5)。
圖 5:Microchip Technology 的 MIC74YQS-TR I/O 擴充器能將序列資料流轉換成八條獨立的平行 I/O 線。(圖片來源:Microchip Technology)
此 IC 是可完全編程的 I/O 擴充器,提供八條獨立 I/O 線。這些 I/O 線可個別編程為輸入或輸出。圖 5 顯示 MIC74YQS-TR 在序列匯流排控制下驅動八個 LED。這和圖 1 中 I2C 展示板上 MCO23008 的用法類似。MIC74YQS-TR 搭配使用功率調節器,也能藉由本身的四個最高有效位元來實作風扇馬達速度控制。
SMBus 與 I2C
I/O 擴充器的序列輸入是專為 SMBus 所設計,但也相容於 I2C 匯流排。SMBus 規格以 I2C 為基礎,由 Intel 和 Duracel 於 1994 年制定。主要差別在於,標準模式 I2C 邏輯位準相對於 VDD 變化,SMBus 的邏輯位準則固定不變。在多數情況下,當 VDD 介於 3 V 至 5 V 時,經驗表明這不是個問題。
另一項差異在於,SMBus 的時脈速率有限,只到 100 kHz 或更低,I2C 則有數種支援較高時脈速率的模式。在處理匯流排相容性時,這會將最高時脈速率限制在 100 kHz 或 I2C 標準時脈模式。
因此,除非情況特殊,否則 SMBus 和 I2C 兩者相容。
結論
在數百種類型的 IC 中,隨處可見 I2C 匯流排及其衍生產品,因而在多元的設計和應用中能實現輕鬆連接。混合訊號及類比感測器經過耦合後,即可擴大微控制器型嵌入式系統的範圍。全部只需要一個簡單的雙線序列數位介面。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。