Archive for the Battery Category

Note: Multi Batteries on Windows XP

Posted in ACPI, Battery, BIOS on 2011 年 07 月 29 日 by Kun-Yi

最近的案子有個 Dual Batteries 的需求, Battery 是設計由 EC  透過 ACPI Control method Battery 去report 給OS

基本行為是當A, B 兩顆電池同時存在時, 會先優先放電 B電池, 當B電池將到0%時, EC將會切換 放電路徑到A電池

而這個Issues 發生在當一切換電池時, OS就會發生 Crisis Battery Level Event(系統是設定 10%為Low Battery Level, 3%是Crisis Battery Level), 而此時A電池仍然為滿電力狀態. 但是確一直發生 Crisis Battery Event.

經查 ACPI 的ASL code 發現當 Battery Status change的 QEvent 發生, ASL將 Notify (\_SB.BATx, 0x80), Notify(\_SB.BATx, 0x81), Notify (\_SB.BATx, 0x80), 跟據 ACPI 4.0 spec. 指出 0x81的notify 是 Battery Information Change, 應該當Battery Replace才發生, 在XP下時, OS會因為該Event 重新抓取 Battery information 但也因此會發生 Crisis Event, 但當系統是單Battery時, 該Event並不會觸發 Crisis Battery Event. 解決之道有幾種方法, 將Battery Replace的Event重新指定另一個QEvent, 也可以在ASL中, 去儲存Battery 的Exist與否, 當狀態改變後在發出 0x81的 Notify code.

上述問題經測試在 Windows 7 上並未發生, 看來Microsoft 有改過一些OS Driver的行為模式

廣告