入门

入门篇介绍电池管理配置、外部充电芯片驱动添加等,目的是让充电和电池电量测量功能工作起来。

1. 任务分工

  1. 52x

    • 单核平台,所有的任务都在HCPU上完成;

  2. 56x/55x/58x
    双核架构,大小核需要任务分工协作:

    • 在小核(LCPU)启动前,电池电量检测由大核(HCPU)负责;充电插入检测等中断事件由大核处理;

    • 小核启动后,电量采集工作移交至小核,由小核上报给大核。

3. charger配置的详细说明

charger配置包括了电量检测,充电设备选择,充电插入检测,充电pin配置,NTC温度检测等功能。

3.1 charge device select

../../_images/battery_config_charger_chip_select.png
- using SIFLI charge  
  **52x**可选择使用芯片内部的充电模块;  
- using charge sgm40561  
  使用外部充电芯片sgm40561;  
- using charge aw32001  
  使用外部充电芯片aw32001;  

3.2 chargeing measure vbat adc mode

../../_images/battery_config_charger_mode.png
  • charging measure vbat adc mode suspend
    adc采集电池电量的时候暂停充电;

  • chargeing measure vbat adc mode CURVE (默认)
    充电时,同样百分比电压要比不充电时要高。采用充电曲线避免百分比计算不准确;

3.3 charg pin number config

../../_images/battery_config_charger_pin.png
  • 配置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

../../_images/battery_config_charger_adc.png
  • 选择合适的adc以及合适的通道;

3.5 NTC temp config

../../_images/battery_config_charger_ntc.png
  • 配置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/目录下增加充电芯片的文件夹

../../_images/battery_charger_drvier_0.png

4.2 新建SConscript文件

../../_images/battery_charger_drvier_5.png

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配置新增加宏

../../_images/battery_charger_drvier_3.png

4.5 修改驱动文件

驱动必须实现的功能

  • 接口初始化

  • 注册 charge 设备

  • 驱动初始化

  1. 驱动初始化

int sgm40561_init(void)
{
    sgm40561_pin_init();
    rt_charge_register(&charge_device, &sgm40561_ops, &RT_NULL);
    return RT_OK;
}
INIT_PREV_EXPORT(sgm40561_init);
  1. control代码实现

    一般需要实现的如下几个功能:

    • RT_CHARGE_GET_STATUS 获取充电状态;

    • RT_CHARGE_GET_DETECT_STATUS 获取插入检测状态;

    • RT_CHARGE_GET_FULL_STATUS 获取充满的状态;

../../_images/battery_charger_drvier_8.png
  1. control command参考

../../_images/battery_charger_drvier_7.png

5. 预期效果

配置完成后,效果如下:

  1. 插入和拔掉充电器,UI界面会弹出或关闭充电窗口

    • 充电中界面如下:

    ../../_images/battery_charging.png
    • 充电完成界面如下:

    ../../_images/battery_charg_end.png
  2. 可以从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℃