参考文档:
http://blog.csdn.net/zhandoushi1982/article/details/5804951
http://blog.csdn.net/ollins136/article/details/52230722?locationNum=1
http://blog.chinaunix.net/uid-9012903-id-2011559.html
在MTK中,Battery底层驱动主要涉及代码在这两个目录下:
\kernel-3.18\drivers\misc\mediatek\power\mt6735
\kernel-3.18\drivers\power\mediatek
一、充电流程介绍:当充电器插入时,亦即为PMIC充电模块提供了Vcharge电压,这时会产生一个充电中断信号到CPU,通知CPU现在已经进入充电状态。CPU开始启动如下模块:
1,ADC采样,主要是采集Vchrg,Vbat及从MOSFET漏极输出的电压,可以算出充电电压和充电电流;
2,发消息给MMI层,让它显示充电状态及一些采样数据;
3,检测电池电压有没有超过保护电压及电池连接是否连接正确,如果有问题即可通过CHRCTRL切断充电电路;
4,平时显示“充电器没有连接”警告,是因为PMIC的BATDET脚和MOSFET没有打开,从而没有充电电流引起的。
二、充电状态转换介绍:如果电池电压较低,只是预充的时间稍长一些,最多一两个小时应该可以完成预充电!一般电池都有自保护,不会把电放到0V的!
充电分三个过程:预充电、恒流充电(CC模式)、恒压充电(CV模式)(有些人也会分为四个阶段预充电、恒流充电(CC模式)、恒压充电(CV模式)、涓流充电)
1,当Vbat<3.3V 属于预充阶段,处于预充电状态时,以150mA电流涓流充电。PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态,这时CPU是不工作的!纯粹是硬件电路充电
2,当3.3V<bat<4.2V PMIC的LDO开始输出电压,从而cpu开始工作,这是进入恒流充电阶段,以大概600mA 电流快速充电。3.45V是开机电压,按开机键的话就会开机。
3,Vbat>4.2V 进入恒压充电阶段(属于TOPOFF的一个点,如下图),这个阶段电流逐渐变小,电压维持不变!当电流减小到接近为0(或者某个较小阀值)时,CPU发出控制信号这时停止充电!
图一是充电过程的整个状态图:
图一
下图二是内核层充电的一个框架图:
图二 内核层充电的一个框架图
从CC模式切换到CV模式在代码中的alps/mediatek/kernel/drivers/power/linear_charging.c和alps/mediatek/kernel/drivers/power/ switch_charging.c。
MTK Battery系统驱动的大致流程主要是通过系统platform总线注册device和driver,然后在probe函数里面创建了一个线程,然后创建一个hrtimer定时器,定时器每10s运行一次,同时在probe函数里面会创建一些设备节点,通过这些设备节点,系统将每10s更新的数据上传给上层供上层调用显示。