原创 I2C接口技术(1)

2007-8-8 14:10 1256 2 2 分类: 消费电子

半导体产业向来的命运有两条路,不是系统芯片整合化(SoC)就是制程微细化。SoC再怎么整合还是有困扰存在,过度整合反而失去了设计上的弹性。因此,芯片与芯片之间的互通管道,还是有其必要。举手机为例,射频(RF)可以模块化,但是应用处理器还是要接内存、电源管理控制器以及音频输出等。从事信息产品规划或是研发工程的人员,在组件规格中应该常见到I2C以及SM-Bus接口,两者之间究竟存在何种差异?两者内涵又是如何?相信很多人想深入了解。历史经验告诉我们,一个经得起长久岁月考验打不死的界面,必然有其前因与后果的存在。

I2C的起源、發展與基本規格
回首1980年代初期,荷蘭商飛利浦半導體為了積體電路內部的連接方便,發展了兩線式(2 wire)的的雙向式介面,當時將之稱作「Inter-IC」介面,簡稱I2C介面或I2C匯流排。原本目的是為了在電視機內部讓處理器CPU晶片與周邊晶片更容易連接。

我們都知道,嵌入式系統(Embedded Systems)的設計中,連接到微控制器(MCU)的周邊裝置往往使用記憶體映射的I/O處理方式(Memory Map I/O)。換句話說,在線路板上的微控制器必須連接一大堆的位址信號線(Address bus)與資料信號線(Data bus),必要的位址解碼線路以及額外的邏輯線路也是跑不掉的。這一點對於電視機、錄放影機或音響等價格敏感的消費性產品,進入大量生產時是相當不利的。至於多條控制線引起額外的副作用,好比說線路板的面積較大、電磁干擾(EMI)等,也是惱人的問題。

飛利浦為了克服上述問題,在位於荷蘭Eindhoven的實驗室中發展出讓IC之間的控制更有效率的I2C介面,由於容易使用,此介面逐漸演化為產業泛用標準。目前恩智浦半導體(NXP Semiconductor,也就是之前的飛利浦半導體)超過1000種以上的元件,諸如控制器等都內建了此介面。同時I2C介面也授權給很多知名公司使用,包括Xicor、ST Microelectronics、英飛凌(Infineon Technologies)、英特爾(Intel)、德州儀器(Texas Instruments)、Maxim、Atmel、ADI(Analog Devices Inc.)等,如今已相當普遍。

只要在晶片上納入了I2C介面,元件之間就可以直接透過該介面來彼此溝通無礙。設計數位控制電路的時候,這個介面幫助特別大。例如手機,由於功能不停的新增,往往需要更多控制線與訊號線,I2C介面就成了適當的解決之道。
 

fo1180.1.JPG

圖一 I2C介面也可以運用在手機產品上。(來源:Impress Watch網站)
 

I2C 匯流排的基本傳輸協定(Bus Protocol)若是從信號的實質面上來看,I2C介面僅僅包含了兩條主動信號線以及一條地線,構造非常簡單。這兩條主動信號線分別是「SDA」與「SCL」,兩者皆是具有雙方向的傳輸信號線。

◎ SDA = Serial DAta line
◎ SCL = Serial CLock line
 

fo1180.2.JPG

圖二 I2C介面的連接型態。
 

每一個連接到匯流排上的元件裝置,無論是MCU、LCD驅動器或是ASIC,都會擁有其唯一的元件位址。依據功能上的差異,每一個元件可以是傳送端或是接收端。比如說,LCD驅動器僅僅是接收端,而像一些記憶體晶片或是I/O晶片,很可能是兩者都會具備。

正如同一般匯流排的習俗慣例,啟動資料傳輸的一方,通常稱之為主控端(Bus Master),非主控端的元件就是從屬端(Bus Slave)。有趣的地方是,I2C介面可以是隸屬一個多重主控端(Multi-Master)的匯流排架構。

