若在印刷電路板(PC 板)上使用并行總線來實現(xiàn)集成電路間的通信和控制,這樣做不太符合實際。即便是 8 位處理器,僅數(shù)據(jù)方面就要使用 16 條線,而地址總線需要的線數(shù)還要更多。如果一條共享的通信總線上需要使用多個 IC,那就更成問題了。這是因為空間不夠用,無法滿足所有這些 PC 板走線。解決辦法是使用內(nèi)部集成電路 (I2C) 總線等串行通信總線來鏈接 IC。這種雙線串行總線可用于解決該問題。
本文將介紹 I2C 總線的起源,及其如何在 IC 之間提供有效的串行鏈路。然后,本文將討論 I2C 總線的物理實現(xiàn)方式、協(xié)議結(jié)構(gòu),以及這種無處不在的通信總線的常見應(yīng)用。其中將使用 Microchip Technology 的 I2C 接口和解決方案示例進行演示。此外,本文還將討論 I2C 與系統(tǒng)管理總線 (SMBus) 的異同。
什么是 I2C 總線?
在 1980 年代早期,I2C 總線由 Phillips Semiconductors(現(xiàn)為 NXP Semiconductors)開發(fā)。這是一種簡單的雙向雙線總線,可在一塊共用 PC 板上實現(xiàn)集成電路的有效通信和控制。最早的總線規(guī)格于 1992 年完成,隨后即成為行業(yè)公認(rèn)標(biāo)準(zhǔn),并且 50 多家 IC 制造商的元器件中都提供該標(biāo)準(zhǔn)。這種大規(guī)模的部署允許采用一種系統(tǒng)方法進行設(shè)計,可以輕松地將 IC 納入 I2C 總線結(jié)構(gòu)中,而無需進行定制設(shè)計。其他幾種專用總線(例如 SMBus 和電源管理總線 (PMBus))以及另外一些總線均采用該基本架構(gòu)。
I2C 總線是一種可尋址總線,因此可以鏈接多個 IC 和傳感器;7 位或 10 位地址字段允許主控器件向選定器件發(fā)送消息。最初,I2C 的最大時鐘速度為 100 千赫茲 (kHz),但是經(jīng)過多年的發(fā)展,更高速的工作模式已將這一限制推高至 3.4 兆赫茲 (MHz)。
I2C 總線使用兩條線,即指定為串行數(shù)據(jù)線路 (SDA) 和串行時鐘線路 (SCL)。SDA 和 SCL 是開漏/集電極雙向線路,并通過電流源或上拉電阻連接到正電源總線。該總線可以連接多個器件,最大數(shù)量受總線電容限制。主控器件控制著總線,總線上的每個器件都有唯一的地址。主控器件可以通過總線收發(fā)數(shù)據(jù)(圖 1)。I2C 支持多主控操作,其沖突檢測和仲裁功能可防止兩個或更多主控器件同時啟動數(shù)據(jù)傳輸。不過,本文將重點介紹單主控配置。
圖 1:Microchip Technology 的演示印刷電路板原理圖,該電路板實現(xiàn)了 I2C 總線并連接到五個不同的器件。主控器件位于板外,通過連接器 P1 連接。SCL 和 SDA 線路用綠色框出,兩個上拉電阻器用藍(lán)色圈出。(圖片來源:Microchip Technology)
圖 1 顯示了 Microchip Technology 的 PKSERIAL-I2C1 I2C 演示板原理圖。該演示板使用五種不同的器件來實現(xiàn) I2C 總線,包括 EEPROM、溫度傳感器、12 位模數(shù)轉(zhuǎn)換器 (ADC)、10 位數(shù)模轉(zhuǎn)換器 (DAC) 和 8 位串行轉(zhuǎn)并行轉(zhuǎn)換器。主控器件不在板上,而是通過連接器 P1 連接。SDA 和 SCL 總線線路以綠色框出,上拉電阻器以藍(lán)色圈出。
SDA 和 SCL 電平一般為正電源電壓的固定百分比,通常表示為 VDD。對于邏輯“1”(高)和邏輯“0”(低),參考電平分別設(shè)置為 VDD 的 70% 和 30%。
時鐘信號以猝發(fā)模式出現(xiàn),每個傳輸?shù)臄?shù)據(jù)位使用一個時鐘。時鐘處于高電平時,SDA 線路上的數(shù)據(jù)必須有效。只有在時鐘處于低電平時,才能更改數(shù)據(jù)。
從設(shè)計人員的角度來看,由于 I2C 接口已集成到 IC 中而無需設(shè)計接口,因此新項目得以簡化。每個器件只需直接連接到總線。在總線上可以添加或移除 IC,而不會影響其他電路(假設(shè) IC 的總數(shù)不會超越電容極限)。簡單的雙線總線可最大程度地減少每個 IC 上的引腳數(shù)和印刷電路板上的走線數(shù)。
I2C 協(xié)議
該總線為 8 位導(dǎo)向協(xié)議,以字節(jié)為單位進行通信。如上所述,在現(xiàn)在所謂的標(biāo)準(zhǔn)模式中,最初的最大時鐘速率為 100 kHz。如今,總線在快速模式下支持 400 千比特/秒 (Kb/s),在快速增強模式下支持高達(dá) 1 兆比特/秒 (Mb/s),在高速模式 (Hs-Mode) 下支持高達(dá) 3.4 Mb/s。
通過圖示總線上的典型傳輸,可以很好地說明 I2C 協(xié)議(圖 2)。屏幕圖像的來源是 Teledyne LeCroy 的示波器,其包含低速串行數(shù)據(jù)觸發(fā)器和解碼選件 WS4KHD-EMB TD。該示波器選件可以觸發(fā)和解碼多達(dá) 19 個低速串行數(shù)據(jù)接口,其中就包括 I2C。
圖 2:典型的 I2C 數(shù)據(jù)包含有一個起始位、地址字段、應(yīng)答位、17 個各自擁有 ACK 位的數(shù)據(jù)字節(jié)和最后的一個停止位。每個字段均由帶色碼的疊加層標(biāo)識。上方(黃色)跡線是整個 SDA 數(shù)據(jù)包,下方是 SCL 時鐘(紅色)。第三和第四跡線是兩個信號的水平擴展視圖。(圖片來源:Digi-Key Electronics)
該示波器可以在特定的串行事件觸發(fā),包括起始、停止、丟失應(yīng)答 (ACK)、地址、數(shù)據(jù)、地址加數(shù)據(jù)、幀長和 EEPROM 數(shù)據(jù)傳輸。串行數(shù)據(jù)標(biāo)準(zhǔn)的協(xié)議組件由帶色碼的疊加層標(biāo)識。每個協(xié)議字段都以二進制、十六進制或 ASCII 解碼,并且所選代碼顯示在疊加層內(nèi)。
SDA 信號顯示為黃色跡線,而 SCL 信號顯示為紅色跡線。灰色的疊加框指示起始和停止功能。磚紅色疊加層標(biāo)記地址數(shù)據(jù),藍(lán)色字段為數(shù)據(jù)包數(shù)據(jù),橄欖色疊加框標(biāo)記 ACK 功能。
頂部跡線顯示了從起始到停止的整個 I2C SDA 數(shù)據(jù)包。緊靠下方是相應(yīng)的 SCL 信號。再向下第三條跡線是 SDA 信號的時間擴展縮放跡線,其下方是同步 SCL 信號。
在數(shù)據(jù)傳輸之間總線空閑時,SDA 和 SCL 線均處于高電平狀態(tài)。SCL 信號包括以時鐘速率發(fā)出的九個猝發(fā)脈沖,每個傳輸?shù)臄?shù)據(jù)位使用一個,還有一個用于 ACK 位。
所有總線事務(wù)都由一個主控器件生成的起始位開始,該位在縮放的 SDA 軌跡中顯示為灰色疊加框。主控器件在 SCL 線處于高電平狀態(tài)時將 SDA 線拉低,即表示起始信號。一旦主控器件發(fā)出起始位后,總線就即視為處于繁忙狀態(tài)。主控器件可以發(fā)出多次起始信號,這種情況下的后續(xù)起始信號通常稱為重新起始。
所有數(shù)據(jù)傳輸?shù)拈L度均為 8 位(一個字節(jié)),每個后跟一個 ACK 位。位傳輸順序是先傳輸最高有效位 (MSB)。每個字節(jié)傳輸必須得到應(yīng)答。如果從器件處于繁忙狀態(tài),而無法接收或發(fā)送數(shù)據(jù),則可以將 SCL 線拉低。這將迫使主空器件進入等待狀態(tài),直到從器件釋放 SCL 線。
當(dāng)發(fā)送器件在第九個應(yīng)答時鐘脈沖之前釋放 SDA 線后,即會形成 ACK 位。如果接收器件已接收到數(shù)據(jù)字節(jié),則會將 SDA 線拉低。在圖 2 的 SDA 放大視圖中,緊靠第九個時鐘脈沖之前有一個窄峰,這表示 SDA 線經(jīng)釋放返回到高電平狀態(tài)。接收器件拉低 SDA 線以產(chǎn)生 ACK 信號,該信號由橄欖色疊加框作為符號標(biāo)記。如果接收器件未在第九個時鐘脈沖之前將 SDA 線拉低,則是一個非應(yīng)答 (NACK) 響應(yīng)。如果發(fā)生 NACK,則主控器件可以生成停止信號并中止傳輸,也可以發(fā)出重復(fù)起始信號以重試。
在起始條件之后,即會發(fā)出從器件地址。這由磚紅色疊加框表示。地址格式可能有兩種:7 位或 10 位,其中最常見的是 7 位地址。起始后的前 7 位代表地址數(shù)據(jù)。第 8 位指示數(shù)據(jù)方向:讀或?qū)憽DA 線處于低電平表示寫入,而此時 SDA 線處于高電平,表示讀取操作。10 位尋址使用起始條件后的前兩個字節(jié)。I2C 為內(nèi)部功能保留了多個地址。解碼地址數(shù)據(jù)以二進制、十六進制或 ASCII 格式顯示在地址疊加框中。
藍(lán)色的疊加字段標(biāo)記數(shù)據(jù)傳輸。每個為八位長,后跟一個 ACK/NACK 響應(yīng)。I2C 數(shù)據(jù)包中的數(shù)據(jù)字節(jié)數(shù)不受限制,但是圖 2 包含 17 個字節(jié)。解碼后的數(shù)據(jù)(例如地址解碼)顯示在數(shù)據(jù)疊加框中。數(shù)據(jù)流之后是在數(shù)據(jù)傳輸結(jié)束時主控器件生成的一個停止位,由頂部數(shù)據(jù)跡線中的灰色疊加框表示。當(dāng) SCL 線處于高電平狀態(tài)時,該停止位是 SDA 線從低到高的跳變。在發(fā)出停止信號后,總線再次空閑。
顯示屏底部的表格匯總了有關(guān)數(shù)據(jù)包的所有信息,包括自觸發(fā)以來的時間、地址長度、地址,讀或?qū)懖僮鳌?shù)據(jù)包長度,以及數(shù)據(jù)內(nèi)容的摘要。該表中的條目數(shù)與示波器獲取的 I2C 數(shù)據(jù)包數(shù)相匹配,后者在本例中僅為一行。
如果發(fā)生協(xié)議錯誤,則由協(xié)議疊加框后面的亮紅色框表示。
I2C 器件
I2C 總線的最大優(yōu)勢之一是,有大量的器件已將該總線納入自己的設(shè)計中。Microchip Technologies 演示板提供了一些 IC 類型的示例,這些 IC 包含 I2C 總線或其衍生品之一,如 SMBus。
Microchip Technology 的 PIC16F677 是一款 8 位微控制器,其在許多嵌入式設(shè)計中均有采用。該產(chǎn)品實施了一個同步串口,經(jīng)過適當(dāng)控制后,可通過串行外設(shè)接口 (SPI) 或 I2C 與其他控制器或外設(shè)進行通信(圖 3)。
圖 3:Microchip Technology 的 PIC16F677 是一款 8 位微控制器,其包含一個同步串口(橙色框出),可編程為 SPI 或 I2C 總線。(圖片來源:Microchip Technology)
這款微控制器支持使用 7 位或 10 位尋址的 I2C 主模式和從模式。該器件將 SCK/SCL 引腳用于 I2C SCL 時鐘信號,將 SDI/SDA 引腳用于數(shù)據(jù)信號。
這兩個引腳連接到 I2C 總線上的 SCL 和 SDA 線,以實現(xiàn)與其他器件的通信。常見的連接是連接至基于 I2C 的傳感器,例如 Microchip Technology 的 TCN75AVOA713 雙線串行溫度傳感器(圖 4)。
圖 4:Microchip Technology 的 TCN75A 溫度傳感器直接連接至 PIC16F677 微控制器以傳輸溫度數(shù)據(jù)。(圖片來源:Microchip Technology)
此溫度傳感器能夠進行串行通信,因此功能方面得以增強。內(nèi)置的用戶可編程寄存器可用于設(shè)置溫度測量分辨率、節(jié)能關(guān)機模式,甚至可設(shè)置警報輸出,以在溫度范圍超出預(yù)設(shè)限值時發(fā)出提醒。
此外,還有許多器件可以解碼 I2C 串行數(shù)據(jù)流并將其分解為并行數(shù)據(jù)。這里介紹一下 Microchip Technology 的 MIC74YQS-TR 雙線 I/O 擴展器和風(fēng)扇控制器(圖 5)。
圖 5:Microchip Technology 的 MIC74YQS-TR I/O 擴展器將串行數(shù)據(jù)流轉(zhuǎn)換至八根獨立的并行 I/O 線。(圖片來源:Microchip Technology)
該 IC 是完全可編程的 I/O 擴展器,提供八根獨立的 I/O 線。這些 I/O 線可以單獨編程為輸入或輸出。圖 5 顯示了 MIC74YQS-TR 在串行總線的控制下驅(qū)動八個 LED。這與圖 1 中 I2C 演示板上 MCO23008 的用法相似。MIC74YQS-TR 與電源穩(wěn)壓器結(jié)合使用,也可以使用其四個最高有效位來實現(xiàn)風(fēng)扇電機的速度控制。
SMBus 和 I2C
I/O 擴展器的串行輸入是專為 SMBus 設(shè)計,但也與 I2C 總線兼容。SMBus 規(guī)格基于 I2C,由 Intel 和 Duracell 于 1994 年定義。主要區(qū)別在于標(biāo)準(zhǔn)模式 I2C 邏輯電平相對于 VDD 變化,而 SMBus 的邏輯電平則是固定不變。在大多數(shù)情況下,當(dāng) VDD 介于 3 伏和 5 伏之間時,經(jīng)驗表明這不是問題。
另一個區(qū)別是 SMBus 的時鐘速率限制為 100 kHz 或更低,而 I2C 有幾種模式支持更高的時鐘速率。當(dāng)涉及總線兼容性時,這會將最大時鐘速率限制為 100 kHz 或 I2C 標(biāo)準(zhǔn)時鐘模式。
因此,除了非常特殊的情況外,SMBus 和 I2C 都是兼容的。
總結(jié)
I2C 總線及其衍生品廣泛應(yīng)用于各種類型的數(shù)百種 IC,從而使它們在多層面設(shè)計和應(yīng)用中易于連接。混合信號和模擬傳感器經(jīng)過耦合后,即可擴展基于微控制器的嵌入式系統(tǒng)范圍。所有這些都通過一個簡單的雙線串行數(shù)字接口實現(xiàn)。
評論
查看更多