若在印刷電路板(PC 板)上使用并行總線來實現集成電路間的通信和控制,這樣做不太符合實際。即便是 8 位處理器,僅數據方面就要使用 16 條線,而地址總線需要的線數還要更多。如果一條共享的通信總線上需要使用多個 IC,那就更成問題了。這是因為空間不夠用,無法滿足所有這些 PC 板走線。解決辦法是使用內部集成電路 (I2C) 總線等串行通信總線來鏈接 IC。這種雙線串行總線可用于解決該問題。
本文將介紹 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 位數模轉換器 (DAC) 和 8 位串行轉并行轉換器。主控器件不在板上,而是通過連接器 P1 連接。SDA 和 SCL 總線線路以綠色框出,上拉電阻器以藍色圈出。
SDA 和 SCL 電平一般為正電源電壓的固定百分比,通常表示為 VDD。對于邏輯“1”(高)和邏輯“0”(低),參考電平分別設置為 VDD 的 70% 和 30%。
時鐘信號以猝發模式出現,每個傳輸的數據位使用一個時鐘。時鐘處于高電平時,SDA 線路上的數據必須有效。只有在時鐘處于低電平時,才能更改數據。
從設計人員的角度來看,由于 I2C 接口已集成到 IC 中而無需設計接口,因此新項目得以簡化。每個器件只需直接連接到總線。在總線上可以添加或移除 IC,而不會影響其他電路(假設 IC 的總數不會超越電容極限)。簡單的雙線總線可最大程度地減少每個 IC 上的引腳數和印刷電路板上的走線數。
I2C 協議
該總線為 8 位導向協議,以字節為單位進行通信。如上所述,在現在所謂的標準模式中,最初的最大時鐘速率為 100 kHz。如今,總線在快速模式下支持 400 千比特/秒 (Kb/s),在快速增強模式下支持高達 1 兆比特/秒 (Mb/s),在高速模式 (Hs-Mode) 下支持高達 3.4 Mb/s。
通過圖示總線上的典型傳輸,可以很好地說明 I2C 協議(圖 2)。屏幕圖像的來源是 Teledyne LeCroy 的示波器,其包含低速串行數據觸發器和解碼選件 WS4KHD-EMB TD。該示波器選件可以觸發和解碼多達 19 個低速串行數據接口,其中就包括 I2C。

圖 2:典型的 I2C 數據包含有一個起始位、地址字段、應答位、17 個各自擁有 ACK 位的數據字節和最后的一個停止位。每個字段均由帶色碼的疊加層標識。上方(黃色)跡線是整個 SDA 數據包,下方是 SCL 時鐘(紅色)。第三和第四跡線是兩個信號的水平擴展視圖。(圖片來源:Digi-Key Electronics)
該示波器可以在特定的串行事件觸發,包括起始、停止、丟失應答 (ACK)、地址、數據、地址加數據、幀長和 EEPROM 數據傳輸。串行數據標準的協議組件由帶色碼的疊加層標識。每個協議字段都以二進制、十六進制或 ASCII 解碼,并且所選代碼顯示在疊加層內。
SDA 信號顯示為黃色跡線,而 SCL 信號顯示為紅色跡線?;疑寞B加框指示起始和停止功能。磚紅色疊加層標記地址數據,藍色字段為數據包數據,橄欖色疊加框標記 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 格式顯示在地址疊加框中。
藍色的疊加字段標記數據傳輸。每個為八位長,后跟一個 ACK/NACK 響應。I2C 數據包中的數據字節數不受限制,但是圖 2 包含 17 個字節。解碼后的數據(例如地址解碼)顯示在數據疊加框中。數據流之后是在數據傳輸結束時主控器件生成的一個停止位,由頂部數據跡線中的灰色疊加框表示。當 SCL 線處于高電平狀態時,該停止位是 SDA 線從低到高的跳變。在發出停止信號后,總線再次空閑。
顯示屏底部的表格匯總了有關數據包的所有信息,包括自觸發以來的時間、地址長度、地址,讀或寫操作、數據包長度,以及數據內容的摘要。該表中的條目數與示波器獲取的 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 和 Duracell 于 1994 年定義。主要區別在于標準模式 I2C 邏輯電平相對于 VDD 變化,而 SMBus 的邏輯電平則是固定不變。在大多數情況下,當 VDD 介于 3 伏和 5 伏之間時,經驗表明這不是問題。
另一個區別是 SMBus 的時鐘速率限制為 100 kHz 或更低,而 I2C 有幾種模式支持更高的時鐘速率。當涉及總線兼容性時,這會將最大時鐘速率限制為 100 kHz 或 I2C 標準時鐘模式。
因此,除了非常特殊的情況外,SMBus 和 I2C 都是兼容的。
總結
I2C 總線及其衍生品廣泛應用于各種類型的數百種 IC,從而使它們在多層面設計和應用中易于連接?;旌闲盘柡?a href="http://m.xsypw.cn/analog/" target="_blank">模擬傳感器經過耦合后,即可擴展基于微控制器的嵌入式系統范圍。所有這些都通過一個簡單的雙線串行數字接口實現。
評論