该系列文章总目录链接与各部分简介: 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

(1)BATT_ID 没接在电池上,外部下拉的100k电阻,如果电池电压不同还是能做区分的,当然battery-id不一定非得使用adc去读取,既然battery是基于i2c的设备,就一定能做到区分,通过power_supply_desc的get_property的方式同样可以客制化获取电池区分信息包含id。

BAT_THERM

玩转移远SC60 Android开发板------(5)充电和电池管理
VBAT_THERM 引脚若不连接,则会导致不开机、电池不能充电、电池电量显示错误等故障。
如果客户使用的电池没有热敏电阻,或者客户使用电源适配器对模块进行供电,则只需连接VBAT 和GND。
此时为防止系统误判电池不存在而导致无法开机,客户应该将VBAT_THERM 引脚通过一个47KΩ的电阻连接到GND。
可充电电池在不断的循环充电和放电过程中可能会导致电池温度的过高,导致电池原始性能下降,所以需要监控电池温度保持电池性能。

QPNP: Qualcomm Plug and Play(The input can be supplied to the device via either a DC or USB path. Output paths are
the VPH_PWR rail via the buck and a reverse boost feature on VCHG.)

Kernel

power/supply/qcom/qpnp-qg.c  -> iio/inkern.c -> (batt-therm - chip->batt_therm_chan)
&pmi632_qg{io-channels = <&pmi632_vadc ADC_BAT_THERM_PU1>, //SCALE_HW_CALIB_BATT_THERM_30K<&pmi632_vadc ADC_BAT_ID_PU2>;io-channel-names = "batt-therm", "batt-id";
}   &pmi632_charger{qcom,connector-internal-pull-kohm = <30>;  //write register BATIF_ADC_INTERNAL_PULL_UP_REG 电池ntc电阻
}
power/supply/qcom/qg-util.c  -> iio/inkern.c -> qcom-spmi-adc5.c(pmi632) -> qpnp-vadc-common.c
qg_get_battery_temp(batt-therm_chan)  -> read_raw -> adc_read_raw(based on kernel iio/iio_info) -> lux_table_30(vadc_map_pt)
依据电池spec去修改30k对应的lux_table_30的vadc_map_pt表

XBL

DalVAdc.c -> VAdc_DeviceInit -> VADC_BSP 获取vadcbsptype = VAdcBspPMI455(vadc_props.xml)VAdcSettings.c -> gVAdcChannelsPMI455 (vadc channel)
/* BATT_THERM_PU_30K (BAT_THERM pin) */
{.pszName                   = ADC_INPUT_BATT_THERM_PU_30K,.uAdcHardwareChannel       = 0x2a,.eSettlingDelay            = VADC_SETTLING_DELAY_100_US,.eAverageMode              = VADC_AVERAGE_1_SAMPLE,.eDecimationRatio          = VADC_DECIMATION_RATIO_1024,.eCalMethod                = VADC_CAL_METHOD_RATIOMETRIC,.scalingFactor             = {1, 1},  /* {num, den} */.eScalingMethod            = VADC_SCALE_THERMISTOR,.uPullUp                   = 30000,.pIntTable                 = &gVAdcSysThermTable, //vadc map表
},pm_get_adc_code_of_battery_temp + ADC_INPUT_BATT_THERM_PU_30K 获取电池温度

BAT_ID

Kernel

&pmi632_qg {qcom,battery-data = <&mtp_batterydata>;
}power/supply/qcom/qpnp-qg.c -> iio/inkern.c -> (batt-id - chip->batt_id_chan)-> get_batt_id_ohm(batt_id_chan) -> qg_load_battery_profile(qcom,battery-data)-> of_batterydata_get_best_profile通过iio读取adc的值获得battery-id,可用于区分battery-data(可以是大容量小容量区分),battery-id可误差率(qcom,batt-id-range-pct)
电池ID引脚内部的阻值qcom,batt-id-kohm = <100>,另外可通过qcom,battery-type来寻找最佳的profile

XBL

pm_sbl_get_batt_id + PM_BATT_ID_PU_30K + adc_read 同样通过adc对应的阻值通道读取值
battery id在XBL阶段中不一定能用到,所以有可能就是fake batteryid

JEITA

JEITA(Japan Electronics and Information Technology Industries Association)旨在低温和高温下提高锂离子电池充电的安全性
锂电池充电领域大多遵循了JEITA标准,JEITA成为了充电规范的一个代名词。

XBL Loader(SBL1)

