EC 所需知識 - SMBUS
EC 所需知識
軟體工程師的第一步,先把相關的規範(Specification)了解清楚,就像開發一套軟體之前要先了解需求,才能做出一套符合需求的體。相同的EC工程師就是需要把 LPC / SMBUS / PS2 / Smart Battery 的相關知識,清楚明瞭再進下一步。
SMBUS
SMBus [System Management Bus] 是由Intel所制訂的,主要由兩條線組成,其一為CLOCK線,另一條為DATA線。其作用是讓系統監控者透過SMBus來蒐集系統上裝置的資訊如電池的容量、CPU的溫度等,讓系統監控者可以依照所得的資訊通知作業系統做電源管理的處理。在筆記型電腦系統中的ACPI-EC為SMBus的主控者 [Host] 來蒐集SMBus上的裝置資訊回報給作業系統,讓作業系統依使用者的設定做系統電源的管理。
SMBus相關的規格包含SMBus、Smart Selector、Smart Charger及Smart Battery都是ACPI-EC工程師需要瞭解的規格,以下的章節將會詳盡的介紹各個規格的資訊。
- SMBUS Specification
- Hardware Define
SMBUS 的硬體線路 –SMBUS由二條線所組成,所有的SMBUS的裝置都並聯在SMBUS上,因此,SMBUS上的所有裝置都需要使用Open collection 或者 Open drain才允許跨接在SMBUS上面,因此線路上必須加上提升電阻來確認SMBUS上的訊號可以正確無誤的傳遞。
如同上圖,有時侯 SMBUS 上會有不同 VDD 的裝置,所以一般在輸入接腳會加稽納二極體保護裝置。不過大部分的作法,會使用電壓緩衝IC來處理不同電壓的 I2C 裝置。
- SMBUS電氣上的要求
名稱
|
說明
|
值域
|
單位
| |
下限
|
上限
| |||
VIL
|
輸入低電位
|
0.8
|
V
| |
VIH
|
輸入高電位
|
2.1
|
VDD
|
V
|
VOL
|
輸出為低電位
|
0.4
|
V
| |
IPULLUP
|
提升電流值
|
100
|
350
|
uA
|
VDD
|
工作電壓
|
2.7
|
5.5
|
V
|
- SMBUS的時脈要求
名稱
|
說明
|
值域
|
單位
| |
下限
|
上限
| |||
FSMB
|
工作頻率
|
10
|
100
|
KHz
|
TBUF
|
SMBUS淨空閒置時間
|
4.7
|
us
| |
THD:DAT
|
資料穩定後需保持的時間
|
300
|
ns
| |
TSU:DAT
|
資料變動的時間
|
250
|
ns
| |
TTIMEOUT
|
取得時脈的時間限制
|
25
|
35
|
ms
|
TLOW
|
時脈為LOW的時間
|
4.7
|
us
| |
THIGH
|
時脈為HIGH的時間
|
4.0
|
50
|
us
|
TF
|
時脈及資料的下降時間
|
300
|
ns
| |
TR
|
時脈及資料的上升時間
|
1000
|
ns
|
- SMBUS針對熱插拔的裝置特別要求針對ESD加入保護線路
ESD的保護線路包含一個串接電阻及一個並接的電容,電阻的值域要小於1.1KΩ。在HOST端要有過電壓保護的稽納二極體。
- SMBUS的資料需在CLOCK高電位時前就要穩定下來,因為SMBUS是利用CLOCK在高電位時,讀取得資料。CLOCK低電位時,寫入資料供下個位元讀取。不過一般 IC 設計會在 Clock rising 時,讀取資料;在Clock falling 時,寫入新的資料。
- SMBUS傳輸資料的開始及結束訊號,開始訊號為CLOCK保持高電位,DATA由高電位轉為低電位。結束訊號為CLOCK保持高電位,DATA由低電位為轉為高電位。
- SMBUS傳遞的資料封包
SMBUS的資料封包由START -> DATA -> ACK -> … -> STOP結束。
若MASTER端傳送資料給SLAVE端的話,SLAVE端會把ACK拉LOW表示已收到資料,若MASTER端讀取SLAVE端資料的話,MASTER會把ACK拉LOW表示讀取成功。
- SMBUS的仲裁制度-
當有二個以上的MASTER位在同一個BUS上時,就容易發生在閒置的時間內,由二個以上的MASTER要傳送資料給SLAVE的衝突發生,此時的仲截會依序每個CLOCK檢查誰先由低電位轉成高電位就失去主導權。如圖在第三個CLOCK時,Tramsmitter由低電位轉為高電位而失去SMBUS的主導權。因此,SMBUS裝置的位址愈低表示權限愈高。
- SMBUS的每一個裝置都會有一個位址做為裝置的識別,BIT7-BIT1為SMBUS裝置位址,BIT0用來識別是讀取還是寫入。
- SMBUS的各種傳輸協定的封包
- Quick Command - 通常使用來掃描在SMBUS上的裝置位址。
- Send Byte - 通常用和 I2C 裝置溝通
- Recieve Byte - 通常用和 I2C 裝置溝通
- Write Byte
- Write Word
- Write Block
Smart Battery Selector Specification
Smart Battery Selector來選擇那一個電池來源來提供電力。下圖是一個完整的SMBUS裝置的方塊圖。
Smart Battery Selector的設計是以四個電池為極限來設計SMBUS的系統,並以A/B/C/D來命名四個電池。Smart Battery Selector只提供3個指令給HOST,以下針對每個指令說明:
- Command 0x01 – SelectorState [R/W]
- PRESENT – 表示系統上有多少電力來源
- CHARGE – 表示那個電池正在充電
- POWER_BY – 表示由那個電力來源提供系統電力
- SMB – 表示那個電池連接在系統的SMBUS上
- Command 0x02 – SelectorPreset [R/W]
- OK_TO_USE – 表示電池是好的
- USE_NEXT – 表示由那一個電池接續提供電力
- Command 0x04 – SelectorInfo [R]
欄位名稱
|
BIT
|
說明
|
電池數目
|
0-3
|
表示有幾個電池,每個BIT表示一個電池。
0001 – 表示一個電池
0011 – 表示二個電池
|
版本
|
4-7
|
表示Smart Selector的版本
0001 – version 1.0
0010 – version 1.1
0011 – version 1.1 with PEC檢測
|
充電指示
|
8
|
表示Smart Selector需不需送出電池充電狀態給Smart Charger.
0 – 表示不需要
1 – 表示需要
|
保留
|
9-15
|
Smart Battery Charger Specification
Smart Battery Charger就是提供Smart Battery充電的系統,依照其提供的功能不同可分為LEVEL2及LEVEL3兩種:
- LEVEL2 – Smart Battery Charger由Smart Host或Smart Battery經SMBUS提供充電電壓及電流給Smart Battery Charger,Smart Battery Charger調節其輸出來對電池充電。
- LEVEL3 - Smart Battery Charger可以和LEVEL2一樣由Smart Host或Smart Battery提供充電電壓及電流。也可以由Smart Battery Charger讀取Smart Battery的狀態自行決定充電的電壓及電流。
Smart Battery或Embedded Control都是經由SMBUS的指令去控制Smart Charger對Smart Battery充電,Smart Charger支援的標準指令如下:
- Command 0x11 – Charger Specification Information
取得Smart Charger的相關的資訊
Name
|
BIT
|
Value
|
CHARGE_SPEC
|
[3:0]
|
0001 – Version 1.0
0010 – Version 1.1
0011 – Version 1.1 with PEC
|
SELECTOR_SUPPORT
|
4
|
0 – Charger 不支援Selector 指令
1 –Charger 支援Selector 指令
|
- Command 0x12 – Smart Charger Mode
取得Smart Charger Mode的值。
Name
|
BIT
|
Value
|
INHIBIT_CHARGE
|
0
|
0 – 支援電池充電 [ power on default ]
1 – 停止支援電池充電
|
ENABLE_POLLING
|
1
|
0 – 不支援讀取電池資訊 [ LEVEL2 default ]
1 – 支援讀取電池資訊 [ LEVEL3 default ]
|
FOR_RESET
|
2
|
0 – 不變動 smart charger mode 的值
1 – 變動smart charger mode 成預設值
|
RESET_TO_ZERO
|
3
|
0 – 不變動電池的充電值 [ default ]
1 – 將電池的充電值都變成 0
|
- Command 0x13 – Charger Status
取得Smart Charger Status的值。
Name
|
BIT
|
Value
|
CHARGE_INHIBITED
|
0
|
0 – 支援電池充電
1 – 停止支援電池充電
|
POLLING_ ENABLED
|
1
|
0 – Smart Charger為Slave-Mode
1 – Smart Charger為Master-Mode
|
VOLTAGE_NOTREG
|
2
|
0 – 輸出電壓在範圍內
1 – 要求的充電電壓不符合要求
|
CURRENT_NOTREG
|
3
|
0 – 輸出電流在範圍內
1 – 要求的充電電流不符合要求
|
LEVEL2/3
|
[5:4]
|
01 – LEVEL2 Charger
11 – LEVEL3 Charger
|
CURRENT_OR
|
6
|
0 – 有效的充電電流值
1 – 無效的充電電流值
|
VOLTAGE_OR
|
7
|
0 – 有效的充電電壓值
1 – 無效的充電電壓值
|
RES_OR
|
8
|
0 – 電池的等效阻值在範圍內
1 – 電池的等效阻值 > 95KΩ
|
RES_COLD
|
9
|
0 –電池的等效阻值在範圍內
1 –電池的等效阻值 > 28.5KΩ
|
RES_HOT
|
10
|
0 –電池的等效阻值在範圍內
1 –電池的等效阻值 < 3.15KΩ
|
RES_UR
|
11
|
0 –電池的等效阻值在範圍內
1 –電池的等效阻值 < 575Ω
|
ALARM_INHIBITED
|
12
|
0 – Charger出問題時可發出ALARM
1 –禁止Charger發出ALARM給MASTER
|
POWER_FAIL
|
13
|
0 – 輸入電壓正常
1 – 輸入電壓太低
|
BATTERY_PRESENT
|
14
|
0 – 系統上沒有電池
1 – 系統上有電池
|
AC_PRESENT
|
15
|
0 – 系統上沒有可充電的電源
1 – 系統上有AC可充電的電源
|
- Command 0x14 – Charging Current
電池的充電電流,單位為mA
- Command 0x15 – Charging Voltage
電池的充電電壓,單位為 mV
- Command 0x16 – AlarmWarning
當Smart Battery或者 Embedded Control由Battery Status得知Smart Battery已經充飽或者發生不正常狀態,經由指令告知Smart Charger。
Smart Battery是用來收集電池內部的所有資訊經過SMBUS傳給系統的MASTER讓使用者可以知道電池的容量及相關的資訊。系統利用不同的SMBUS指令去取得電池的資料。標準的電池指令有:
- Command 0x00 – Manufacture Access
保留指令給電池製造商使用,可以進入及離開設定模式,修改電池的管理屬性以符合電 池的特性。
- Command 0x01 – Remaining Capacity Alarm
電池容量低於預計值之下,控制器就會把ALARM BIT設起來
- Command 0x02 – Remaining Time Alarm
電池可使用的時間低於預計值之下,控制器就會把ALARM BIT設起來
- Command 0x03 – Battery Mode
電池的工作模式
Name
|
BIT
|
Value
|
INTERNAL_CHARGE_CONTROLLER
|
0
|
0 – 電池沒有包含充電器的能力
1 – 電池包含充電器的能力
|
PRIMARY_BATTERY_SUPPORT
|
1
|
0 – 只能設定為主要的電池
1 – 可設定主要或次要的電池
|
CONDITION_FLAG
|
7
|
0 – 電池的使用次數依一般計數
1 – 電池的使用次數要符合要求才計數
|
CHARGE_CONTROLLER_ENABLED
|
8
|
0 – 關閉電池內部充電器
1 – 開起電池內部充電器
|
PRIMARY_BATTERY
|
9
|
0 – 設定為次要的電池
1 – 設定為主要的電池
|
ALARM_MODE
|
13
|
0 – 允許電池將ALARM傳給HOST
1 – 不允許電池將ALARM傳給HOST
|
CHARGE_MODE
|
14
|
0 – 允許電池將充電電壓及電流傳給CHARGER或者HOST
1 – 不允許傳送充電電壓及電流
|
CAPACITY_MODE
|
15
|
0 – 電池容量的計數單位為mAH
1 – 電池容量的計數單位為10mWH
|
- Command 0x04 – AtRate
計數電池容量的變化,單位分為電流(mA)或者電源(10mW)。
- Command 0x05 – AtRateTimeToFull
使用AtRate的值來推算,電池充到飽所需剩餘的時間。單位為分鐘。
- Command 0x06 – AtRateTimeToEmpty
使用AtRate的值來推算,電池放到空所剩餘的時間。單位為分鐘。
- Command 0x07 – AtRateOK
AtRate值等於0或者大於0的話為正值,反之為負值。
- Command 0x08 – Temperature
電池內部的絕對溫度值,單位為°K
- Command 0x09 – Voltage
電池的電壓值
- Command 0x0A – Current
電池的電流值
- Command 0x0B – Average Current
把前一分鐘內的電流值做平均
- Command 0x0C – MaxError
電池顯示容量和實際容量的最大誤差值。電池的實際容量落於顯示容量到顯示容量加上MaxError的範圍之內。是利用 Design Capacity 和 Last Fully Charger Capacity 的比率來計算的。
- Command 0x0D – Relative State Of Charge
Remaining Capacity 和 Fully Charge Capacity的百分比值
- Command 0x0E – Absolution State Of Charge
Reaming Capacity 和 Design Capacity的百分比值
- Command 0x0F – Remaining Capacity
電池現在的容量值
- Command 0x10 – Full Charge Capacity
電池充到飽的容量,每次電池放電時會重新計時其值,一般在電池放電到6%時會更新其正確值。
- Command 0x11 – Run Time To Empty
電池放電時,依據電流或功率損失值去計算電池剩餘的時間值。單位為 分鐘。
- Command 0x12 – Average Time To Empty
電池放電時,依據平均電流的值去計算電池剩餘的時間值。單位為分 鐘。
- Command 0x13 – Average Time To Full
電池充電時,依據平均電流的值去計算電池充至飽所需要的時間。
- Command 0x16 – Battery Status
電池的狀態。
Name
|
BIT
|
Value
|
OVER_CHARGE_ALARM
|
15
|
1 – 電池發生充電過頭而停止充電
|
TERMINATE_CHARGE_
ALARM
|
14
|
1 – 有停止充電的原因發生,電池停止充電
|
OVER_TEMP_ALARM
|
12
|
1 – 電池因溫度過高停止充電
|
TERMINATE_DISCHARGE_ALARM
|
11
|
1 – 有停止放電的原因發生,電池停止放電
|
REMAINING_CAPACITY_ALARM
|
9
|
1 – 電池的剩餘容量到達預設值而發生警告訊值
|
REMAINING_TIME_ALARM
|
8
|
1 – 電池的剩餘使用時間到達預設值而發生警告訊值
|
INITIAILIZED
|
7
|
1 – 電池初始化完成
|
DISCHARGING
|
6
|
1 – 電池正在放電
|
FULLY_CHARGED
|
5
|
1 – 電池充飽電
|
FULLY_DISCHARGED
|
4
|
1 – 電池的容量已被完成放空了
|
ERROR_CODE
|
[3:0]
|
0 – 沒有錯誤
1 – 電池正在收集內部資料
2 – 偵測到電池預留的指令
3 – 偵測到電池不支援的指令
4 – 被指定的資料只不支援寫入
5 – 電池的資料不在範圍之內
6 – 寫入的長度與規定不符
7 – 偵測到未知的錯誤
|
- Command 0x17 – Battery Cycle
電池使用的次數。電池放電放到幾乎為0,再回充的次數。
- Command 0x18 – Design Capacity
電池出廠時的標準容量。
- Command 0x19 – Design Voltage
電池出廠時的標準電壓值。鋰電池為其平均電壓,一般都位於一個CELL約3.6到3.7 Voltage
- Command 0x1A – Specification Information
電池的規格值
Name
|
BIT
|
Value
|
IPScale
|
[15:12]
|
Current Scale
|
VScale
|
[11:8]
|
Voltage Scale
|
Version
|
[7:4]
|
0001 – Version 1.0
0010 – Version 1.1
0011 – Version 1.1 with PEC
|
- Command 0x1B – Manufacture Data
生產日期
Name
|
BIT
|
Value
|
Year
|
[15:9]
|
0-127 [ Base 1980 ]
|
Month
|
[8:5]
|
1-12
|
Day
|
[4:0]
|
1-31
|
- Command 0x1C – Serial Number
電池的唯一識別碼
- Command 0x20 – Manufacture Name
電池製造商的名稱
- Command 0x21 – Device Name
電池的的裝置名稱
- Command 0x22 – Device Chemistry
電池的化學特性。例如:鋰或鎳氫電池
- Command 0x23 – Manufacturer Data
電池製造產生的資訊
您好請問用EC smbus 或南僑 smbus會有哪些差異呢?謝謝
回覆刪除作者已經移除這則留言。
回覆刪除