我们在做测试的过程中发现一个问题,后分析发现是因为充电芯片(型号SC8885S)的一个寄存器的值被修改,这个寄存器地址为0x15,为电池充电电压的设置寄存器。如下描述:

这个寄存器我们在驱动中初始化时会设置一次,之后再没有对它进行过修改。所以推测为i2c异常导致的寄存器值变化(除0x15外,0x14也有被修改,0x14为设置充电电流的寄存器)。

后逐个断开i2c总线的其他设备,确认是电池影响,拆掉电池后0x15寄存器就不会变化。装上电池测试一段时间后就出现0x15寄存器值变化。

经分析,最终找到原因为电池中电量计芯片(BQ4050)的配置中其中一个功能配置错误,如下:

此功能正常应配置为0,实际配置为1,将它重新配置为0测试后问题得到解决。

关于BCAST的功能描述如下:

有上述描述可知,电量计(bq4050)是可能对充电芯片的ChargingVoltage和ChargingCurrent进行配置的,写入的地址为0x12,而刚好我们所用的充电芯片(SC8885S)写地址为0x12,所以才会出现充电芯片的0x15(即ChargingVoltage)寄存器值被修改的现象。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