RK3588 Android12开发板充电调试踩坑记:BQ25703地址写错,CW2017参数不对,我这样搞定

张开发
2026/4/17 10:58:27 15 分钟阅读

分享文章

RK3588 Android12开发板充电调试踩坑记:BQ25703地址写错,CW2017参数不对,我这样搞定
RK3588 Android12电源管理调试实战从芯片地址陷阱到电池参数校准拿到RK3588开发板的第一天我就被电源管理模块来了个下马威。这块搭载Android12的开发板采用BQ25703充电IC搭配CW2017电量计的方案理论上应该是个成熟组合。但当我真正开始调试时才发现从I2C地址到电池参数处处都是坑。本文将用第一视角还原整个排错过程分享那些规格书上没写的实战经验。1. 硬件配置与初始环境搭建在开始调试前我们需要确保硬件连接和基础环境正确。RK3588开发板的电源管理部分通常通过I2C总线与充电IC和电量计通信。我的开发板配置如下I2C6总线时钟频率400kHz连接BQ25703地址0x6B和CW2017地址0x63GPIO配置充电状态检测使用GPIO0_B7低电平有效电源路径采用DC输入未使用Type-C PD充电设备树(DTS)基础配置如下i2c6 { clock-frequency 400000; status okay; cw2017: cw201763 { status okay; compatible cellwise,cw2017; reg 0x63; // 电池参数暂缺 }; bq25703: bq257036b { status okay; compatible ti,bq25703; reg 0x6b; interrupt-parent gpio0; interrupts RK_PB7 IRQ_TYPE_LEVEL_LOW; }; };2. 第一个坑I2C地址的规格书陷阱编译烧录后查看内核日志发现了第一个错误dmesg | grep bq [ 10.068822] bq25700-charger 6-006d: Error applying setting, reverse things back [ 10.068830] bq25700-charger: probe of 6-006d failed with error -22这里有几个关键信息值得注意驱动尝试访问的地址是0x6D而我们的DTS配置是0x6B错误代码-22表示无效参数reverse things back提示可能有配置冲突排查步骤首先确认硬件原理图确认芯片实际地址是0x6B检查驱动源码发现驱动兼容性列表中使用的是ti,bq25700示波器抓取I2C波形确认通信时序正常最终发现规格书上的地址0x6D是错误的实际硬件采用0x6B。这个教训告诉我们不能盲目相信规格书必须交叉验证硬件设计。3. 电量计参数的长度之谜解决了充电IC问题后电量计又开始报错dmesg | grep cw2017 [ 10.068681] cw2017 6-0063: battery-profile must be 80 bytes [ 10.068685] cw2017 6-0063: Failed to parse cw2017 properties关键错误信息是battery-profile must be 80 bytes。经过研究发现CW2015使用68字节的电池参数CW2017需要80字节的参数原厂提供的参数长度不正确正确的电池参数配置应该如下cellwise,battery-profile /bits/ 8 0x5A 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x9E 0xC8 0xD2 0xC5 0xC2 0xCF 0x53 0x25 0x10 0xF5 0xEB 0xE1 0xB7 0x93 0x83 0x6E 0x5D 0x4D 0x42 0x54 0x94 0xDC 0x76 0xD7 0xD7 0xD2 0xD2 0xD0 0xCE 0xCC 0xC4 0xCD 0xC3 0xBD 0xCB 0xAE 0x96 0x8A 0x83 0x75 0x67 0x61 0x76 0x8C 0xA4 0x96 0x50 0x66 0x00 0x00 0x90 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x64 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x22 ;4. GPIO冲突与电源管理优化解决了上述问题后系统仍然存在不稳定现象特别是DC供电时会出现反复重启。进一步排查发现GPIO冲突charger_okGPIO被vcc_3v3_sd_s0占用电流限制SDP模式输入电流被限制在500mA优化后的配置如下bq25703: bq257036b { // 移除冲突的pinctrl配置 // pinctrl-names default; // pinctrl-0 charger_ok; // 调整输入电流设置 ti,input-current-sdp 2500000; // 从500mA提高到2500mA ti,input-current-dcp 2000000; ti,input-current-cdp 2000000; };5. 实战经验总结通过这次调试我总结了以下几点经验I2C地址验证规格书可能有误必须通过以下方式确认硬件原理图实际测量I2C波形芯片厂商的勘误表电量计参数CW2017需要80字节参数参数需要根据实际电池特性调整不正确的参数会导致电量检测异常电流限制陷阱SDP模式默认电流限制可能导致供电不足DC供电时需要适当提高电流限制调试技巧使用dmesg实时查看内核日志通过i2cdetect工具扫描I2C设备示波器是验证通信问题的终极武器最后分享一个实用命令可以实时监控电源状态watch -n 1 cat /sys/class/power_supply/*/uevent这个命令会每秒刷新一次所有电源设备的状态信息包括电压、电流和电量等关键参数对调试电源管理问题非常有帮助。

更多文章