因为要看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学习(八)的更多相关文章

  1. Delphi 调试连接 任意Android手机/平板/盒子(要安装Google USB Driver,并且还有USB的相关许多文章)

    Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...

  2. 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 ...

  3. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  4. Android Wear(手表)开发 - 学习指南

    版权声明:欢迎自由转载-非商用-非衍生-保持署名.作者:Benhero,博客地址:http://www.cnblogs.com/benhero/ Android Wear开发 - 学习指南 http: ...

  5. Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局

    Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...

  6. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  7. 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 ...

  8. Android命令行工具学习总结

    15.setting命令 setting命令可以很方便的更改系统设置中的参数(如修改系统默认输入法) 安卓Settings模块浅析:https://www.jianshu.com/p/ed8508fe ...

  9. 移动设备 小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法

    小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法 by:授客 QQ:1033553122 用户环境 操作系统:Win7 手机设备:小米2S   问题描 ...

  10. android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget

    MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议.早在智能手机普及前,数码相机和MP3播放器等都使用了MTP的前身PTP(Pictu ...

随机推荐

  1. java开发,json转list集合,原生实现

    java 是一门面象对象的语言,对象需要先定义,但是在外理网络请求时候会用到json 转成java 对象,虽然现代开发框架中也提供了很多工具和方法直接转换, 但是作为学习者了解 一下底层实现,更能灵活 ...

  2. 写写Redis十大类型GEO(地理空间)的常用命令

    又是一个用于处理sql性能的类型,这个类型的核心思想就是把三维的地球变成二维的坐标,再将二维的坐标换成一维的点块,最后将一维的点块转化成base32编码 类型就是zset, 在shell的启动命令后加 ...

  3. Linux podman容器实验

    要求 1.登录到指定的镜像仓库拉取镜像 2.以普通用户contsvc运行 3.配置 systemd-journald 服务,要求永久保留日志数据(物理机,创建文件mkdir /var/log/jour ...

  4. Jmeter二次开发函数之入门

    背景:Jmeter不能满足我们的参数需求,如生成手机号码.身份证号码等业务,固对jmeter进行二次函数开发. jmeter提供了接口供用户进行二次开发,我们只需引入包进行编辑.从jmeter规范上, ...

  5. 【MongoDB】Re02 文档CRUD

    三.文档操作(行记录) 不管comment集合是否存在,直接在comment集合中创建一份文档 > db.comment.insert({"articleid":" ...

  6. AI辅助教学,甚至AI教学,逐渐成为可能

    看新闻,有感: 太火爆!一门课,两个月吸粉十五万人!企业纷纷布局!千亿级大市场,来了?

  7. baselines算法库common/tile_images.py模块分析

    该模块只有一个函数,全部内容: import numpy as np def tile_images(img_nhwc): """ Tile N images into ...

  8. Apache DolphinScheduler 3.2.1 版本发布:增强功能与安全性的全面升级

    近期,Apache DolphinScheduler 社区激动地宣布 3.2.1 版本的发布.此次更新不仅着力解决了前一版本(3.2.0)中遗留的问题,而且引入了一系列的功能增强和优化措施. 原先的问 ...

  9. Flutter&Dart Callback转同步

    前言 怎么将一个Callback回调转化成Future同步方法(Callback to Future),可以配套async / await去使用呢? 个人觉得,这是一个很常见的现象,不知道为啥,很多人 ...

  10. Sy.ExpressionBuilder 动态查询新体验

    省流模式,看下对比 //常规查询 var query = users .WhereIf(m => m.UserName.Contains(input.UserName), !string.IsN ...