Dead battery recovery takes place in two stages – XBL and UEFI
Dead Battery -> Weak Battery ->  Good BatterySBL1           XBL Core         HLOS

在DRR init之前必需PMIC init,DDR初始化之后通过(PIL peripheral image loading)加载各subsystem的镜像例如modem_a(ADSP CDSP…)

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

(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))

Android Qcom USB Driver学习(八)相关推荐

  1. Android Qcom USB Driver学习(二)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) BC v1.2充电规范 Battery Charging Specification USB port 如 ...

  2. Android Qcom USB Driver学习(一)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) USB接口类型 Android终端上常用的USB接口:TypeC(现在的主流),MicroB(以前的设备) ...

  3. Android Qcom USB Driver学习(六)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 眼图基础知识与详解 10分钟教会你看眼图 USB2.0 HUB眼图调试经验总结 一篇文章教你如何全面了解眼 ...

  4. Android Qcom USB Driver学习(四)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) VID/PID识别USB设备 CDC-ACM驱动介绍   CDC-ACM(Communication De ...

  5. Android Qcom USB Driver学习(九)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 高通的某些平台将电源管理移植到了ADSP Subsystem, 分析一下其中比较关心的部分 Archite ...

  6. Android Qcom Audio架构学习

    总结: Android Audio不简单呀,一个人摸索入门不容易的,研究了一段时间,感觉还不是很懂,但以下的知识对入门还是有帮助的. Audio架构中的名词 FE(Front End) 提供pcm的设 ...

  7. Android Qcom lcd display 学习(1)

    LCD的结构 TFT-LCD屏幕构造组成原理 Android LCD(一):LCD基本原理篇 LCD: 奇景光电 (hx8399) .敦泰 (ft8719) .京东方 .联咏等IC厂商 由于TFT-L ...

  8. Android Qcom lcd display 学习(4)

    DRM Linux DRM(二)基本概念和特性 DRM(Direct Rendering Manager)学习简介 DRM 的诞生就是用来处理多个程序对 Video Card 资源的协同使用问题,通过 ...

  9. Android Qcom lcd display 学习(3)

    Android Display整体架构 Android 图形组件 Android Graphic analyze display:高通display overview MDP(mobile displ ...

最新文章

  1. 字段缩写ti表示什么_【滴水研究】解码TI(一)
  2. thinkphp日志泄漏漏洞_ThinkPHP框架通杀所有版本的一个SQL注入漏洞详细分析及测试方法...
  3. Cortex-M3-异常与中断-向量表 s
  4. vue笔记(一)基本使用、数据检测
  5. dhtmlXTree 指南与实例(一)
  6. 在golang中defer、panic与recover的作用
  7. 【李宏毅机器学习】Transformer(p23) 学习笔记
  8. mit oracle 350平衡线,MIT MI-350 CVT 平衡线_已售器材欣赏区_信谊音响_二手音响_音响发烧站_高级音响 - 音响贵族网...
  9. 马云还曾有过这么一段求职经历
  10. 【计算几何】bzoj2338 [HNOI2011]数矩形
  11. TCP/IP协议 TCP包深入理解
  12. eclipse运行java快捷键_Eclipse快捷键【常用】
  13. Win10 中U盘不识别的解决方法
  14. 从零学IOS开发(一)
  15. 主权数字货币给世界银行业敲响警钟
  16. 查看计算机远程端口,如何查看服务器远程端口号.doc
  17. 微信小程序picker组件 - 省市二级联动
  18. BUUCTF-PWN刷题记录25(IO file attack)
  19. 信捷XD系列PLC程序远程上下载怎么做?
  20. Windows系统安装Mentor的Xpedition Enterprise VX.2.11工具

热门文章

  1. 产品经理入职新公司要做什么?
  2. 小白 uBuntu20.04 2 安装TP Link TL-WDN5200 无线网卡驱动 亲测有效
  3. Python数据分析三剑客学习笔记Day3——pandas包的使用:认识series类型,DataFrame类型,读取excel表格数据及数据操作
  4. Linux 命令 poll 和 ppoll 详解 + 实例
  5. 电脑连接信捷PLC方法
  6. 「大数据的关键思考系列」15:阿里巴巴的大数据实践(1)
  7. 工控安全PLC固件逆向一
  8. 如何生成高效、兼容性好的Poco定位脚本
  9. 形容谣言的四字词语_描写传递信息的四字词语
  10. 因子模型:套利定价理论APT