入门¶
入门篇介绍电池管理配置、外部充电芯片驱动添加等,目的是让充电和电池电量测量功能工作起来。
1. 任务分工¶
52x
单核平台,所有的任务都在HCPU上完成;
56x/55x/58x
双核架构,大小核需要任务分工协作:在小核(LCPU)启动前,电池电量检测由大核(HCPU)负责;充电插入检测等中断事件由大核处理;
小核启动后,电量采集工作移交至小核,由小核上报给大核。
3. charger配置的详细说明¶
charger配置包括了电量检测,充电设备选择,充电插入检测,充电pin配置,NTC温度检测等功能。
3.1 charge device select¶
- using SIFLI charge
**52x**可选择使用芯片内部的充电模块;
- using charge sgm40561
使用外部充电芯片sgm40561;
- using charge aw32001
使用外部充电芯片aw32001;
3.2 chargeing measure vbat adc mode¶
charging measure vbat adc mode suspend
adc采集电池电量的时候暂停充电;chargeing measure vbat adc mode CURVE (默认)
充电时,同样百分比电压要比不充电时要高。采用充电曲线避免百分比计算不准确;
3.3 charg pin number config¶
配置pin的序号;
pin不存在的时候,配置-1;
pin存在的时候,序号采用rt_driver的序号配置,即:大核 0~95;小核96~191;
配置有效状态;
detect pin level is high if charge plug in
选中,充电插入检测pin,高有效;
不选,充电插入检测pin,低有效
charging pin level is high when charging
选中,充电中状态,高有效;
不选,充电中状态,低有效
detect pin level is high when charge full
选中,充满状态,高有效;
不选,充满状态,低有效
3.4 charg adc config¶
选择合适的adc以及合适的通道;
3.5 NTC temp config¶
配置NTC使用的adc及通道;
配置NTC的计算方式 ntc value computing method;
公式计算 formula compute
查表法 lookup table
3.6 Use charger detect¶
使能 充电插入检测。
4. 外部充电芯片添加¶
52x/56x/55x/58x都可以使用外部充电芯片。下面以外部充电芯片sgm40561为例,介绍如何添加外部充电芯片。
sdk/customer/perpherals/charger/sgm41561/
├── Kconfig
├── SConscript
├── sgm41561.c
└── sgm41561.h
以下是具体的步骤:
4.1 新建文件夹¶
在sdk/customer/perpherals/charger/目录下增加充电芯片的文件夹
4.2 新建SConscript文件¶
4.3 新建kconfig¶
增加 SGM40561的控制宏(CHARGE_USING_SGM40561)。注意:宏的依赖关系。
menu "Charger config"
config BSP_USING_CHARGER
bool "Use charger"
default n
if BSP_USING_CHARGER
choice
prompt "charge device select"
default CHARGE_USING_SIFLI if SOC_SF32LB52X
default CHARGE_USING_SGM40561 if !SOC_SF32LB52X
config CHARGE_USING_SIFLI
depends on SOC_SF32LB52X
bool "using SIFLI charge"
config CHARGE_USING_SGM40561
depends on !SOC_SF32LB52X
bool "using charge sgm40561"
endchoice
endif
endmenu
4.4 运行menuconfig配置新增加宏¶
4.5 修改驱动文件¶
驱动必须实现的功能
接口初始化
注册 charge 设备
驱动初始化
驱动初始化
int sgm40561_init(void)
{
sgm40561_pin_init();
rt_charge_register(&charge_device, &sgm40561_ops, &RT_NULL);
return RT_OK;
}
INIT_PREV_EXPORT(sgm40561_init);
control代码实现
一般需要实现的如下几个功能:
RT_CHARGE_GET_STATUS获取充电状态;RT_CHARGE_GET_DETECT_STATUS获取插入检测状态;RT_CHARGE_GET_FULL_STATUS获取充满的状态;
control command参考
5. 预期效果¶
配置完成后,效果如下:
插入和拔掉充电器,UI界面会弹出或关闭充电窗口
充电中界面如下:
充电完成界面如下:
可以从log中看到以下打印信息
电量采集Log
ch[7]voltage=41756; [4350430] BAT: rt_adc_read: 41756 [4350435] BAT: battery_get_original_voltage: volt 4175 [4350442] BAT: battery_get_voltage: volt 4175 smooth volt: 4166 battery_get_voltage_ex, pre_adc = 4089, cur_adc =4166; [4350457] BAT: original voltage:4104 filtered voltage: 4079; [4350465] BAT: remain_percent(94)
说明:log的电池电量:
94%温度监控Log
ch[4]voltage=7354; [7022134] temp_ctrl: adc:7354, r:138433, t:18.48; [7022148] temp_ctrl: core temp: 16; [7022152] temp_ctrl: NTC ave temp:[18.33], mode:[NORmal Mode];
说明:log的NTC温度:
16℃。

