因此,我为我的笔记本电脑买了一块新电池,但从一开始我就遇到了问题。
制造商出厂时的电池几乎完全放电。我将其插入电脑,电池会报告充电率为 0,因此永远不会达到“充满电”状态
几分钟后,X11 崩溃了,我现在处于这个状态 ( upower -i /org/freedesktop/UPower/devices/battery_BAT0
):
native-path: BAT0
vendor: Hewlett-Packard
model: Primary
power supply: yes
updated: Fri 21 Oct 2016 08:28:33 AM CEST (106 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: charging
warning-level: none
energy: 17.8704 Wh
energy-empty: 0 Wh
energy-full: 24.192 Wh
energy-full-design: 95.04 Wh
energy-rate: 0.0996923 W
voltage: 15.947 V
percentage: 73%
capacity: 25.4545%
technology: lithium-ion
icon-name: 'battery-full-charging-symbolic'
所以电池在充电时,能量容量只有设计值的四分之一左右(尽管电池只用了几天),它的电量为 73%,而且充电率如此之小,它不甚至报告充满电需要多少时间。
现在,我知道你可以“校准”电池,方法是充电几个小时,然后让它耗尽,然后再次充电。
但这似乎不是正确的做法。我想知道我是否无法通过直接访问智能数据中小企业总线。
i2cdetect -l
报告:
i2c-0 smbus SMBus I801 adapter at 8000 SMBus adapter
i2c-1 i2c NVIDIA i2c adapter 0 at 1:00.0 I2C adapter
i2c-2 i2c NVIDIA i2c adapter 2 at 1:00.0 I2C adapter
i2c-3 i2c NVIDIA i2c adapter 3 at 1:00.0 I2C adapter
i2c-4 i2c NVIDIA i2c adapter 5 at 1:00.0 I2C adapter
因此,我尝试探测 SMBus ( i2cdetect -r 0
):
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0 using read byte commands.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
这对我来说很奇怪,这是否意味着没有任何东西连接到总线?
无论我尝试转储哪个地址,结果总是相同的:
i2cdump 0 0x03
(所有其他有效地址产生相同的输出):
No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0, address 0x1a, mode byte
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
10: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
20: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
30: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
40: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
50: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
60: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
70: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
90: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
a0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
b0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
c0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
d0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
e0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
这就是我已经走了多远。
系统从以下位置获取电池信息某处,但我不知道如何以及从哪里。
至于 I²C / SMBus 对电池的访问:不知道我是否做错了什么,或者这是不可能的。
我想知道如何访问智能电池数据,如何设置它(大概使用i2cset
),以及它的格式可能如何(什么数据编码哪些信息等)
acpi -V
更迷茫的是:
Battery 0: Unknown, 73%
Battery 0: design capacity 6600 mAh, last full capacity 1680 mAh = 25%
Adapter 0: on-line
(设计能力报告不正确等)
我能想到的最后一点信息是dmidecode
输出:
Handle 0x0010, DMI type 39, 22 bytes
System Power Supply
Location: OEM_Define0
Name: OEM_Define1
Manufacturer: OEM_Define2
Serial Number: OEM_Define2
Asset Tag: OEM_Define3
Model Part Number: OEM_Define4
Revision: OEM_Define5
Max Power Capacity: 75 W
Status: Present, OK
Type: Regulator
Input Voltage Range Switching: Auto-switch
Plugged: No
Hot Replaceable: No
您可以在其中看到所有这些“OEM_Define2”等字符串,但这些字符串并没有说明太多。
dmidecode -t connector
报告:
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
答案1
智能电池规范 (SBS) 总线无法从操作系统直接访问。然而,可以通过直接连接到电池引脚的 USB-I2C 适配器直接与电池通信。
编辑: https://media.blackhat.com/bh-us-11/Miller/BH_US_11_Miller_Battery_Firmware_Public_WP.pdf
编辑 2:我个人设法使用 Raspberry PI 的 i2c 引脚和您提到的命令直接与电池对话。
答案2
仪表没有任何问题;您的电池有缺陷,因此您只需将其退回并要求更换即可。 4 芯锂离子电池充满电后的电压为 4.2 x 4 = 16.8 伏。事实上,它的电压仅为 15.9 并且几乎没有充电,这表明至少有一个电池已损坏。
smi 和 acpi 数据不正确的事实表明,这台笔记本电脑的制造商根本懒得去构建它,所以如果可能的话,我会退货以获得退款,并且不再从他们那里购买。
答案3
你确定它是智能电池吗?我的 HP Pavilion 里的那台不是。
电池的来源也很重要。我花了三四次尝试才为我的戴尔买了一块可以工作的电池,购买了便宜的电池。我终于有好运了http://drpowerglobal.com/drbattery/但那是几年前的事了,现在我已经把它穿坏了。