Разработка программы чтения по шине SMBus серийного номера батареи и числа циклов заряда батареи ноутбука.

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Ответить
Vishay
Сообщения: 12

Разработка программы чтения по шине SMBus серийного номера батареи и числа циклов заряда батареи ноутбука.

Сообщение Vishay »

Разработка программы чтения по шине SMBus серийного номера батареи и числа циклов заряда батареи ноутбука.


Hello, all !

Хочу написать программу на Си под Linux для считывания на моем ноутбуке ASUS A3500L серийного номера и числа циклов заряда батареи. У меня установлен на ноутбуке Debian/GNU Linux Sarge 31r2, ядро 2.6.8.
Я декомпилировал DSDT из BIOS моего ноутбука - там отсутствуют функции чтения серийного номера батареи и количество циклов заряда батареи.
В качестве прототипа будушей программы нашел в Интернете проаграмму smartbatt (автор Bruno Ducrot, www.poupinou.org ).
Проблема в том, что я не вижу в своей системе каталога /proc/bus/i2c, с которым работает программа smartbatt.c. В Readme пакета smartbatt сказано, что надо наложить приложенный в нем патч на ядро версии 2.6.10. Может быть, проблема в том, что у меня более старое ядро ?
Насколько я понял из исходников ядра 2.6.8, для того, чтобы выложить в каталог /proc/acpi/battery/BAT0/status (info) информацию о статусе батареи ( тукущее напряжение, емкость и тд.) система в исходниках ../driver/acpi/ имеет реализацию интерпретатора AML, который обрабатывает таблицу DSDT, считанную из BIOS, и на основе этих кодов AML взаимодействует по шине SMBUS c батареей.
Хотелось бы сделать программу ( не модифицируя DSDT и не занимаясь программированием ASL/AML), которая бы посылала запросы батарее на чтение ее параметров по шине SMBus по номерам, определенным в стандарте Smart Battery Data Specification.
Спасибо сказали:
Vishay
Сообщения: 12

Re: Разработка программы чтения по шине SMBus серийного номера батареи и числа циклов заряда батареи ноутбука.

Сообщение Vishay »

Здравствуйте.

Имеется ноутбук Asus A3500L со штатной батареей A42-A3 (4400 mAh ). На нем установлена в качестве второй ОС Linux. Слегка модифицировав драйверы батареи и embedding controller'a ( файлы battery.c и ec.c ) удалось получить в log - файле kernel.log процесс управления операционной системой embedding controller'ом, при котором система опрашивает батарею ноутбука в процессе заряд\разряда.

Файлы см. в attach'е.

Некоторые комментарии:

write: 17,18,09__________________read: 0F,C8 (=4040 dec )
>>>>>>>|
________design capacity

write: 17,10,09__________________read: 0E,26 (=3622 dec[3622/4040)
>>>>>>>|_________________________________54330/60600=89,7 %
________full charge capacity
write: 17,19,09__________________read: 39,D0
>>>>>>>| __________________________=14800 mV
________design voltage

write: 17,09,09__________________read: 3E,B8
>>>>>>>| __________________________present voltage=16056 mV
________voltage

write: 17,0F,09__________________read: 0D,D5 (=3541 dec )
>>>>>>>|
________remaining capacity__________________(3541/4040*60600=53115 mAh)

write: 17,16,09__________________read: 00,C0 (initialized&discarging)
>>>>>>>|
________battery status

write: 17,0A,09__________________read: FB,09 - 19050 mW - 1271 mA
>>>>>>>|__________________________FB,4F - 18000 mW - 1201 mA
________current

__________________________________(0-FB63)=49D=1181dec*18000/1201=17700 mW

write: 17,03,09__________________read: 00,60
>>>>>>>|
________battery mode


и т.д. ( Коды команд SMB_CMD в соответствии с "Smart Battery Data Specification" и ACPIspec30a.pdf ).

17-> 1a SMB_ADDR Address of SMBus device.
10-> 1b SMB_CMD Command byte to be sent.
09-> 18 SMB_PRTCL ( read word protocol )
_____18-> 00
_____19-> 80
_____19-> 80
00-> 19
_____19-> 00
_____19-> 00
_____1c-> 26 ____SMB_DATA[0] Low data byte received
_____1d-> 0E ____SMB_DATA[1] High data byte received
_____18-> 00


P.S. Надо также отметить одну интересную особенность процессов заряда батареи в ноутбуке, выявленную в процессе эксплуатации - батарея при последущих циклах заряда никогда не заряжается больше, чем в предшествующем зарядном цикле full charge capacity ( меньше - это пожалуйста ! - :) )
Спасибо сказали:
passshok
Сообщения: 11
ОС: (Ubuntu|Gentoo) Linux

Re: Разработка программы чтения по шине SMBus серийного номера батареи и числа циклов заряда батареи ноутбука.

Сообщение passshok »

Очень интересно глянуть на код. Имею ту же проблему c Acer Aspire 1783 WLMi, правда в последнем ядре уже лучше с этим, но кое-что не слава богу.
Спасибо сказали:
Ответить