Android Qcom USB Driver学习(八)

news/2024/9/19 16:57:34/文章来源:https://www.cnblogs.com/linhaostudy/p/18375924

因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧

BAT SCH

(1)VBATT_VSNS_P

(2)BAT_THERM

(3)I2C_SDA

(4)I2C_SCL

(5)VBATT_VSNS_M

sbl1_hw_pre_ddr_init: (1)pm_device_init (2)pm_driver_init (3) pm_sbl_chg_init (1)
pm_device_init没有研究过,也是一些初始化
(2)
pm_sbl_boot_oem.c -> pm_driver_post_init  (通过write register的方法来配置jeita)err_flag |= pm_comm_write_byte(0x2 , 0x1094, 0x0F, 0x0); //warm 45err_flag |= pm_comm_write_byte(0x2 , 0x1095, 0xDC, 0x0); //warm 45
依据各项目ic pmic的datasheet找到对应寄存器进行修改
(3)
pm_config_target.c -> strcut sbl_schg_specific_data  (charger parameters chg_param_ptr)
包括usb输出电流(USBIN Input Current Limit),开机电压(bootup_battery_theshold_mv),jeita限制(Enable/Disable JEITA Hard Temp Limit Check in SBL)等等
pm_sbl_schg_specific_data_typesbl_schg_specific_data[1] ={{//Configuration Value,                             Enable config{PM_SCHG_BATIF_LOW_BATTERY_THRESH_3P2,             PM_DISABLE_CONFIG },  //Vlowbatt Threshold{PM_SCHG_BATIF_LOW_BATTERY_THRESH_2P8,             PM_ENABLE_CONFIG  },  //APSD rerun Vlowbatt Threshold{70,                                               PM_ENABLE_CONFIG  },  //Fg skin hot threshold: valid range is -30 to 97 degree C{80,                                               PM_ENABLE_CONFIG  },  //Fg skin too hot threshold: valid range is -30 to 97 degree C{80,                                               PM_ENABLE_CONFIG  },  //Fg charge hot threshold: valid range is -30 to 97 degree C{90,                                               PM_ENABLE_CONFIG  },  //Fg charge too hot threshold: valid range is -30 to 97 degree C{TRUE,                                             PM_DISABLE_CONFIG },  //Use BATID and/or THERM pin for battery missing detection{{TRUE, PM_SCHG_MISC_SNARL_WDOG_TMOUT_62P5MS, PM_SCHG_MISC_BARK_WDOG_TMOUT_128S, PM_SCHG_MISC_BITE_WDOG_TMOUT_8S}, PM_ENABLE_CONFIG },  //Enable/Disable and Timeout WDog Config{2000,                                             PM_ENABLE_CONFIG },  //FAST Charging Current{300,                                              PM_ENABLE_CONFIG },  //PRE Charge Current{4400,                                             PM_ENABLE_CONFIG },  //Float Voltage{2500,                                             PM_ENABLE_CONFIG  },  //USBIN Input Current Limit{1000,                                             PM_DISABLE_CONFIG },  //DCIN Input Current Limit{6750, 8250,                                       PM_ENABLE_CONFIG  },  //Fake battery detection range: Battery will be detected as fake battery if BATT ID in this range. unit: Ohms{2000, 14000},                                                           //Debug Board detect: BATT_ID PD Resistor ADC Min/Max Read Value range; unit: OhmsPM_BATT_ID_PU_30K,                                                       //battery ID pull up resistor value3300,                                                                    //bootup_battery_theshold_mv3300,                                                                    //wipowr bootup battery thesholdmv2800,                                                                    //apsd_reset_threshold_mv:  APSD reset only applicable if initial Vbatt level is less than this threshold2800,                                                                    //apsd_reset_theshold_no_uvlo_mv: Used if last reset reason is NOT UVLO3200,                                                                    //apsd_reset_theshold_uvlo_mv: Used if last reset reason is UVLOTRUE,                                                                    //Enable/Disable JEITA Hard Temp Limit Check in SBLTRUE,                                                                    //dbc_usb_500_modeTRUE,                                                                   //Verbose SBL CHG UART logging1,																	   //Pmic index of charger}};pm_sbl_boot.c  -> pm_app_chgr.c -> pm_sbl_config_chg_parameters ↓↓↓
pm_sbl_boot.c  -> pm_app_chgr.c -> pm_sbl_chg_check_weak_battery_status
应用上述的chg_param_ptr, 在weak battery的状态下不会开机(即SBL Charging in progress....) + 闪红灯(Toggle Red LED)

XBL Core

QcomChargerConfig_VbattTh.cfg	
BootToHLOSThresholdInMv = 3300 
JeitaHardColdLimit = 0
JeitaSoftColdLimit = 10
JeitaSoftHotLimit  = 45
JeitaHardHotLimit  = 60QcomChargerPlatform.c -> ChargerPlatform_ReadCfgParams -> ChargerPlatform_Init
if (CurrentBatteryStatus.BatteryVoltage >= gThresholdVbatt)*pActionType = EFI_QCOM_CHARGER_ACTION_GOOD_TO_BOOT;

Kernel

qcom,fastchg-current-ma = <2000>;          //最大快充电流
/* COOL = 10 degc, WARM = 40 degC*/        //jeita配置
qcom,jeita-soft-thresholds = <0x2ed8 0x1045>; <SOFT_COLD_ADC_CODE, SOFT_HOT_ADC_CODE>
/* COLD = 0 degC, HOT = 45 degC*/
qcom,jeita-hard-thresholds = <0x3e3d 0x0D85>; <HARD_COLD_ADC_CODE, HARD_HOT_ADC_CODE>
qcom,jeita-fcc-ranges = <                  //各jeita范围内电流0 100 800000101 400 2000000401 450 2000000>;
qcom,jeita-fv-ranges = <                   //各jeita范围内电压0 100 4180000101 400 4350000401 450 4350000>;

Charging phases

image

(1) Trickle-charge  < 2.1V 45mA
(2) Preconditioning(precharge) > 2.1V + PRE Charge Current
(3) Constant current(fast charge) < Float Voltage + Fast Charging Current
(4) Constatnt voltage(taper charge) = Float Voltage
Chargint phase的配置还是发生在SBL1/XBL阶段,在高通平台上除了(1)Trigckle_charge都是可配置的,配置可见上述sbl_schg_specific_datapm_sbl_boot.c  -> pm_app_chgr.c -> pm_sbl_config_chg_parameters-> pm_schg_chgr_set_charge_current(PRE Charge Current(2))-> pm_schg_chgr_set_charge_current(FAST Charging Current(3))-> pm_schg_chgr_set_float_volt(Float Voltage(4))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786079.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JuiceFS 在多云架构中加速大模型推理

在大模型的开发与应用中,数据预处理、模型开发、训练和推理构成四个关键环节。本文将重点探讨推理环节。在之前的博客中,社区用户 BentoML 和贝壳的案例提到了使用 JuiceFS 社区版来提高模型加载的效率。本文将结合我们的实际经验,详细介绍企业版在此场景下的优势。 下图是一…

基础组件:ICON

Flutter 中,可以像 Web 开发一样使用 iconfont,iconfont 即“字体图标”,它是将图标做成字体文件,然后通过指定不同的字符而显示不同的图片。在字体文件中,每一个字符都对应一个位码,而每一个位码对应一个显示字形,不同的字体就是指字形不同,即字符对应的字形是不同的。…

Docker部署Nginx,无法访问的解决办法

最近用阿里云的服务器部署了一下Nginx,发现无法通过外网访问,排除掉防火墙和端口映射的问题,最终在阿里云官方发现解决办法,docker0网桥的网段与内网eth0网段冲突,可能导致Nginx无法访问,修改Docker的网段后正常访问. 1.运行以下命令,查看docker0和eth0网段是否冲突 route …

一起单测引起的项目加载失败惨案

一、前言最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对Javaassist包进行排包或者升版本处理。通过排包解决掉单测报错,在部署项目时发现频繁报bean注入失败问题…

基础组件:图片

Flutter 中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。 ImageProvider ImageProvider 是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvider ,如AssetImage是实现了从Asset中…

第6篇 好用免费的开发AI:FittenCode Chart,功能类似chatgpt

你所不知道的免费,又好用的AI,帮助你提高工作效率; 1.打开vs,点击扩展》管理工具,然后搜索Fitten Code,安装下载完成后,重新打开vs2.打开vs,管理工具,就会出现Fitten Code ,选择 open chat window,解决方案管理下就会出现Fittencode Chart,3.输入问题,就可以对话,…

SonarQube 安装及使用

简介 SonarQube是一款用于代码质量管理的开源工具,是静态代码检查工具,采用 B/S 架构它主要用于管理源代码的质量,可以支持众多计算机语言,比如 php,java, C#, go,C/C++, Cobol, JavaScrip, Groovy 等。sonar 可以通过 PMD,CheckStyle,Findbugs 等等代码规则检测工具来…

基础组件:按钮

Material 组件库中提供了多种按钮组件如ElevatedButton、TextButton、OutlinedButton等,它们都是直接或间接对RawMaterialButton组件的包装定制,所以他们大多数属性都和RawMaterialButton一样。在介绍各个按钮时我们先介绍其默认外观,而按钮的外观大都可以通过属性来自定义,…

线性dp:最长公共子串

最长公共子串本文讲解的题与leetcode718.最长重复子数组,题意一模一样,阅读完本文以后可以去挑战这题。力扣链接 题目叙述: 给定两个字符串,输出其最长公共子串的长度。 输入 ABACCB AACCAB输出 3解释 最长公共子串是ACC,其长度为3。 与最长公共子序列的区别公共子串:字符…

【matplotlib教程】数据可视化

@TOC显示中文和负号matplotlib默认使用英文字库,汉字会乱码,要指定中文字库matplotlib.rcParams[font.family]=simHei #黑体 matplotlib.pyplot.rcParams[axes.unicode_minus] = False # 显示负号1.各种绘图函数 1.1 matplotlib.pyplot.plot def plot(*args, scalex=True, s…