问题:充电电流被限制,导致充电时间过长。
代码版本分支:android4.3_master
pmu文件管理文件地址:drivers/infotm/power/axp_power/
复现问题,检测电流变化,发现机器在深度休眠后电流会由原来的1.2A变成0.5A。
猜测:可能是由于充电电流过小导致充电时间过长。
分析:1.查看axp202的datasheet查找到限制充电电流的寄存器地址,发现控制是否有限制充电电流的寄存器地址为:0x30[1-0],在深度休眠前查看寄存器0x30的值
>>#echo 30 > sys/class/axppower/axpreg
>>#cat sys/class/axppower/axpreg
得到结果为:63(此为十六进制),转换为2进制为:1100011,此时0x30[1-0]位的取值为:11,根具datasheet发现此时充电电流限流是关闭的。
深度休眠后用同样的方法查看寄存器0x30,得到结果0x30为:61,转换二进制后为:1100001,0x30[1-0]位取值为:01,根据datasheet发现此时被限流为500mA,与发现的问题相符。
查看datasheet会发现,限制流量大小的控制是通过寄存器0x33来控制的,同样此时可以读取0x33的值,根据datasheet中的说明计算,同样可以得到电流为500mA,以此来验证了猜想。
由于问题是发生在深度休眠后,故此查看代码,查找软件在深度休眠时以及休眠唤醒时做了哪些动作。或者查找那些地方对0x30这个寄存器做了修改,让其主动的限制充电电流为500mA。
查找与休眠相关的函数,resume,suspend
最终发现在文件mod5_config.h文件中,的mode5_batt_resume函数中,对0x30做了值的改变。
注释掉此代码后,发现问题消失,说明问题是因为此处而引起的,分析此处代码在整个代码中的功能,是否可以直接去掉,不可以直接去掉的需要添加判断做区分,或者想别的办法修改vbus的充电电流。
请教修改的当事人,得知此处是由于以前一个项目没有DC充电口,但是用usb充电时,重点电流过大会导致usb在PCB上的引脚温度过高而软化,容易出现问题。因此限制电流,经过改版后,已经不存在这个问题,但是代码中没有恢复导致问题。可以直接注释掉。
vbus:是用来监测是否为usb充电,检测为usb充电时电流会自动设置为500mA。
注意:git blam 文件名 查看这个在什么时候什么人修改了什么东西。
datasheet需要细看,特别是寄存器相关的地方。
分析问题思路:1.遇到问题后先分析引起这个问题的可能原因。
2.复现问题,并观察可能因素的一些变化。
3.修改变化去验证现象。从而肯定问题的原因。
4.找到一个不会影响其他功能的办法。