电池充电是由qpnp-vm-bus.c(电池驱动BMS)和qpnp-linear-charger.c(线性充电器)组成;

SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压外围设备

CV:ConstantVoltage恒压

CC:ConstantCurrent恒流

FET:Field EffectTransistor场效应管

AICL:Automactic ImputCurrent Limit自动输入电流限制

QPNP:QualcommPlug N Play高通即插即用

对应源代码:

kernel\drivers\power\qpnp-linear-charger.c

1. 电池充放电电路连接

VBAT(电池正极)---------------------->PMIC:VPH_PWR

VBUS(如USB线,USB充电器、DC充电器)--------------------->PMIC:VBUS_USBIN

2. PM8909 Linear Charger(线性充电器)

可见PM8909线性充电器包括LinearCharger和VM-BM部分,下面介绍LinearCharger部分

3. Linear Charger Peripherals

QPNP线性充电器主要的模块如下:

3.1 Charger peripheral(LBC_CHGR)充电外设

  • VBAT_STATUS:电池电压状态(weak,good,ornear end-of-charge)

  • IBAT_MAX:最大的电池充电电流设置

  • IBAT_SAFE:最大的电池安全充电电流设置(可配置一次)

  • 充电中断状态,比如CHG_DONE,CHG_FAILED等等

  • VDD_MAX:最大电池电压,典型值为4.2V或是4.35V

  • VDD_SAFE:最高的电池安全电压(可配置一次),典型值为4.5V

  • VIN_MIN:充电器最小电压输入电压,应比VDD_MAX高100mV,这个是VBUS进到充电IC的最低电压。

  • CHG_CTRL:使能/禁用或是暂停充电

  • VBAT_TRKL:ATC A阈值,TRKL指Trikle

  • VBAT_WEAK:ATC B软件充电阈值

  • IBAT_ATC_B:ATC B阶段或是软件阈值最大充电电流

  • Safety timers:安全计时器,TCHG_MAX和TTRKL_MAX

可参考下面的信息便于理解

kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skue.dtsi

&pm8909_chg {

       qcom,vddmax-mv= <4350>;

       qcom,vddsafe-mv= <4380>;

       qcom,vinmin-mv= <4470>;

       …

}

3.2 USB charging path(LBC_USB)

(1) Power路径选择和状态

(2) USB充电器电压有效性(validity)

(3) 充电器存在状态

(4) USB充电器过压和低压设置

(5) 如果USB连接无效或是没有枚举到,USB挂起设置

(6) USB枚举计时器设置和停止位

3.3 Battery interface(LBC_BAT_IF)电池接口

(1) 电池存在和电池热敏电阻/ID存在状态

(2) 电池温度状态

(3) VREF_BAT_THM配置

(4) 电池FET状态

(5) 通过电池ID和热敏电阻来检测电池是否存在

(6) 电池温度阈值调整

(7) 内部BATFET调节器控制

3.4 LBC miscellaneous(LBC_MISC)

(1) 自适应升压控制设置

(2) Vbat_Boot_treshold状态

(3) Boot done bit status。

PM8909 linear charger硬件概述的更多相关文章

  1. 最简单的方法是使用标准的 Linux GUI 程序之一: i-nex 收集硬件信息,并且类似于 Windows 下流行的 CPU-Z 的显示。 HardInfo 显示硬件具体信息,甚至包括一组八个的流行的性能基准程序,你可以用它们评估你的系统性能。 KInfoCenter 和 Lshw 也能够显示硬件的详细信息,并且可以从许多软件仓库中获取。

    最简单的方法是使用标准的 Linux GUI 程序之一: i-nex 收集硬件信息,并且类似于 Windows 下流行的 CPU-Z 的显示. HardInfo 显示硬件具体信息,甚至包括一组八个的流 ...

  2. [ZZ] HDR the bungie way

    http://blog.csdn.net/toughbro/article/details/6755394 bufferencoding游戏float算法 bungie 06年,gamefest上的p ...

  3. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  4. SLAM+语音机器人DIY系列:(三)感知与大脑——1.ydlidar-x4激光雷达

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  5. SLAM+语音机器人DIY系列:(三)感知与大脑——3.轮式里程计与运动控制

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  6. WinIo驱动级键盘模拟编程

    转自:http://blog.sina.com.cn/s/blog_455d7a320100vr37.html 前天无聊,翻翻自己的兴趣项目文件夹,发现了这个放下很久的项目!那是大三时候的事了.当时是 ...

  7. OneNET麒麟座应用开发之八:采集大气压力等环境参数

    采集大气压力和温度也是核算大气标准状况下的各种数据的必须参数,为此我们必须知道压力和温度才能计算标准状况下的各种参数,于此我们需要一个既能检测压力也能检测温度的元件. 1.硬件概述 MS5837压力传 ...

  8. 4G通信模块在ARM平台下的应用

    4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...

  9. 4G 通信模块在ARM 平台下的应用

    收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在A ...

随机推荐

  1. WPF炫酷UI及动画

    偶然看见了一张图,感觉挺好看的,花了点时间将他转化成了我代码仓库的一部分.虽然不难但也费时间.其中除了背景是百度的一张底图,其他所有内容均通过WPF的Path.Line.TextBlock.Borde ...

  2. 爬虫(四):requests模块

    1. requests模块 1.1 requests简介 requests 是一个功能强大.简单易用的 HTTP 请求库,比起之前用到的urllib模块,requests模块的api更加便捷.(本质就 ...

  3. 简洁优雅的Python教你如何在工作中“偷懒”

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: A字头 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  4. 松软科技web课堂:随机Math.random()

    Math.random() 返回 0(包括) 至 1(不包括) 之间的随机数: 实例 Math.random(); // 返回随机数 JavaScript 随机整数 Math.random() 与 M ...

  5. Hackme: 1: Vulnhub Walkthrough

    下载链接: https://www.vulnhub.com/entry/hackme-1,330/ 网络扫描探测: ╰─ nmap -p1-65535 -sV -A 10.10.202.131 22/ ...

  6. Python装饰器(Decorators )

    http://book.pythontips.com/en/latest/decorators.html 在<Built-in Functions(3.6)>和<Python上下文管 ...

  7. Mybatis XML映射文件

    mybatis为聚焦于SQL而构建,SQL映射文件常用的顶级元素如 resultMap,是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象. insert,映射插入语句 update, ...

  8. mysql实践:sql优化

    ---恢复内容开始--- 设计表的时候 1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差) 2. 不要一张表放太多的数据     主表20~30个字段   ...

  9. Java之ArrayList类(集合)

    集合的由来 我们想存储多个数据,选择的容器可以是数组.而数组的长度是固定的,无法适应数据变化的需求.为了解决这个问题,Java提供了另一个容器 java.util.ArrayList 集合类,让我们可 ...

  10. 3万字长文概述:通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?

    [转载]通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的 ...