本文主要介紹SMBus總線。 ? SMBus(System Management Bus)是Intel與Duracell(金頂電池)共同制定的接口,首版于1995年發(fā)表,參考I2C接口。
SMBus是一種二線制串行總線(還有兩根可選信號(hào)線SMBSUS#(系統(tǒng)低功耗掛起狀態(tài)指示)、SMBALERT#(事件提醒)),它大部分基于I2C總線規(guī)范。和I2C一樣,SMBus可以不增加額外引腳,創(chuàng)建該總線主要是為了增加新的功能特性,支持低功耗和高功耗兩種模式,其總線速率支持100kHz、400kHz、1MHz。它工作在主/從模式:主器件提供時(shí)鐘,在其發(fā)起一次傳輸時(shí)提供一個(gè)起始位,在其終止一次傳輸時(shí)提供一個(gè)停止位;從器件擁有一個(gè)唯一的7位或10位從器件地址。
SMBus和I2C的主要區(qū)別如下(主要區(qū)別詳見(jiàn)SMBus Specification Appendix B):
總線電源VDD:I2C沒(méi)定義,SMBus為1.8~5V。
閾值電壓VIL、VIH、VHYS、VOL、IOL、ILEAK_BUS不同;
最小總線速率(Bus Speed):I2C沒(méi)有最低總線速率要求,SMBus要求最低總線速率不能低于10kHz;
SMBus一定要維持10kHz以上的運(yùn)作頻率,主要是為了管理監(jiān)控,只要在保持一定傳速運(yùn)作的情況下加入參數(shù),就可輕松獲知總線目前是否處于閑置(Idle)中,省去逐一偵測(cè)傳輸過(guò)程中的停斷(STOP)信號(hào),或持續(xù)保有停斷偵測(cè)并輔以額外參數(shù)偵測(cè),如此對(duì)總線閑置后的再取用會(huì)更有效快速。
最大時(shí)鐘拉伸(ClockStretching):tTIMEOUT、tHIGH、tLOW:SEXT、tLOW:MEXT、tOF、tF、tPOR;
設(shè)備地址應(yīng)答:I2C不要求設(shè)備一定要能應(yīng)答自身地址,而SMBus要求每次收到自身地址后都要有應(yīng)答;
I2C并沒(méi)有強(qiáng)制規(guī)定發(fā)送端在發(fā)送接收端地址后接收端非要做出響應(yīng)不可,也可以默不作聲,即便默不作聲,發(fā)送端還是會(huì)繼續(xù)工作,開(kāi)始進(jìn)行數(shù)據(jù)傳輸及讀/寫(xiě)指令;
SMBus是不允許接收端在接收到自身地址信息后卻不發(fā)出ACK回應(yīng)。因?yàn)镾MBus上所連接的受控裝置有時(shí)是動(dòng)態(tài)加入、動(dòng)態(tài)移除的,例如換裝一顆新電池,或筆記本電腦接上DOCK PORT等,如果接入的裝置已經(jīng)改變卻沒(méi)有回應(yīng),則發(fā)送端的程序所掌握的并非是整體系統(tǒng)的最新組態(tài),就會(huì)造成誤動(dòng)作。
以上是一些簡(jiǎn)單的區(qū)別,下面從兩種總線的應(yīng)用背景、版本演進(jìn)、電氣特性差異、時(shí)序差別、已妥與未妥機(jī)制的強(qiáng)制性差別、傳輸協(xié)議的子集和超集等方面進(jìn)行詳細(xì)的對(duì)比。
應(yīng)用背景、版本演變
首先從規(guī)格的制訂背景開(kāi)始,I2C是在設(shè)計(jì)電視應(yīng)用時(shí)所研發(fā)的接口,首版于1992年發(fā)表;而SMBus(System Management Bus)則是Intel與Duracell(金頂電池)共同制訂筆記本電腦所用的智能型電池(SmartBattery)時(shí)所研發(fā)的接口,首版于1995年發(fā)表,不過(guò)SMBus文件中也提及,SMBus確實(shí)是參考自I2C,并以I2C為基礎(chǔ)所衍生成。
I2C起源于電視設(shè)計(jì),但之后朝通用路線發(fā)展,各種電子設(shè)計(jì)都有機(jī)會(huì)用到I2C;而SMBus則在之后為PC所制定的先進(jìn)組態(tài)與電源管理接口(Advanced Configuration & Power Interface;ACPI)規(guī)范中成為基礎(chǔ)的管理訊息傳遞接口、控制傳遞接口。
雖然I2C與SMBus先后制訂時(shí)間不同,但都在2000年左右進(jìn)入成熟化改版,I2C的過(guò)程改版以加速為主要訴求,而SMBus以更切合Smart Battery及ACPI的需求為多。
I2C三次主要改版:
1992年V1.0
1998年V2.0
2000年V2.1
SMBus三次主要改版:
1995年V1.0
1998年V1.1
2000年V2.0
電氣特性差異
I2C的Hi/Lo邏輯電平有兩種認(rèn)定法:相對(duì)認(rèn)定與絕對(duì)認(rèn)定,相對(duì)認(rèn)定是依據(jù)Vdd的電壓來(lái)決定,Hi為0.7Vdd,Lo為0.3Vdd,絕對(duì)認(rèn)定則與TTL準(zhǔn)位認(rèn)定相同,直接指定Hi/Li電壓,Hi為3.0V,Lo為1.5V。相對(duì)的SMBus只有絕對(duì)認(rèn)定,且電平與I2C有異,Hi為2.1V,Lo為0.8V,與I2C不全然吻合但也算部分交集。
不過(guò),SMBus后來(lái)也增定一套更低電壓的電平標(biāo)準(zhǔn),Hi為1.4V,Lo為0.6V,這是為了讓運(yùn)用SMBus的裝置能更省成本的做法。
了解電壓后再來(lái)看電流,由于SMBus一開(kāi)始就是運(yùn)用在筆記本電腦內(nèi),所以省電的表現(xiàn)優(yōu)于I2C,只需100uA就能維持工作,I2C卻要到3mA同樣的低用電特性也反應(yīng)在漏電流(Leakage Current)的要求上,I2C最大的漏電流為10uA,SMBus為1uA,但是1uA似乎過(guò)度嚴(yán)苛,使運(yùn)用SMBus的裝置在驗(yàn)證測(cè)試時(shí)耗費(fèi)過(guò)多的成本與心力,因此之后的SMBus V1.1版放寬了漏電流上限,最高可至5uA。
再者是相關(guān)限制,I2C有線路電容的限制,SMBus卻沒(méi)有,但也有相類似的配套規(guī)范,即是電平下拉時(shí)的電流限制,當(dāng)SMBus的集電極開(kāi)路Pin導(dǎo)通而使線路接地時(shí),流經(jīng)接地的電流不能高于350uA,另上電流(即相同的集電極開(kāi)路Pin開(kāi)路時(shí))也一樣有規(guī)范,最小不低于100uA,最高也是不破350uA的。
既然對(duì)電流有限制,那么也可容易地推斷對(duì)上拉電阻的阻值之范圍要求,I2C在5V Vdd時(shí)當(dāng)大于1.6kohm,在3V Vdd時(shí)當(dāng)大于1kohm,類似的SMBus于5V Vdd時(shí)當(dāng)大于14kohm,3V Vdd時(shí)當(dāng)大于8.5kohm,不過(guò)這個(gè)定義并非牢不可破,就一般實(shí)務(wù)而言,在SMBus上也可用2.4k~3.9kohm范疇的阻值。
附注:I2C的時(shí)鐘線稱SCK或SCL,數(shù)據(jù)線稱SDA。SMBus的時(shí)鐘線稱SMBCLK,數(shù)據(jù)線稱SMBDAT。
I2C與SMBus在邏輯電平的電壓定義不盡相同,基本上I2C的定義較為寬裕、彈性,而SMBus則更專注在省電方面的要求。
? 時(shí)序差別與考驗(yàn)
物理層面的空間要求完后,再來(lái)就是物理層面的時(shí)間,即是時(shí)序(Timing)方面的差別。
先以運(yùn)作頻率來(lái)說(shuō),I2C此方面相當(dāng)寬裕,最低頻可至0Hz(直流狀態(tài),等于時(shí)間暫停),高可至100kHz(Standard Mode)、400kHz(Fast Mode)、乃至3.4MHz(High Speed Mode),相對(duì)的SMBus就很局限,最慢不慢于10kHz,最快不快于100kHz。很明顯的,I2C與SMBus的交集運(yùn)作頻率即是10kHz?100kHz間。
用于筆記本電腦的電池管理或PC組態(tài)管理、用電管理的SMBus,很容易體會(huì)不需要更高運(yùn)作頻率的理由,只要傳遞小數(shù)據(jù)量的監(jiān)督信息、控制指令本就不用過(guò)于高速,而朝向廣泛運(yùn)用的I2C自然希望用更高的傳輸以應(yīng)對(duì)各種可能的需求。然而大家可能會(huì)疑惑,為何SMBus有最低速的要求?何不放寬到與I2C相同的無(wú)最低速限制呢?
SMBus一定要維持10kHz以上的運(yùn)作頻率,主要也是為了管理監(jiān)控,另一個(gè)用意是只要在保持一定傳速運(yùn)作的情況下加入?yún)?shù),就可輕松獲知總線目前是否處于閑置(Idle)中,省去逐一偵測(cè)傳輸過(guò)程中的停斷(STOP)信號(hào),或持續(xù)保有停斷偵測(cè)并輔以額外參數(shù)偵測(cè),如此對(duì)總線閑置后的再取用會(huì)更有效快速。
傳速要求之后還有數(shù)據(jù)保持時(shí)間(Data Hold Time)的要求,SMBus規(guī)定SMBCLK線路的電平下降后,SMBDAT上的數(shù)據(jù)必須持續(xù)保留300nS,但I(xiàn)2C 卻沒(méi)有對(duì)此有相同的強(qiáng)制要求。
類似的,SMBus對(duì)接口被重置(Reset)后的恢復(fù)時(shí)間(Timeout)也有要求,一般而言是35mS,I2C這方面亦無(wú)約束,可以任意延長(zhǎng)時(shí)間。相同的SMBus也要求無(wú)論是在主控端(Master)或受控端(Slave),其頻率處于Lo電平時(shí)的最長(zhǎng)持續(xù)時(shí)間不得超越限制,以免因?yàn)殚L(zhǎng)時(shí)間處在Lo準(zhǔn)位,而致收發(fā)兩端時(shí)序脫軌(失去同步,造成后續(xù)誤動(dòng)作)。
還有,I2C與SMBus在信號(hào)的上升時(shí)間、下降時(shí)間等也有不同的細(xì)節(jié)要求,此點(diǎn)必要時(shí)也必須進(jìn)行確認(rèn),或在驗(yàn)證過(guò)程中稍加留意。
Smart Battery或ACPI的實(shí)現(xiàn)、監(jiān)督、與操控,最底層都需要SMBus(圈處)作為后援,圖為簡(jiǎn)易的多組式智能型電池系統(tǒng),圖中有Smart Battery A、B兩組電池。
? 已妥和未妥機(jī)制的強(qiáng)制性差別
不單是電氣、時(shí)序有別,更深層次的協(xié)議機(jī)制也有不同。在I2C中,主控端發(fā)送端(主控端)要與接收端(受控端)通訊前,會(huì)在總線上廣播受控端的地址信息,每個(gè)接收端都會(huì)接收到地址信息,但只有與該地址信息相切合的接收端會(huì)在地址信息發(fā)布完后發(fā)出「已妥」的回應(yīng)(Acknowledge;ACK),讓發(fā)送端知道對(duì)應(yīng)的接收端確實(shí)已經(jīng)備妥,可以進(jìn)行通訊。
但是,I2C并沒(méi)有強(qiáng)制規(guī)定接收端非要做出響應(yīng)不可,也可以默不作聲,即便默不作聲,發(fā)送端還是會(huì)繼續(xù)工作,開(kāi)始進(jìn)行數(shù)據(jù)傳遞及下達(dá)讀/寫(xiě)指令,如此的機(jī)制在一般運(yùn)用中還是可行,但若是在一些實(shí)時(shí)(Real Time)性的應(yīng)用上,任何的動(dòng)作與機(jī)制都有一定的時(shí)限要求,這種可有可無(wú)式的響應(yīng)法就會(huì)產(chǎn)生問(wèn)題,可能會(huì)導(dǎo)致受控端無(wú)法接收信息。
相同的情形,在SMBus上是不允許接收端在接收地址信息后卻不發(fā)出回應(yīng),每次都要回應(yīng),為何要強(qiáng)制回應(yīng)?其實(shí)與SMBus的應(yīng)用息息相關(guān),SMBus上所連接的受控裝置有時(shí)是動(dòng)態(tài)加入、動(dòng)態(tài)移除的,例如換裝一顆新電池,或筆記本電腦接上DOCK PORT等,如果接入的裝置已經(jīng)改變卻沒(méi)有回應(yīng),則主控端的程序所掌握的并非是整體系統(tǒng)的最新組態(tài),就會(huì)造成誤動(dòng)作。
類似的情形也適用于ACPI,PC機(jī)內(nèi)機(jī)外經(jīng)常有一些裝置可動(dòng)態(tài)插入、移除,如機(jī)內(nèi)風(fēng)扇、外接打印機(jī)等,這些也一樣該強(qiáng)制對(duì)主控端群發(fā)(廣播)的地址信息作出完整響應(yīng)。
地址動(dòng)作方面有異,數(shù)據(jù)傳輸方面也有異。在I2C方面,Slave雖然對(duì)Master所發(fā)出的地址作出響應(yīng),但在后續(xù)的數(shù)據(jù)傳遞中,可能因某些事務(wù)必須先行處理、因應(yīng)而無(wú)法持續(xù)原有的傳輸,這時(shí)候Slave就要對(duì)Master發(fā)出「未妥」的回應(yīng)(Not Acknowledge;NACK),向Master表示Slave正為他務(wù)忙碌中。
而SMBus方面,與I2C相同的,會(huì)以NACK的回訊向Master表達(dá)Slave尚未收妥傳遞的信息,但是SMBus的Slave會(huì)在后續(xù)的每個(gè)Byte傳輸中都發(fā)出NACK回信,這樣設(shè)計(jì)的原因是因?yàn)镾MBus沒(méi)有其他可向Master要求重發(fā)(Resend)的表示法。更直接說(shuō)就是:NACK機(jī)制是SMBus標(biāo)準(zhǔn)中的強(qiáng)制必備,任何的訊息傳遞都很重要,不允許有漏失。
I2C在完成一段地址或數(shù)據(jù)信息的傳輸后,接收端可發(fā)出收妥(ACK)、未妥(NACK)的響應(yīng),SMBus也具相同的機(jī)制,但由于應(yīng)用之故有更強(qiáng)制的回顯請(qǐng)求。
? 傳輸協(xié)議的子集和超集
互動(dòng)知會(huì)機(jī)制上有強(qiáng)制與否的差別,協(xié)議方面也是。SMBus的通訊協(xié)議與協(xié)議中所用的訊息格式,其實(shí)只是取自I2C規(guī)范中,對(duì)于數(shù)據(jù)傳輸格式定義中的子集合(Subset)而已。所以,如果將I2C與SMBus交混連接,則I2C裝置在存取SMBus裝置時(shí),只能使用SMBus范疇的協(xié)議與格式,若使用I2C的標(biāo)準(zhǔn)存取方式反而無(wú)法正確存取。
另外,I2C規(guī)范中有一種稱為’General Call’的廣呼方式,當(dāng)發(fā)出’0000000’的地址信息后,所有I2C上的Slave裝置統(tǒng)統(tǒng)要對(duì)此作出反應(yīng),此機(jī)制適合用在Master要對(duì)所有的Slave進(jìn)行廣播性訊息更新與溝通上,是一種總體、批次的運(yùn)作方式。
SMBus一樣有General Call機(jī)制,但在此之外SMBus還多了一種特有的ALERT機(jī)制,不過(guò)這必須于頻率線與數(shù)據(jù)線外再追加一條線(稱為:SMBSUS)才能實(shí)現(xiàn),ALERT雖名為警告但其實(shí)是中斷(Interrupt)的用意,Slave可以將SMBSUS線路的電位拉低(ALERT#,#表示低電平有效),這時(shí)就等于向Master發(fā)出一個(gè)中斷警訊,要求Master盡速為某一Slave提供傳輸服務(wù)。
Master要響應(yīng)這個(gè)服務(wù)要求,是透過(guò)I2C/SMBus的頻率線與數(shù)據(jù)線來(lái)通訊,但要如何知道此次的通訊只是Master對(duì)Slave的一般性通訊?還是特別針對(duì)Slave的中斷需求而有的服務(wù)響應(yīng)?
這主要是透過(guò)Master發(fā)出的地址信息來(lái)區(qū)別,若為回應(yīng)中斷的服務(wù),地址信息必然是’0001100’,當(dāng)Slave接收到’0001100’的地址信息,就知道這是Master特為中斷而提供的服務(wù)通訊。
因此,軟件工程師須留心,規(guī)劃時(shí)必須讓所有的Slave都不能占用’0001100’這個(gè)地址,以供ALERT機(jī)制運(yùn)用(當(dāng)然!若現(xiàn)在與未來(lái)都不會(huì)用上ALERT機(jī)制則可盡管占用)。事實(shí)上各種進(jìn)階的規(guī)范標(biāo)準(zhǔn)(如SmartBattery、ACCESS.bus、VESA DDC等)都在I2C的短尋址中訂立了一些為自用而保留的地址,這在最初設(shè)計(jì)與定義時(shí)就該有所留意,以免因先行占用而導(dǎo)致日后須改寫(xiě)軟件的麻煩。
補(bǔ)充提醒的是,SMBSUS一樣是開(kāi)集電極外加上拉電阻的線路,所以有一個(gè)Slave將電位拉下后,其余Slave偵測(cè)到電位被拉下,表示已有Slave正在與Master進(jìn)行中斷需索與響應(yīng)服務(wù),須等待搶到中斷服務(wù)權(quán)的Slave確實(shí)被服務(wù)完畢,重新將SMBSUS釋放回高電平后,才能持續(xù)以「看誰(shuí)能先將線路電平拉低?」的方式來(lái)爭(zhēng)取中斷服務(wù)。
?
???
審核編輯:劉清
評(píng)論
查看更多