高通 Msm835平台充电功能的开发与调试

2023-11-15

目录

平台充电相关代码:

835平台kernel充电相关代码:

关机充电的系统相关代码:

835平台UEFI 充电相关代码:

835平台电池曲线:

电池曲线大体内容如下:

kernel 电池曲线的提交:

XBL 关于充电曲线的提交:

充电相关调试方法

充电时,通过串口打印充电相关参数的命令如下

充电温度控制相关修改:

835平台充电相关配置参数


平台充电相关代码:

835平台kernel充电相关代码:

  • driver/power/supply/qcom/qpnp-fg-gen3.c 电池电量相关驱动代码
  • driver/power/supply/qcom/battery.c 电池充电相关代码
  • driver/power/supply/qcom/qpnp-smb2.c  高通充电控制相关代码
  • driver/power/supply/qcom/smb-lib.c 高通充电控制相关代码
  • arch/arm/boot/dts/qcom/msm8998-mtp.dtsi 电池曲线配置
  • arch/arm/boot/dts/qcom/msm-pmi8998.dtsi 关于 pmi8998 相关的配置

关机充电的系统相关代码:

  • ap/system/core/healthd/  关机充电的总体架构,
  • ap/device/qcom/common/healthd/    关机充电平台相关的屏幕显示,指示灯控制灯具体函数的实现。

835平台UEFI 充电相关代码:

  • boot_images/QcomPkg/Library/ChargerLib
  • boot_images/QcomPkg/Drivers/QcomChargerDxe ChargerLib 和QcomChargerDxe 目录下的代码提供UEFI充电和电量相关函数
  • boot_images/QcomPkg/Drivers/PmicDxe UEFI PMIC相关函数
  • boot_images /QcomPkg/Application/QcomChargerApp QcomChargerApp是UEFI充电的总体流程。QcomChargerApp.c文件中,EFI_STATUS QcomChargerApp_Entry()是入口函数。调用如下相关的函数,直到充电到阈值。

    Status |= QcomChargerApp_Initialize(ChargingAction);
    if(EFI_SUCCESS == Status)
    {
        Status |= QcomChargerApp_MonitorCharging();
        Status |= QcomChargerApp_PostProcessing();
    }
    

835平台电池曲线:

电池曲线大体内容如下:

