MTK调试-电池识别
1、调试流程步骤
1.1 流程讲解:(示例:MT6589平台)
电池识别的简介:本文的电池识别是采用一个外部芯片(bq2022a),可以读取电池内部烧录的识别码,将读出的识别码和我们设定的识别码进行对比,如果相同则允许充电,否则不允许充电,但是可以正常放电使用。
不允许充电的现象:开机状态,充电电流为0;关机状态,显示一张禁止充电的图标。
1.2 驱动调试:(示例:93007项目)
1)bq2022a的驱动源码位置:
\mediatek\platform\mt6589\kernel\drivers\power\bq2022a-batid.c
\mediatek\platform\mt6589\kernel\drivers\power\bq2022a-batid.h
2)项目宏控配置:
\wingcust\{$project}\base\config\ProjectConfig.mk
设置WT_BQ2022A_BAT_ID_SUPPORT = yes
\wingcust\{$project}\base\config\autoconfig\kconfig
设置CONFIG_BQ2022A_BAT_ID=y
3)其他配置:
DCT配置中需要设置对应的BAT_ON的管脚为GPIO模式:
#define GPIO_BQ_BSQ_PIN GPIO175
#define GPIO_BQ_BSQ_PIN_M_GPIO GPIO_MODE_00
#define GPIO_BQ_BSQ_PIN_M_EINT GPIO_MODE_02
且需要在DCT的POWER设置中设置MSDC2的电压为2.8V
#define MSDC_POWER_MC2 MSDC_VIO28_MC2
上面的设置OK后功能则起作用。
4)要想在其他地方使用该功能,只需要调用接口bq2022a_read_bat_id()就行。
1.3 功能验证
1)关机状态下:
安上电池,将手机连接USB线或者充电器,等一会儿,如果手机进入正常充电状态,则表示识别正常,如果弹出禁止充电的图标,则表示当前电池不是我们项目的电池。
2)开机状态下:
安上电池开机,连接USB线,打开adb调试功能,adb 进入手机,输入命令:cat /sys/class/power_supply/battery/batt_id
如果显示1,识别出是我们的标准电池;如果显示0,识别出是非法电池
2、功能扩展
电池器件由电池封装厂和电芯组装而成,不同的电芯有不同的ZCV曲线,因此需要配置不同的fuel_gauge参数,通过识别码就能识别出不同的电池封装厂和电芯组装电池模组,从而调用不同的fuel_gauge参数。
1)电池模组识别设计思路:
共读取9个识别码数据,前面的8位识别码仍然不变,进行判断对比,设定第9位为电池模组编号,不做比较,与0x0F相与生成1~F的数据,保存在新的变量bat_module_id中。
2)功能扩展使用:
封装bat_module_id成函数bq2022a_read_bat_module_id(),在mt6320_fuel_gauge.c文件的以下函数:fgauge_get_saddles() 、 fgauge_get_saddles_r_table()、 fgauge_get_profile()、 fgauge_get_profile_r_table()中调用bq2022a_read_bat_module_id(),再增加调用对应电池的ZCV参数即可。以后新增加一个模组电池,需要在上面4个函数的位置增加该电池的参数数组。
3)功能验证:
模组识别已经加入到了工厂模式和*#66*#工厂模式中。
工厂模式:进入工厂模式 ---> 硬件设备信息 ---> Battery 会显示对应模组厂的编号和模组厂信息。
工厂模式:进入*#66*# ---> 关键器件查询 ---> Bttery 会显示对应模组厂的编号和模组厂信息。
以上模式中如果识别不到模组,则会显示“error”