如何清除/重置智能电池记忆?

pol*_*mon 11 power-management battery smbios

所以,我为我的笔记本电脑买了一块新电池,从一开始,我就遇到了问题。

电池几乎完全从制造商那里放电。我将它插入我的电脑,电池会报告充电率为 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'
Run Code Online (Sandbox Code Playgroud)

所以电池正在充电,能量容量只有它设计的四分之一(即使电池只有几天的时间),它处于 73%,而且充电率很小,它没有甚至报告充满电需要多少时间。

现在,我知道您可以通过为电池充电几个小时,然后让它电量耗尽,然后再次充电来“校准”电池。

不过,这似乎不是正确的做法。我想知道我是否不能通过SMBus直接访问智能数据。

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
Run Code Online (Sandbox Code Playgroud)

所以,我尝试探测 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: -- -- -- -- -- -- -- --                         
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪,这是否意味着总线上没有任何连接?

无论我试图转储哪个地址,结果总是相同的:

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
Run Code Online (Sandbox Code Playgroud)

这就是我得到的程度。

系统从某处获取电池信息,但我不知道如何以及从何处获取。

至于 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
Run Code Online (Sandbox Code Playgroud)

(设计能力报告错误等)


我能想出的最后一点信息是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
Run Code Online (Sandbox Code Playgroud)

您可以在其中看到所有这些“OEM_Define2”等字符串,这些字符串的含义并不多。

dmidecode -t connector 报告:

Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
Run Code Online (Sandbox Code Playgroud)

小智 5

不能从操作系统直接访问智能电池规范 (SBS) 总线。但是,可以通过直接连接到电池引脚的 USB-I2C 适配器直接与电池通信。

编辑:https : //media.blackhat.com/bh-us-11/Miller/BH_US_11_Miller_Battery_Firmware_Public_WP.pdf

编辑 2:我个人设法使用 Raspberry PI 的 i2c 引脚和您提到的命令直接与电池通话。