1.概述:
系統管理總線是一種兩線制接口。它基於I2C 總線原理演變而來,可以認為是簡化版的I2C總線。
SMBus最初
是應用到
智能電池,如電池充電器和一個微控制器。其提供一個系統和電源管理相關的任務控制總線。如今,SMBus總線可以連接的設備類型更多樣化,包括與電源相關的設備,系統的傳感器,EEPROM的容量等設備的信息通信。
SMBus體現在OSI模型的下三層:物理,數據鏈路,網絡。物理層定義了了SMBus的電氣特性;數據鏈路層部分規范化位、字節的數據傳輸,仲裁和時鍾信號;網絡層處理處理SMBus地址解析協議和總線數據傳輸協議。
2.通用特性:
1)物理層:
DC特性:
AC特性:
2)數據鏈路層:
按通用思想,使用電平的高低代表邏輯的0和1:
數據有效性:數據必須在時鍾的高電平周期保持穩定,數據的狀態只能在時鍾低電平的情況下才能改變;
開始和停止條件(與I2C相同):
在SMBCLK 線是高電平時,SMBDAT 線從高電平向低電平切換,表示數據傳輸開始;
當SMBCLK 線是高電平時,SMBDAT 線由低電平向高電平切換,表示數據傳輸停止;
總線空閑:
SMBCLK 和SMBDAT 線都處於高電平期間,總線空閑。
數據傳輸:
數據傳輸以字節為單位,傳輸的字節數量不限,但是每個字節后必須緊跟一個ACK響應。
首先傳輸的是數據的最高位MSB。
我們知道在I2C協議中存在clock stretching特性:當一組數據傳輸完成,接收器也回傳ACK信號后,如果接
收器需要一段時間來儲存收到的數據,則可以利用控制SCL引腳為低電平的方式——將SCL維持為低電平,
直到接收器能夠接受下一組數據為止(所以也可以理解為什么I2C的CLK為雙向的原因)。
那么同樣在SMBus總線中也存在這樣的功能:從機要完成一些其他功能(例如一個內部中斷服務程序) 后,才能接收或發送下一個完整的數據字節,可以使時鍾線SCL 保持低電平,迫使主機進入等待狀態,當從
機准備好接收下一個數據字節並釋放時鍾線SCL 后,數據傳輸繼續。
3)網絡層:
模型:
支持SMBus的主、從器件。
從器件會被分配給唯一的地址,但有些地址是被協議保留,不能再分配給任何器件的,它們如下圖所示:
總線協議:
下面已寫、讀字節/字為例,描述具體的協議過程:
寫字節/字:
主器件在發送完從器件地址(Slave Address)后,發送寫入位(Wr)。從器件響應ACK。主器 件再次發命令碼
(Command Code),從器件再次確認ACK,主機發送數據字節或字(低字節在前)。 從器件ACK 每一個字
節,整個傳輸在停止條件后結束。
讀字節/字:
件 將返回一或兩個字節的數據。重發起始信息之沒有停止位,在讀完成后主器件要發NACK。
SMBus協議還支持塊的讀寫操作,在Command Code后加需要讀寫的字節數目:
3)SMBus的可選信號:
SMBSUS#信號:
系統進入待機模式時,SMBSUS#變低。待機模式是指當大部分設備休眠或斷電時一個低功率模式。一旦恢
復,SMBSUS#電平拉高。之后,所有設備回到運行狀態。
SMBALERT#:
該引腳連接至主器件,作為中斷信號線使用。
多個從器件可以通過線與連接至一個主器件引腳,系統通過仲裁決定從地址通信的權利。
4)I2C與SMBus的區別:
DC spec:
I2C的Hi/Lo邏輯准位有兩種認定法:相對認定與絕對認定,相對認定是依據Vdd的電壓來決定,Hi為
0.7 Vdd,Lo為0.3 Vdd,絕對認定則與TTL准位認定相同,直接指定Hi/Li電壓,Hi為3.0V,Lo為1.5V。
SMBus只有絕對認定,Hi為2.1V,Lo為0.8V,與I2C有部分交集。不過,SMBus后來也增訂一套更低電壓的准
位認定,Hi為1.4V,Lo為0.6V,這是為了讓運用SMBus的裝置能更省成本而有的作法。
電流:
SMBus在低功耗的表現方面優於I2C。
I2C 指定連接到總線上的每個設備的最最大漏電流為10 微安。SMBus 1.0 版本規定的最大漏電流為1 微
安。為減低SMBus 設備測試成本SMBus 1.1 版本規定要求放寬至5 微安。
相比於I2C對於總線電容的限制,SMBus並沒有對此做任何規定。但是它指出了IPULLDOWN 的最大電流是
350uA。那么可以計算出VDD=3.3V時,電阻值應大於9.4K。
頻率:
I2C提供了兩種操作模式,標准模式(100 KHz)和快速模式(400 KHz);
SMBus的時鍾頻率在10KHz~100KHz之間。
時序:
I2C對信號的時序並沒有強制的要求;
I2C對信號的時序並沒有強制的要求;
SMBus規定了數據的setuptime、holdtime必須滿足一定的條件(參見上面SMBus的AC標准);
ACK與NACK
通常情況下,I2C協議中,主控端發送端(主控端)要與接收端(受控端)通訊前,會在總線上廣播受控端的地址 信息,每個接收端都會接收到地址信息,但只有與該地址信息相切合的接收端會在地址信息發布完后發出 「已妥」的回應(Acknowledge;ACK),讓發送端知道對應的接收端確實已經備妥,可以進行通訊。
但是,I2C並沒有強制規定接收端非要做出響應不可,也可以默不作聲,即便默不作聲,發送端還是會繼續
工作,開始進行數據傳遞及下達讀/寫指令,如此的機制在一般運用中還是可行,但若是在一些實時 (Real Time)性的應用上,任何的動作與機制都有一定的時限要求,這種可有可無式的響應法就會產生問 題,可 能會導致受控端無法接收信息。 相同的情形,在SMBus上是不允許接收端在接收地址信息后卻不發 出回應,每次都要回應,為何要強制回應? 其實與SMBus的應用息息相關,SMBus上所連接的受控裝置有 時是動態加入、動態移除的,例如換裝一顆新 電池,或筆記本電腦接上DOCK PORT等,如果接入的裝置已 經改變卻沒有回應,則主控端的程序所掌握的並 非是整體系統的最新組態,就會造成誤動作。
SMBus協議的格式屬於I2C定義格式中的子集。I2C可以通過SMBus協議訪問與SMBus兼容的設備。
參考資料:
1)SMBus系統管理總線;
2)https://www.kernel.org/doc/Documentation/i2c/smbus-protocol;
轉載自:http://blog.sina.com.cn/s/blog_a438e5290102w4df.html