qcom,3055372_goertek_falconaec_3950mah_averaged_masterslave_aug21st2017 {
    qcom, = <24>;
    qcom,max-voltage-uv = <4350000>;       //电池最大充电电压
    qcom,fg-cc-cv-threshold-mv = <4340>;   //恒流到恒压充电
    qcom,fastchg-current-ma = <3000>;      //电池的最大充电电流
    qcom,nom-batt-capacity-mah = <3950>;   //电池容量
    qcom,batt-id-kohm = <100>;             //电池的ID 阻抗
    qcom,battery-beta = <3435>;
    qcom,battery-type = "3055372_goertek_falconaec_3950mah_averaged_masterslave_aug21st2017";
    qcom,checksum = <0x0F66>;
    qcom,gui-version = "PMI8998GUI - 2.0.0.58";
    qcom,fg-profile-data = [ 
        94 1F 9E 05
        64 0A 5B 06
        7A 1D 77 F5
        EF 0B DF 14
        8B 18 E5 22
        B2 45 7E 52
        5B 00 00 00
        0F 00 00 00]

kernel 电池曲线的提交:

在msm8998-mtp.dtsi文件中,定义调用哪个电池曲线,如下代码调用了fg-gen3-batterydata-goertek-3950mah.dtsi 中的电池曲线。在高通调试电池曲线后,给的文件提交到arch/arm/boot/dts/qcom/目录下,修改#include”“,调用相应的曲线。

&vendor {
    mtp_batterydata: qcom,battery-data {
        qcom,batt-id-range-pct = <15>;
        #include "fg-gen3-batterydata-goertek-3950mah.dtsi"
    };
};
&pmi8998_fg {
    qcom,battery-data = <&mtp_batterydata>;
};

XBL 关于充电曲线的提交:

高通调完电池曲线,在给的文件中有.csv的文件。把此文件重命名为BATTERY.PROVISION,替换路径 boot_imagesQcomPkgDriversQcomChargerDxeBATTERY.PROVISION下的高通原始文件。

充电相关调试方法

  1. 通过adb 查看spmi8998 相关寄存器

下面的实例如何dump FG BATT_SOC 相关寄存器:

/sys/kernel/debug/regmap/spmi0-02 # echo 0xFF > count
/sys/kernel/debug/regmap/spmi0-02 # echo 0x4000 > address
/sys/kernel/debug/regmap/spmi0-02 # cat data

充电时,通过串口打印充电相关参数的命令如下

当测试充电时,通过串口设置如下命令,可以10秒钟,上传一次当前电量、充电电流、充电电压、充电状态、充电温度、充电类型。

while true;do 
echo "capacity : `cat /sys/class/power_supply/battery/capacity`";
echo "current_now : `cat /sys/class/power_supply/battery/current_now`";
echo "voltage_now : `cat /sys/class/power_supply/battery/voltage_now`";
echo "status : `cat /sys/class/power_supply/battery/status`";
echo "temp : `cat /sys/class/power_supply/battery/temp`";
echo "chg_type : `cat /sys/class/power_supply/battery/charge_type`";
echo "date : `date`";sleep 10;echo =====;
done

关于充电相关的 sys 节点:

/sys/class/power_supply/battery

充电温度控制相关修改:

835平台充电电压、电流根据温度设置如下图形所示:

设置4个温度点,五个区间分别为cold、cool、normal 、 warm 、hot, 此4个温度点寄存器地址如下:

0x00004162    FG_BATT_INFO_JEITA_TOO_COLD
0x00004163    FG_BATT_INFO_JEITA_COLD
0x00004164    FG_BATT_INFO_JEITA_HOT
0x00004165    FG_BATT_INFO_JEITA_TOO_HOT

此四个温度默认值为: 0 、5 、45、50度。可以通过如下程序修改:

#define DEFAULT_BATT_TEMP_COLD          -5
#define DEFAULT_BATT_TEMP_COOL          0
#define DEFAULT_BATT_TEMP_WARM          50
#define DEFAULT_BATT_TEMP_HOT           55

也可通过 如下dtsi 修改:

&pmi8998_fg {
    qcom,battery-data = <&mtp_batterydata>;
    qcom,fg-jeita-thresholds = <-5 0 50 55>;
 };

当在cold和hot区间时,电池不充电,当在cool和warm区间时,电池的充电电压,充电电流为JEITA_FVCOMP和JEITA_CCCOMP。 此两个值分别在如下寄存器中设置: | 0x00001091 | SCHG8998_CHGR_JEITA_FVCOMP_CFG | 寄存器默认值为:0x0E, 默认电压为:4.35 – 0.105 = 4.25 附近。 | 0x00001092 | SCHG8998_CHGR_JEITA_CCCOMP_CFG | 寄存器默认值为:0x28, 默认电流为:3A – 1A = 2A 如果需要修改此区间的充电电压、充电电流修改相应的寄存器即可。

835平台充电相关配置参数

qcom,fg-chg-term-current = <200>;
充电截止电流, 当电流小于此值时,充电结束。系统默认值为 100ma

qcom,fg-sys-term-current = <(-250)>; 系统截止电流,当充电电流大于此值时,电量为 100%。 系统默认值为 -125ma。

qcom,fg-recharge-voltage = <4250>; / example only 4.25V / 系统低于此阈值时,自动充电,此值默认为 4250 mv

CV戴在头上不充电的节点和相关代码: 不充电设置:

echo 1 > /sys/kernel/debug/qpnp-smbcharger/disable_chg

充电设置:

echo 0 > /sys/kernel/debug/qpnp-smbcharger/disable_chg

kernel/msm-4.4/drivers/power/supply/qcom/qpnp-smb2.c文件中添加如下相关代码:

rc = vote(chip->chg_disable_votable, USER_VOTER, val, 0);

参考文档:

  • 80-P2484-74_MSM8998 Linux Android PMIC Fuel Gauge Software.pdf
  • 80-VT310-138_Understanding PMI8998 Fuel Gauge.pdf
  • 80-p1087-2x_b_pmi8998_hardware_register_description.pdf
  • 80-p2484-42_a_uefi_pmic_software_user_guide.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高通 Msm835平台充电功能的开发与调试 的相关文章

随机推荐

  • 【C++简明教程】随机数生成

    导言 C 简明教程 每次更新将会以代码块的形式发布 可以作为手册或者模块以供查询 今天介绍的是如何使用 C 生成随机数 随机数生成 C 自带的随机数生成函数 rand 但是这个不是实际意义上的随机数生成函数 rand 返回一随机数值的范围在
  • activemq结合mqtt发送p2p消息

    实现思路 所有用户订阅一个主题 当服务器端发起推送时使用jms协议发送消息到主题 并设置附带属性为目标用户的clientId 对该主题进行自定义分发策略 1 下载mqtt源码 自行下载 本案例以5 5 10为例 2 自定义分发策略 添加一个
  • BIO、NIO、AIO的区别

    1 简单介绍 同步阻塞 blocking IO 简称BIO 同步非阻塞 non blocking IO 简称NIO 异步非阻塞 asynchronous non blocking IO 简称AIO BIO 同步阻塞I O模式 数据的读取写入
  • 若依实现父弹窗获取子弹窗的数据

    参考这个 RuoYi 弹出新窗口选择数据回显到父页面 https blog csdn net u014440968 article details 116266076 还有官方的demo就行 最终实现效果 关键的方法 父页面 div cla
  • 基于ESB权限初始化流程开发总结

    在集团信息化系统的建设过程中 由于应用系统数量日益增多 很多集团缺少一个能有效地将众多系统身份认证 账号管理 授权等功能集成的软件系统 由此IDM应运而生 在IDM中统一权限的功能资源模块是对下游系统的平台进行功能资源的统一管控 在管控之前
  • HTTP学习——网关

    网关可以作为一种翻译器使用 抽象出了一种能够到达资源的方法 网关和代理的区别 代理连接的是两个或多个使用相同协议的应用程序 而网关连接的则是两个或多个使用不同协议的端点 网关扮演的是 协议转换器 的角色 Web网关在一侧使用HTTP协议 在
  • 离散数学 --- 命题逻辑 -- 命题符号化与命题公式

    第一部分 命题符号化及其应用 1 等价连接词中 P Q同为真同为假时为真 真假不同时为假 下面是各个联结词的真值表 复合命题的真值只取决于通过联结词构成他的简单命题的真值 与简单命题的内容无关 比如 中国在地球上且太阳东升西落 这是一个复合
  • 记录DHCP IPV6遇到的问题(一)

    进行DHCP IPV6连接的时候 经常遇到设备获取过一次地址后 在短时间内再次重新主动进行一次DHCP IPV6连接 会连接失败 从抓包来分析就是上行服务器不响应 通过与服务器方的沟通 了解到一点 服务器会记录请求设备的mac和DUID 是
  • SpringMVC的架构有什么优势?——视图与模型(二)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 一文拆解Faas的真实案例

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文来自腾讯云技术沙龙 本次沙龙主题为Serverless架构开发与SCF部署实践 刘敏洁 具有多年云计算行业经验 曾任职于华为 UCloud等企业担任产品开发 产品经理 目前负责腾
  • meedu二次开发:企业内部使用 必须登录之后才能查看里面内容

    meedu二次开发 修改成企业内部培训系统功能 用户必须登录之后才能查看里面课程内容
  • C语言第五章第4节用for语句实现循环学习导案

    课 题 5 4 用for语句实现循环 课时安排 2课时 课 型 新授 学 习目标 掌握for循环语句的一般形式 掌握for循环语句的执行过程 重点 for循环语句的一般形式 难点 理解for循环语句的执行过程并会做题 导 学 流 程 复备或
  • 实习日志3.22

    今天是实习的第一天 主要做了以下工作 1 安装vs2017 在csdn直接下载安装包 官网找不到2017版本的社区版 2 配置opencv编译环境 4 2 0版本 推荐b站up3 3 遇到了bug 找不到opencv core420d dd
  • PyTorch报错insufficient shared memory (shm)

    报错 ERROR Unexpected bus error encountered in worker This might be caused by insufficient shared memory shm ERROR Unexpec
  • 高并发分布式架构演进

    架构演进过程如下 单机架构 第一次演进 Tomcat与数据库分开部署 第二次演进 引入本地缓存和分布式缓存 第三次演进 引入反向代理实现负载均衡 第四次演进 数据库读写分离 第五次演进 数据库按业务分库 第六次演进 把大表拆分为小表 第七次
  • 哈工大计算机系统大作业

    哈工大计算机系统大作业 摘要 本文主要阐述在Linux系统下hello程序的生命周期 了解hello程序从hello c经过预处理 编译 汇编 链接生成可执行文件的全过程 结合课本的知识详细阐述计算机系统是如何对hello进行进程管理 存储
  • git commit 提交失败

    git commit 之后提示 原因 对项目进行git 操作的时候 会调用到pre commit的插件 它对代码风格进行检查 不符合规范则取消commit 操作 导致无法push 解决方案 方案一 git commit no verify
  • 打包aab教程,模拟器安装aab教程

    一 aab 打包 Android App Bundle aab 是谷歌新的安卓安装文件 其实也就是根据 cpu 架构和语言等 切分多个 apk 以减少包体体积 aab 打包有以下两种方式 AS 打包 Android Studio 打包 类型
  • Stack的三种含义

    学习编程的时候 经常会看到stack这个词 它的中文名字叫做 栈 理解这个概念 对于理解程序的运行至关重要 容易混淆的是 这个词其实有三种含义 适用于不同的场合 必须加以区分 含义一 数据结构 stack的第一种含义是一组数据的存放方式 特
  • 高通 Msm835平台充电功能的开发与调试

    目录 平台充电相关代码 835平台kernel充电相关代码 关机充电的系统相关代码 835平台UEFI 充电相关代码 835平台电池曲线 电池曲线大体内容如下 kernel 电池曲线的提交 XBL 关于充电曲线的提交 充电相关调试方法 充电