Android Qcom USB Driver学习(八)
因为要看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 45
err_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_type
sbl_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: Ohms
PM_BATT_ID_PU_30K, //battery ID pull up resistor value
3300, //bootup_battery_theshold_mv
3300, //wipowr bootup battery thesholdmv
2800, //apsd_reset_threshold_mv: APSD reset only applicable if initial Vbatt level is less than this threshold
2800, //apsd_reset_theshold_no_uvlo_mv: Used if last reset reason is NOT UVLO
3200, //apsd_reset_theshold_uvlo_mv: Used if last reset reason is UVLO
TRUE, //Enable/Disable JEITA Hard Temp Limit Check in SBL
TRUE, //dbc_usb_500_mode
TRUE, //Verbose SBL CHG UART logging
1, //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 = 60
QcomChargerPlatform.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 800000
101 400 2000000
401 450 2000000>;
qcom,jeita-fv-ranges = < //各jeita范围内电压
0 100 4180000
101 400 4350000
401 450 4350000>;
Charging phases

(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_data
pm_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))
Android Qcom USB Driver学习(八)的更多相关文章
- Delphi 调试连接 任意Android手机/平板/盒子(要安装Google USB Driver,并且还有USB的相关许多文章)
Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...
- CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android. Buffer Overflow Vulnerability reported by #plzdonthackme, Soctt.
CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android.Buffer Overflow Vu ...
- Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...
- Android Wear(手表)开发 - 学习指南
版权声明:欢迎自由转载-非商用-非衍生-保持署名.作者:Benhero,博客地址:http://www.cnblogs.com/benhero/ Android Wear开发 - 学习指南 http: ...
- Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局
Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...
- Android 音视频开发学习思路
Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...
- Head First Android --- Enable USB debugging on your device
1. Enable USB debugging on your device On your device, open “Developer options” (in Android 4.0 o ...
- Android命令行工具学习总结
15.setting命令 setting命令可以很方便的更改系统设置中的参数(如修改系统默认输入法) 安卓Settings模块浅析:https://www.jianshu.com/p/ed8508fe ...
- 移动设备 小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法
小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法 by:授客 QQ:1033553122 用户环境 操作系统:Win7 手机设备:小米2S 问题描 ...
- android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget
MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议.早在智能手机普及前,数码相机和MP3播放器等都使用了MTP的前身PTP(Pictu ...
随机推荐
- redis实现分片集群
为什么要使用分片集群? 主从和哨兵可以解决高可用.高并发读的问题.但是仍存在海量数据存储.高并发写问题 分片集群特征: 集群中有多个master,每个master保存不同数据. 为master置备了后 ...
- elasticsearch初步使用学习
通过使用elasticsearch,我们可以加快搜索时间(直接使用SQL的模糊查询搜索耗时会比较久,而且elasticsearch的响应耗时与数据量关系不大) es主要用于存储,计算,搜索数据 依次部 ...
- SEO初学指南之关键词研究(2) - 搜索意图分析
Hi,我是听风.这篇文章我们深入探讨下关键词研究中最重要的一点:搜索意图. 虽然这在本系列教程的第一篇中提到过搜索意图,但是我还是想再写一篇文章来帮助你们了解什么是搜索意图以及如何再关键词研究中使用它 ...
- Jmeter函数助手31-changeCase
changeCase函数用于字符转换大小写. 字符串修改:填入需要转换的字符 更改案例模式UPPER(默认),LOWER,CAPITALIZE:不填默认UPPER,UPPER全部转换为大写,LOWER ...
- SQL提高查询性能的几种方式
创建索引,提高性能 索引可以极大地提高查询性能,其背后的原理: 索引是的数据库引擎能够快速的找到表中的数据,它们类似于书籍的目录,使得你不需要逐页查找所需要的信息 索引能够帮助数据库引擎直接定位到所需 ...
- CUDA11.3编译pytorch2.0.1报错:error: ‘nvmlProcessInfo_v1_t’ was not declared in this scope
问题如题: CUDA11.3编译pytorch2.0.1报错:error: 'nvmlProcessInfo_v1_t' was not declared in this scope 解决方法参考: ...
- LeetCode40.组合总和II
LeetCode40.组合总和II 力扣题目链接(opens new window) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...
- Typora中的markdown语法的学习
markdown语法学习 二级标题 三级标题 四级标题 字体 hello world hello world hello world hello world 引用 我是最nb的 分割线 图片 ctrl ...
- C#反射在数据库操作中的应用(反射属性,反射字段)
这几天学习反射的应用,今天把其应用到数据操作中 现记录学习笔记 环境为: 编译器:vs2017 数据库:access 反射类型为:字段 1先在类文件的定义是用哪种数据库,和用字段还是属性来反射 本例是 ...
- php预定义变量~$_SERVER[‘QUERY_STRING‘]
php $_SERVER['QUERY_STRING']函数 • 简介$_SERVER函数( 获取当前服务器信息) 预定义变量就是系统自己定义好的变量,直接使用就可以.预定义变量都是以数组的形式存在的 ...