?? i2c&smbus.txt
字號:
串列介面設(shè)計實務(wù) I2C Bus、SMBus間技術(shù)差異
(郭長祐/DigiTimes.com) 2005/05/09
前言:
關(guān)於I2C Bus與SMBus,許多人很少去談?wù)撆c瞭解兩者的細節(jié)差異,包括很多國外的簡報文件也經(jīng)常將兩者混寫、交雜描述、交替運用。
廣告
確實,在一般運用下,I2C Bus與SMBus沒有太大的差別,從實體接線上看也幾乎無差異,甚至兩者直接相連多半也能相安無誤地正確互通並運作。不過若真要仔細探究,其實還是有諸多不同,如果電子設(shè)計工程師不能明辨兩者的真實差異,那麼在日後的開發(fā)設(shè)計的驗證除錯階段時必然會產(chǎn)生困擾,為此本文將從各層面來說明I2C Bus與SMBus的細微區(qū)別,期望能為各位帶來些許助益。
附註:關(guān)於I2C Bus的基礎(chǔ),可參考筆者之前的「I2C介面之線路實務(wù)」,網(wǎng)址為:
http://www.digitimes.com.tw/n/article.asp?id=304799064272FED148256FDC00481D68
或參考Philips半導(dǎo)體網(wǎng)站的I2C官方規(guī)格:
http://www.semiconductors.philips.com/acrobat/literature/9398/39340011.pdf
運用背景、版本演進之別
首先從規(guī)格的制訂背景開始,I2C是在設(shè)計電視應(yīng)用時所發(fā)創(chuàng)的介面,首版於1992年發(fā)表;而SMBus(System Management Bus)則是Intel與Duracell(金頂電池)共同制訂筆記型電腦所用的智慧型電池(Smart Battery)時所發(fā)創(chuàng)的介面,首版於1995年發(fā)表,不過SMBus文件中也提及,SMBus確實是參考自I2C,並以I2C為基礎(chǔ)所衍生成。
I2C起源於電視設(shè)計,但之後朝通用路線發(fā)展,各種電子設(shè)計都有機會用到I2C;而SMBus則在之後為PC所制訂的先進組態(tài)與電源管理介面(Advanced Configuration & Power Interface;ACPI)規(guī)範中成為基礎(chǔ)的管理訊息傳遞介面、控制傳遞介面。
雖然I2C與SMBus先後制訂時間不同,但都在2000年左右進入成熟化改版,I2C的過程改版以加速為主要訴求,而SMBus以更切合Smart Battery及ACPI的需求為多。
I2C三次主要改版:
1992年 v1.0
1998年 v2.0
2000年 v2.1
SMBus三次主要改版:
1995年 v1.0
1998年 v1.1
2000年 v2.0
▲圖說:MAXIM公司的MAX6641晶片,具有溫度監(jiān)督及風(fēng)扇控制功能(用PWM脈寬調(diào)變方式控制風(fēng)扇轉(zhuǎn)速),圖中腳位7、8即是SMBus(圈處),其他裝置可透過SMBus與此晶片溝通,取得溫度及相關(guān)資訊,或進行命令操控。(圖/MAXIM-IC.com)
電氣特性差異:邏輯位準定義、限流、相關(guān)限制
I2C的Hi/Lo邏輯準位有兩種認定法:相對認定與絕對認定,相對認定是依據(jù)Vdd的電壓來決定,Hi為0.7 Vdd,Lo為0.3 Vdd,絕對認定則與TTL準位認定相同,直接指定Hi/Li電壓,Hi為3.0V,Lo為1.5V。相對的SMBus只有絕對認定,且準位與I2C有異,Hi為2.1V,Lo為0.8V,與I2C不全然吻合但也算部分交集。
不過,SMBus後來也增訂一套更低電壓的準位認定,Hi為1.4V,Lo為0.6V,這是為了讓運用SMBus的裝置能更省成本而有的作法。
瞭解電壓後再來是電流,由於SMBus一起頭就是運用在筆記型電腦內(nèi),所以低用電的表現(xiàn)優(yōu)於I2C,只需100uA就能維持工作,I2C卻要到3mA,同樣的低用電特性也反應(yīng)在漏電流(Leakage Current)的要求上,I2C最大的漏電流為10uA,SMBus為1uA,但是1uA似乎過度嚴苛,使運用SMBus的裝置在驗證測試時耗費過多的成本與心力,因此之後的SMBus 1.1版放寬了漏電流上限,最高可至5uA。
再者是相關(guān)限制,I2C有線路電容的限制,SMBus卻沒有,但也有相類似的配套規(guī)範,即是準位下拉時的電流限制,當SMBus的開集極接腳導(dǎo)通其閘極而使線路接地時,流經(jīng)接地的電流不得高於350uA,另外拉升電流(即相同的開集極接腳開路時)也一樣有規(guī)範,最小不低於100uA,最高也是不破350uA。
既然對電流有限制,那麼也可容易地推斷對提升電阻的阻值之範圍要求,I2C在5V Vdd時當大於1.6k ohm,在3V Vdd時當大於1k ohm,類似的SMBus於5V Vdd時當大於14k ohm,3V Vdd時當大於8.5k ohm,不過這個定義並非牢不可破,就一般實務(wù)而言,在SMBus上也可用2.4k~3.9k ohm範疇的阻值。
附註:I2C的時脈線稱SCK或SCL,資料線稱SDA。SMBus的時脈線稱SMBCLK,資料線稱SMBDAT。
▲圖說:I2C與SMBus在邏輯位準的電壓定義不盡相同,基本上I2C的定義較為寬裕、彈性,而SMBus則更專注在省電方面的要求。(圖/MAXIM-IC.com)
時序差別與考驗
實體層面的空間要求完後,再來就是實體層面的時間,即是時序(Timing)方面的差別。
先以運作頻率來說,I2C此方面相當寬裕,最低頻可至0Hz(直流狀態(tài),等於時間暫停),高可至100kHz(Standard Mode)、400kHz(Fast Mode)、乃至3.4MHz(High Speed Mode),相對的SMBus就很拘限,最慢不慢於10kHz,最快不快於100kHz。很明顯的,I2C與SMBus的交集運作頻率即是10kHz~100kHz間。
用於筆記型電腦的電池管理或PC組態(tài)管理、用電管理的SMBus,很容易體會不需要更高運作頻率的理由,只要傳遞小資料量的監(jiān)督訊息、控制指令本就不用過於高速,而朝向廣遍運用的I2C自然希望用更高的傳輸以因應(yīng)各種可能的需求。然而大家可能會疑惑,為何SMBus有最低速的要求?何不放寬到與I2C相同的毫無最低速限呢?
SMBus一定要維持10kHz以上的運作時脈,主要也是為了管理監(jiān)控,另一個用意是只要在保持一定傳速運作的情況下加入?yún)?shù),就可輕鬆獲知匯流排目前是否處於閒置(Idle)中,省去逐一偵測傳輸過程中的停斷(STOP)信號,或持續(xù)保有停斷偵測並輔以額外參數(shù)偵測,如此對匯流排閒置後的再取用會更有效快速。
傳速要求之後還有資料持留時間(Data Hold Time)的要求,SMBus規(guī)定SMBCLK線路的準位下降後,SMBDAT上的資料必須持續(xù)保留300nS,但I2C卻沒有對此有相同的強制要求。
類似的,SMBus對介面被重置(Reset)後的恢復(fù)時間(Timeout)也有要求,一般而言是35mS,I2C這方面亦無約束,可以任意延長時間。相同的SMBus也要求無論是在主控端(Master)或受控端(Slave),其時脈處於Lo準位時的最長持續(xù)時間不得超越限制,以免因為長時間處在Lo準位,而致收發(fā)兩端時序脫軌(失去同步,造成後續(xù)誤動作)。
還有,I2C與SMBus在準位的上升時間、下降時間等也有不同的細部要求,此點必要時也必須進行確認,或在驗證過程中稍加留意。
▲圖說:Smart Battery或ACPI的實現(xiàn)、監(jiān)督、與操控,最底層都需要SMBus(圈處)作為後援,圖為簡易的多組式智慧型電池系統(tǒng),圖中有Smart Battery A、B兩組電池。(圖/SBS-Forum.org)
「已妥」與「未妥」機制的強制性差別
不單是電氣、時序有別,更高層次的協(xié)定機制也有不同。在I2C中,主控端要與受控端通訊前,會在匯流排上廣播受控端的位址資訊,每個受控端都會接收到位址資訊,但只有與該位址資訊相切合的受控端會在位址資訊發(fā)佈完後發(fā)出「已妥」的回應(yīng)(Acknowledge;ACK),讓主控端知道對應(yīng)的受控端確實已經(jīng)備妥,可以進行通訊。
但是,I2C並沒有強制規(guī)定受控端非要作出回應(yīng)不可,也可以默不作聲,即便默不作聲,主控端還是會接續(xù)工作,開始進行資料傳遞及下達讀/寫指令,如此的機制在一般運用中還是可行,但若是在一些即時(Real Time)性的應(yīng)用上,任何的動作與機制都有一定的時限要求,這種可有可無式的回應(yīng)法就會產(chǎn)生問題,可能會導(dǎo)致受控端無法接收資訊。
相同的情形,在SMBus上是不允許受控端在接收位址資訊後卻不發(fā)出回應(yīng),每次都要回應(yīng),為何要強制回應(yīng)?其實與SMBus的應(yīng)用息息相關(guān),SMBus上所連接的受控裝置有時是動態(tài)加入、動態(tài)移除的,例如換裝一顆新電池,或筆記型電腦接上船塢埠等,如果接入的裝置已經(jīng)改變卻不回應(yīng),則主控端的程式所掌握的並非是整體系統(tǒng)的最新組態(tài),就會造成誤動作。
類似的情形也適用於ACPI,PC機內(nèi)機外經(jīng)常有一些裝置可動態(tài)增入、移除,如機內(nèi)風(fēng)扇、外接印表機等,這些也一樣該強制對主控端廣發(fā)的位址資訊作出完整回應(yīng)。
位址動作方面有異,資料傳輸方面也有異。在I2C方面,Slave雖然對Master所發(fā)出的位址作出回應(yīng),但在後續(xù)的資料傳遞中,可能因某些事務(wù)必須先行處理、因應(yīng)而無法持續(xù)原有的傳輸,這時候Slave就要對Master發(fā)出「未妥」的回應(yīng)(Not Acknowledge;NACK),向Master表示Slave正為他務(wù)忙碌中。
而SMBus方面,與I2C相同的,會以NACK的回訊向Master表達Slave尚未收妥傳遞的資訊,但是SMBus的Slave會在後續(xù)的每個Byte傳輸中都發(fā)出NACK回訊,這樣設(shè)計的原因是因為SMBus沒有其他可向Master要求重發(fā)(Resend)的表示法。更直接說就是:NACK機制是SMBus標準中的強制必備,任何的訊息傳遞都很重要,不允許有漏失。
▲圖說:I2C在完成一段位址或資料資訊的傳輸後,受接端可發(fā)出訊息收妥(ACK)、未妥(NACK)的回應(yīng),SMBus也具相同的機制,但由於應(yīng)用之故有更強制的回應(yīng)要求。(圖/Semiconductors.Philips.com)
傳輸協(xié)定的子集、超集
互動知會機制上有強制與否的差別,協(xié)定方面也是。SMBus的通訊協(xié)定與協(xié)定中所用的訊息格式,其實只是取自I2C規(guī)範中,對於資料傳輸格式定義中的子集合(Subset)而已。所以,如果將I2C與SMBus交混連接,則I2C裝置在存取SMBus裝置時,只能使用SMBus範疇的協(xié)定與格式,若使用I2C的標準存取方式反而無法正確存取。
另外,I2C規(guī)範中有一種稱為「General Call」的廣呼方式,當發(fā)出「0000000」的位址資訊後,所有I2C上的Slave裝置統(tǒng)統(tǒng)要對此作出反應(yīng),此機制適合用在Master要對所有的Slave進行廣播性訊息更新與溝通上,是一種總體、批次的運作方式。
SMBus一樣有General Call機制,但在此之外SMBus還多了一種特用的ALERT(警訊)機制,不過這必須於時脈線與資料線外再追加一條線(稱為:SMBSUS)才能實現(xiàn),ALERT雖名為警訊但其實是中斷(Interrupt)的用意,Slave可以將SMBSUS線路的電位拉低(ALERT#,#表示低準位有效),這時就等於向Master發(fā)出一個中斷警訊,要求Master儘速為某一Slave提供傳輸服務(wù)。
Master要回應(yīng)這個服務(wù)要求,是透過I2C/SMBus的時脈線與資料線來通訊,但要如何知道此次的通訊只是Master對Slave的一般性通訊?還是特別針對Slave的中斷需求而有的服務(wù)回應(yīng)?
這主要是透過Master發(fā)出的位址資訊來區(qū)別,若為回應(yīng)中斷的服務(wù),位址資訊必然是「0001100」,當Slave接收到「0001100」的位址資訊,就知道這是Master特為中斷而提供的服務(wù)通訊。
因此,韌體工程師須留心,規(guī)劃時必須讓所有的Slave都不能佔用「0001100」這個位址,以供ALERT機制運用(當然!若現(xiàn)在與未來都不會用上ALERT機制則可儘管佔用)。事實上各種進階的規(guī)範標準(如Smart Battery、ACCESS.bus、VESA DDC等)都在I2C的短定址中訂立了一些為自用而保留的位址,這在最初設(shè)計與定義時就該有所留意,以免因先行佔用而導(dǎo)致日後須改寫韌體的麻煩。
補充提醒的是,SMBSUS一樣是開集極外加提升電阻的線路,所以有一個Slave將電位拉下後,其餘Slave偵測到電位被拉下,表示已有Slave正在與Master進行中斷需索與回應(yīng)服務(wù),須等待搶到中斷服務(wù)權(quán)的Slave確實被服務(wù)完畢,重新將SMBSUS釋放回高準位後,才能持續(xù)以「看誰能先將線路準位拉低?」的方式來爭取中斷服務(wù)。
最後,若有進一步興趣的讀者,筆者建議可參考兩份資料:
1.SMBus 2.0版規(guī)範(SMBus規(guī)格網(wǎng)站)
http://www.smbus.org/specs/smbus20.pdf
2.比較I2C與SMBus(MAXIM公司網(wǎng)站)
HTML版:http://www.maxim-ic.com/appnotes.cfm/appnote_number/356
PDF版:http://pdfserv.maxim-ic.com/en/an/AN356.pdf
▲圖說:MAXIM公司的MAX6641晶片之典型應(yīng)用方式,圖左為溫度感測電路,圖右上為風(fēng)扇轉(zhuǎn)速控制電路,圖右圈處即是SMBus介面電路。(圖/MAXIM-IC.com)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -