0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于IDO-SBC3568主板说明PMIC RK809电量计的调试方法

sXx1_industio 来源:深圳触觉智能 2023-05-24 09:39 次阅读

本文基于IDO-SBC3568主板介绍说明PMIC RK809电量计的调试方法。

IDO-SBC3568-V1是一款基于RK3568的工控主板,采用22nm先进工艺制程,四核A55 CPU,主频高达2.0GHz,支持高达8GB高速LPDDR4,1T算力NPU ,4K H.265/H264硬解码;具有丰富的视频输出接口HDMI2.0/eDP1.3/MIPI/LVDS) ,高速通信接口(千兆网/PCIE/USB3.0),工业互联接口(CAN/串口)。

IDO-SBC3568-V1 可作为RK3568开发评估板,也普遍适用于各种智慧显示终端产品、视频类终端产品、工业自动化终端产品和边缘计算网关类产品。应用可覆盖边缘计算、人工智能、工业HMI、工业网关、智慧医疗、自助终端、智能零售、能源电力等行业。

425a8088-f976-11ed-90ce-dac502259ad0.png

IDO-SBC3568-V1正面接口指示图

42a51512-f976-11ed-90ce-dac502259ad0.png

IDO-SBC3568-V1背面接口指示图

硬件分析

43045838-f976-11ed-90ce-dac502259ad0.png

432496a2-f976-11ed-90ce-dac502259ad0.png

435aa062-f976-11ed-90ce-dac502259ad0.png

硬件使用PMIC RK809电量计加BQ24610的充电方案,同时将GPIO1_D1作为12V DC 状态检测功能,当插入电源时GPIO1_D1将会被拉低,拔插电源时GPIO1_D1将上拉至1.8V。

内核修改

配置内核开启以下驱动

RTC_DRV_RK808 [=y]

BATTERY_RK817 [=y]

设备树修改如下:

RK809 没有充电功能,只需要配置 battery 节点。电源检测IO使用gpio-charger驱动,并配置charger-type为mains。

/{
charger_det: charger {
compatible = "gpio-charger";
charger-type= "mains";
gpios = <&gpio1 RK_PD1 GPIO_ACTIVE_LOW>;
status = "okay";
};

test-power {
status = "disabled";
};
};

&rk809 {
battery {
status = "okay";
compatible = "rk817,battery";
ocv_table = <7000 7250 7370 7384 7436 7470 7496
        7520 7548 7576 7604 7632 7668 7706
        7754 7816 7892 7950 8036 8142 8212>;/*开路电压,是第一次接电池开机、长时间关机后再开机、长时间休眠后校正库仑计的依据,
0%~100%的电量细分成 21 个点,步进 5%电量*/
design_capacity = <1500>; //实际电池容量,单位:mah
design_qmax = <1500>; //最大容量值
design_max_voltage = <8400>; //最大电压
bat_res = <180>; //电池内阻
sleep_enter_current = <300>; //进入松弛模式的条件之一
sleep_exit_current = <300>; //退出松弛模式的条件之一
sleep_filter_current = <100>; //过滤无效的松弛电流。
power_off_thresd = <7000>; //期待的系统关机电压,单位:mV
zero_algorithm_vol = <7700>; //进入电压+库仑计放电模式的电压值
max_soc_offset = <60>; //开机校正时允许的最大电量误差。
monitor_sec = <5>; //轮询时间 单位秒
sample_res = <10>; //电池端附近的采样电阻大小
energy_mode = <1>; //该值为 1 时表示尽可能采取将电池电量放完的方式,为 0 时表示尽量考虑曲线平滑的合理性
fb_temperature = <105>; //芯片热保护温度阈值
virtual_power = <0>; //假电池模式(测试模式)
bat_res_up = <140>; //BATDIV上拉分压电阻
bat_res_down = <20>; //BATDIV下拉分压电阻
register_chg_psy = <0>; //是否通过RK809上报充电状态
external_chg_psy = <1>; //配置外部DC检测上报充电状态
};
};
电池调试

驱动文件路径为:kernel/drivers/power/supply/rk817_battery.c

系统启动后可从 /sys/class/power_supply/battery/uevent 节点获取电池状态信息

43770d6a-f976-11ed-90ce-dac502259ad0.png

支持应用层配置驱动调试信息的输出,配置方法如下:

#开启打印信息
echo1 > /sys/module/rk817_battery/parameters/dbg_level
#关闭打印信息
echo0 > /sys/module/rk817_battery/parameters/dbg_level

开启后详细的电池数据将会输出至调试串口,内容如下:

43959582-f976-11ed-90ce-dac502259ad0.png

使用gpio-charger配置GPIO1_D1为充电检测,同样会创建一个charger的上报事件,可从

/sys/class/power_supply/charger/uevent 节点中获取到当前DC插入状态。

43ad479a-f976-11ed-90ce-dac502259ad0.png

电池校准

长时间关机后,读取到的电量会和电池的实际电量有差异,这时候需要对电池进行校准,校准方法如下:

1. 移除DC,拔掉电池10秒以上再插入,电量计将会重新校准电量数据。

电池做一次完整的充放电。

修改充电状态上报

以上的方案和电路,当12V供电拔出时rk817_battery驱动中上报的充电状态依旧是Charging。

分析充电状态上报代码如下:

43bf1204-f976-11ed-90ce-dac502259ad0.png

充电状态是由plugin_trigger决定,驱动中分别注册了plugin和plugout中断,用于检测USB充电拔插事件。驱动代码如下:

staticint rk809_charge_init_irqs(struct rk817_battery_device *battery)
{
struct rk808 *rk817 = battery->rk817;
struct platform_device *pdev = battery->pdev;
int ret, plug_in_irq, plug_out_irq;

battery->plugin_trigger = 0;
battery->plugout_trigger = 0;

plug_in_irq = regmap_irq_get_virq(rk817->irq_data, RK817_IRQ_PLUG_IN);
if(plug_in_irq < 0) {
    dev_err(battery->dev, "plug_in_irq request failed!
");
returnplug_in_irq;
}

plug_out_irq = regmap_irq_get_virq(rk817->irq_data, RK817_IRQ_PLUG_OUT);
if(plug_out_irq < 0) {
    dev_err(battery->dev, "plug_out_irq request failed!
");
returnplug_out_irq;
}

ret = devm_request_threaded_irq(battery->dev, plug_in_irq, NULL,
rk809_plug_in_isr,
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
"rk817_plug_in", battery);
if(ret) {
dev_err(&pdev->dev, "plug_in_irq request failed!
");
returnret;
}

ret = devm_request_threaded_irq(battery->dev, plug_out_irq, NULL,
rk809_plug_out_isr,
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
"rk817_plug_out", battery);
if(ret) {
dev_err(&pdev->dev, "plug_out_irq request failed!
");
returnret;
}

if(rk817_bat_field_read(battery, PLUG_IN_STS)) {
battery->plugin_trigger = 1;
battery->plugout_trigger = 0;
}

return0;
}

查看寄存器可知,PLUG_IN_STS寄存器的值与VDC有关,当VDC电压大于0.55V时,会将寄存器设置为1,否则设置为0。

43d7e3e2-f976-11ed-90ce-dac502259ad0.png

本文调试的主板没有配置DC拔插来修改VDC状态,VDC在系统上电后VDC始终保持上拉至1.2V,PLUG_IN_STS寄存器值始终保持为1。VDC部分电路如下:

43f97b1a-f976-11ed-90ce-dac502259ad0.png

此处可修改驱动,通过GPIO1_D1检测外部DC的插入来上报充电状态。在dts battery节点中增加自定义参数external_chg_psy用于配置外部充电检测上报。

同时内核修改充电状态上报的逻辑,修改内容如下:

--- a/kernel/drivers/power/supply/rk817_battery.c
+++ b/kernel/drivers/power/supply/rk817_battery.c
@@ -624,6+624,7@@ struct rk817_battery_device {
int plugout_irq;
int chip_id;
int is_register_chg_psy;
+ int is_external_chg_psy;
bool change; /* Battery status change, report information */
};

@@ -1924,6+1925,11@@ staticint rk817_bat_parse_dt(struct rk817_battery_device *battery)
&battery->is_register_chg_psy);
if(ret < 0 || !battery->is_register_chg_psy)
dev_err(dev, "not have to register chg psy!
");
+
+ ret = of_property_read_u32(np, "external_chg_psy",
+ &battery->is_external_chg_psy);
+ if(ret < 0 || !battery->is_external_chg_psy)
+ dev_err(dev, "not have to register external chg psy!
");
}

DBG("the battery dts info dump:
"
@@ -2119,10+2125,18@@ staticint rk817_battery_get_property(struct power_supply *psy,
if((battery->chip_id != RK809_ID) &&
rk817_bat_get_charge_state(battery))
val->intval = POWER_SUPPLY_STATUS_CHARGING;
- elseif(battery->chip_id == RK809_ID &&
- battery->plugin_trigger)
- val->intval = POWER_SUPPLY_STATUS_CHARGING;
- else
+ elseif(battery->chip_id == RK809_ID){
+ if(battery->is_external_chg_psy){
+ if(battery->ac_in)
+ val->intval = POWER_SUPPLY_STATUS_CHARGING;
+ else
+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
+ } elseif(battery->plugin_trigger){
+ val->intval = POWER_SUPPLY_STATUS_CHARGING;
+ } else{
+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
+ }
+ }else
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
}
break;
电池状态显示

未接入电源时显示如下

4424714e-f976-11ed-90ce-dac502259ad0.png

插入DC 12V 后显示如下

4440a882-f976-11ed-90ce-dac502259ad0.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lvds
    +关注

    关注

    2

    文章

    848

    浏览量

    64621
  • LPDDR4
    +关注

    关注

    1

    文章

    33

    浏览量

    23302
  • PMIC技术
    +关注

    关注

    1

    文章

    6

    浏览量

    2146
  • RK3568
    +关注

    关注

    4

    文章

    433

    浏览量

    4130

原文标题:【技术分享】RK3568 RK809电量计电池调试

文章出处:【微信号:industio,微信公众号:深圳触觉智能】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【深圳触觉智能技术分享】RK3568 RK809电量计电池调试

    本文基于IDO-SBC3568主板介绍说明PMIC RK809电量计
    的头像 发表于 05-29 10:11 3622次阅读
    【深圳触觉智能技术分享】<b class='flag-5'>RK3568</b> <b class='flag-5'>RK809</b><b class='flag-5'>电量计</b>电池<b class='flag-5'>调试</b>

    RK3568-GDB程序调试方法说明

    RK3568-GDB程序调试方法说明
    的头像 发表于 01-19 16:16 912次阅读
    <b class='flag-5'>RK3568</b>-GDB程序<b class='flag-5'>调试</b><b class='flag-5'>方法</b><b class='flag-5'>说明</b>

    使用阻抗追踪电量计

    应用Impedance TrackTM技术的电池电量计同时采用了库伦算法和电池电压算法进行电量计算,可为目前市面上各种类型的蓄电池提供最精准的充电指示。 在电池管理电量计论坛中,我们发现这样一个
    发表于 08-29 16:17

    电池电量计有什么困扰

    算的误差,然后就发现电量计量数据在到了 1% 以后就长时间不变了,我让手机死命工作好久以后才使它实现了自动关机。根据我对电量计算方法的理解,我的 iPhone 手机使用的是库伦电量计,这是一种
    发表于 09-18 09:05

    bq27411-g1(单节电量计) bq27541(单节电量计) bq27546-g1 (单节电量计)

    bq27411-g1(单节电量计) bq27541(单节电量计)bq27546-g1 (单节电量计)TI的这三款电量计哪个熟悉的?比如更换不同厂家的电芯之后,需要用上位机重新配置参数,
    发表于 03-02 14:53

    电池的电量计

    电池的电量计算电池厂家提供不了开路电压对应容量的OCV表,但是这个项目又必须正确的显示电池的电量,大家是如何做到电量的大概测量的(节省成本不用电量计),用的是开路电压法估算(精度要在8
    发表于 08-12 18:37

    如何去实现RK809长按PWR键重启呢

    如何去实现RK809长按PWR键重启呢?如何对其进行测试呢?
    发表于 02-16 07:52

    通用电量计如何选型

    电池包里可以实现更高的精度,并且可以实现数据加密与电池身份的识别,避免仿冒伪劣电池引起的潜在危险。1串电池电量计也可以放在系统主板上,但由于引入了MOS、连线阻抗的影响,以及不便于校准,电量精度会受
    发表于 11-03 08:20

    如何快速让电量计工作起来

    如果你第一次使用电量计不知道从何入手,如果你看到那么多寄存器参数不知道配置哪个,如果你面对电量计技术参考手册一两百页有点迷茫,那么这个文档或许可以帮到你。下面让我们一起从零开始,以最小配置快速让
    发表于 11-10 06:30

    如何使用阻抗追踪电量计

    应用Impedance TrackTM技术的电池电量计同时采用了库伦算法和电池电压算法进行电量计算,可为目前市面上各种类型的蓄电池提供最精准的充电指示。 在电池管理电量计论坛中,我们发现这样一个
    发表于 11-16 06:13

    如何保持电池电量计量准确度

    由于很多因素会影响到电量计IC,预测锂离子电池的剩余电量会很难;气温较低就是其中一个因素。市面上有几种电量计量IC;这些电量计量IC有几个特性,提供寒冷天气下运行时的准确性能,而这正是
    发表于 11-17 07:54

    如何简化电量计的使用?

    您可能听说过“电量计一点通”、“使用方便的电量计”、“电量计附加值产品”,甚至是“只需轻松点击即可使用电量计”等宣传措辞。事实上,要制作出“好”的电池
    发表于 07-10 17:56 2008次阅读

    TI电量计应用指导说明

    书,从 TI 电量计基础知识介绍、电量计开发和量产流程、 电量计算法、电量计电路设计、电量计通信及访问、典型应用设计要点等六部分展开论述,
    发表于 07-27 16:39 38次下载

    TI电量计应用指导中文版

    TI电量计中文指导,比较基础的指导关于电量计方面的知识。 电量计的介绍、电量计的开发、阻抗跟踪、CEDV电量计开发。
    发表于 10-19 16:05 0次下载

    RK3568 基于TI BQ40电量计调试

    本文基于IDO-SBC3568-V1BTIBQ40电量计调试IDO-SBC3568主板采用RK3568
    的头像 发表于 08-26 08:35 528次阅读
    <b class='flag-5'>RK3568</b> 基于TI BQ40<b class='flag-5'>电量计</b><b class='flag-5'>调试</b>