一般來說,MCU總是扮演著主控端的角色。以上面的連接圖為例。如果MCU要送資料到某一個從屬端,首先MCU會送出「起始」(Start)的狀態,有如告知所有連接元件的注意信號。介面上的元件就要留意有資料即將到來。接著,主控端送出要存取元件的位址,以及讀取或是寫入的資訊。若接收元件獲知是自己的位址,就必須回應認可(Acknowledge)信號。若是位址信號事不關己,就當耳邊風不去理他就是。

一旦MCU接收到認可信號之後,才開始傳送接收資料。完成資料傳輸後, MCU送出「結束(Stop)」狀態。也就是表示將介面即將釋放出來,其他的元件可以起始新的動作。

若是就介面的狀態而言,以上例來說,介面有起始狀態(Start)、位址狀態(Address)、認可狀態(ACK)、資料狀態(data)與結束狀態(Stop)等。

回顧USB介面,雖有四條信號線,扣掉電源與接地信號,其實只剩下一對D+與D-的信號線負責資料的傳送與接收。因此,傳收兩端也是仰賴著很多的狀態定義來達成的。說穿了,所有IO輸出入介面再怎麼不同,邏輯上還是很相近的。

I2C 匯流排的硬體結構

如前所述,SDA與SCL皆是雙向的信號線。通常,這些信號多是採用開集極(Open Collector)或開源極(Open Drain)的技術架構。
 

fo1180.3.JPG

圖三  SDA與SCL信號的輸出結構。
 

當介面處於閒置(Idle)狀態,介面信號線就呈現邏輯高(Logic HIGH)狀態。因為外部往往連接一個拉高電阻。當驅動信號到介面時,晶片會驅動其輸出電晶體,將介面拉到邏輯低狀態。

不過,開集極(Open Collector)的技巧也有一個缺點存在。假若介面長度太長時,會有嚴重的副作用發生,那就是速度會掉落下來。因為,長距離的介面會在輸出驅動器上,會呈現電容負載(Capacitive Load)效應。因為,拉高電阻是被動式元件,與電容器C會產生了RC常數,而影響到信號波形的外觀。當RC常數越大時,會影響到信號的迴轉率(Slew Rate),而將信號速度拉下來。當到了最壞的情況下時,介面上的積體電路甚至難以分別究竟是邏輯一還是邏輯零的信號狀態,信號的動作自然就會出問題。
 

fo1180.4.JPG

圖四 介面長度對於信號的影響。
 

還有一個令人困擾的問題,那就是當信號很快速的時候,信號反射引起的負面效應。通常IC的輸入端會用舒密特觸發(Schmitt triggers)的電路型態。
 

fo1180.5.JPG

圖五 信號反射引起的負效應。
 

這道難題嚴重時會難以克服。因此,電氣特性的規定就需要更為嚴謹。為了解決這類問題,飛利浦半導體發展出主動式終端阻抗(Active Terminator)的方式。這種元件會包含有一對電荷幫浦(Charge Pump),可將其視為介面上的一個動態阻抗,這種措施的好處是可以很快速地將寄生電容充電,一旦電壓高過某個位階,高電流模式就會火速切斷輸出電流。
 

fo1180.6.JPG

圖六 主動式終端阻抗的輸出結構。
 

請仔細看圖六。只要介面維持在邏輯低的時候,電晶體C是開著,這時候由於電晶體B的柵極(Gate)也維持在低電位。因此,電荷幫浦(Charge Pump)就會被關閉。

只要元件晶片釋放出匯流排,電晶體A與電晶體C就會關閉。電容將從四個電阻汲取電流開始充電,當電阻2的電壓降將會開啟電晶體B,將電阻3短路。由於電阻3的數值很小,電流上升。但很快地電晶體B的柵極(Gate)與源極(Source)將不足夠維持開關開起。開關關閉之後,電流注入停止。這個時候就僅有外部的拉高電阻存在來克服介面上的漏電流(Leakage)問題。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /4 下一条