Android上/ sys / class / power_supply中的多个电池条目

时间:2014-10-28 18:41:33

标签: android linux android-ndk sysfs

我正在尝试从NDK应用中读取电池信息。我知道完成此任务的唯一方法是读取值/sys/class/power_supply。我的困难是我找到了多个类型为“Battery”的条目,我不知道使用哪一个。

在带有KitKat 4.4.4的Nexus 10上,我看到了:

$ ls /sys/class/power_supply
ds2784-fuelgauge
manta-battery
smb347-battery
# other non-battery entries

对于所有三个类型=电池。例如:

$ cat /sys/class/power_supply/ds2784-fuelgauge/type
Battery

在Android BatteryManager代码中,他们只是遍历电池设备并获取第一个具有所需条目的电子设备(http://androidxref.com/4.4.4_r1/xref/system/core/healthd/BatteryMonitor.cpp)。但是,在我的Nexus 10上,它们有不同的价值。例如,ds2784-fuelgauge/voltage_nowsmb347-battery/voltage_now

$ cat ds2784-fuelgauge/voltage_now
4153100
$ cat smb347-battery/voltage_now
4300000

ds2784-fuelgauge/voltage_now似乎会定期更新(例如,当我开始执行计算繁重的任务时,它会发生变化),但smb347-battery/voltage_now似乎已修复。当我比较ds2784-fuelgauge/current_nowsmb347-battery/current_now时,我会看到类似的效果。

我的问题是:

  1. 为什么这里有多个条目,类型=电池?
  2. 我如何以一般方式区分它们?
  3. 我应该使用哪一个?
  4. 编辑

    • 修复了voltage_now文件名
    • 中的拼写错误
    • 强调所有三种设备的类型=电池

2 个答案:

答案 0 :(得分:4)

在Android设备上,您可能拥有多个电池,例如RTC备份或其他外围设备。您是否已经为所有3个sysfs条目捕获了类型文件?所有3你得到'电池'?

考虑到Android需要电池中的几个参数(见下文),我猜可能会将它们分成你得到的3个sysfs文件。

例如,电量计是硬件组件,它读取电池的电流并计算剩余容量,因此从中读取容量文件应该给出%,但可能从另一个文件读取电压

电池参数(即:/ sys / class / power_supply / my_batt / status):

  • 状态:充电,放电,不充电,已满,未知
  • 健康(字符串):感冒,死亡,良好,过热,过电压,未指定故障,未知
  • present(int):出现时为1
  • capacity(int):97%97%
  • voltage_now(以uV为单位)或batt_volt(以mV为单位):4205000为4205000 uV = 4.205 V
  • temp或batt_temp(以十分之一°C为单位):305为30.5°C
  • 技术(字符串):Li-ion

答案 1 :(得分:0)

您的问题是关于使用哪个来源,以及可能是如何以编程方式确定。

对于所有Android设备,您应该使用电量计。

Nexus 10:

根据source.android.com on Measuring Android Device Power的官方文档,对于您的Nexus 10,您应该使用Dallas Semiconductor DS2784。 SMB347, 列出作为相同文档的电量计,即使,也可能是电池充电器。我说这是因为该芯片的数据表将其列为电池充电器,这可以解释为什么它具有恒定电压(CV)。 (CV源的电压为4.2V,是锂离子电池功率曲线的渐近高端。)

SYSFS

您使用的是Android 4.4.4。截至撰写本文时,Android M已进入开发者预览版,Android 5.1.1已经发布。因此,如果升级手机,/ sys文件系统(SysFS)的映射可能会不同。换句话说,YMMV。

ON BKG:锂电池

  • 几乎所有锂离子电池的最大/充电电压均为4.2V 2015年一些较新的锂聚合物电池的最大电压为4.35V而不是4.2V。这是锂离子化学的结果(以及由于现场的进步而被认为可接受的电池电极劣化)。

  • 锂离子电池从100%充电到1%或0%充电时会改变很多电压。预计3.0V至4.2V的范围。

  • 所有锂电池都不可恢复,如果放电过多,可能会引发火灾。因此,使用锂电池的设备必须具有某种调节电路,这可能另外由软件中的某些东西控制,而不仅仅是硬件/固件。截止电压介于3.0V和3.6V之间。所使用的截止电压的选择取决于安全性与容量设计选择,尽管在最后几个100mV电池放电时存储的电池能量非常低。功率曲线有点奇怪。查看放电曲线(电压与剩余容量,单位为mAh),例如下面引用的数据表中的一个。

  • 因此,使用锂电池的现代设备必须使用电量计等报告当前电压。

的参考文献:

数据表

Summit SMB347 Datasheet

(声望点不够)。另请参阅18650数据表,例如松下18650的数据表,松下是许多锂电池制造商之一,而特斯拉则倾向于以行业环境合作。