MTK 6589充电模块分析

MT6589充电模块浅析

1. 原理图:

VBUS:USB正极

VCDT:充电电压检测脚

ISENSE:充电电流检测电阻的正极

BATSNS:充电电流检测电阻的负极

BAT:电池正极引脚

BAT_ON:电池NTC(热敏电阻)引脚

2.软件架构

3.充电电流、电压的计算



通过读取PMIC的寄存器直接可读到VBAT、VISENSE、VCharger、Vbat_temp






充电电流 = 电流检测电阻两端的电压/电流检测电阻


……



充电电压:MTK的ADC量程为2.8V,充电电压一般为5V左右,不能直接接ADC,所以采用分压电路量取分得的电压,算出充电电压。

4.电池容量算法


1.      线性插值法:

取电池容量0%, 10%, 20%, ……, 100% 11个点对应的电池电压,各个容量区间的具体电压通过线性得到。


……


2.      平均值法:

因为电池电压不稳定,存在跳变,所以对数据的变化需要做平均处理。

在没有插拔USB的情况下,电池信息数组每十秒抛出一个旧的值,填进一个最新的值,取得平均值供上报。


5.电池温度计算

通过ADC读到的Vntc电压可得到热敏电阻的实时阻值Rntc;再通过电池厂商提供的温度-阻值表和线性法得到电池实时温度。



……



二、充电流程

1.流程图:



2.状态机


3.      代码

注册platform设备、驱动,通过name匹配。




probe中创建class_dev


1.初始化hrtimer,设定每10sbattery kernel进程被唤醒一次;

2.创建并启动一个内核线程bat_thread_kthread;

3.检测到USB插拔事件batterykernel进程被唤醒。


bat_thread_kthread();中一个while(1)的循环中包了一个BAT_thread();函数,充电的核心函数。

3.1 BAT_thread();函数的前段:

BAT_CheckBatteryStatus();函数主要完成更新电池数据(电压、电量、电流和温度)、检查电池状态(若温度超过限定范围,置BMA_status.bat_charging_state为CHR_ERROR)


3.2 BAT_thread();函数的中段:电池数据更新、上报

3.3 BAT_thread();函数的最后

 

BAT_PreChargeModeAction();

增加PRE_charging_time、total_charging_time

使能充电

当电池电压到达V_PRE2CC_THRES(3.4V)进入恒压(CC)充电


BAT_ConstantCurrentModeAction();

增加CC_charging_time、total_charging_time

使能充电

当电池电压到达V_CC2TOPOFF_THRES(4.05V)进入恒压(CV)充电


BAT_TopOffModeAction();

增加TOPOFF_charging_time、total_charging_time

继续使能充电


在thread中会有判断,进入CHR_BATFULL的条件



BAT_BatteryFullAction();清零计时器,停止充电



BAT_BatteryStatusFailAction();

清零计时器,停止充电

 

 

三、电池数据上报

1.大体流程

当驱动挂载到内核上的时候,内核提供给驱动的接口就是一个结构体power_supply,主要是利用了 uevent 的通讯机制实现用户态和内核态的交互,另外还涉及了sys 文件系统里的文件创建 。


mt6320_battery_main中的结构体成员psy就是power_supply类型



2.注册节点

mt6320_battery_probe()里调用power_supply_core.c中power_supply_register();函数来注册class_dev


power_supply_core.c中会创建class下的power_supply节点, 注册后生成ac, usb,battery节点



power_supply_register();函数中还会完成工作队列初始化


其中power_supply_changed_work();函数:

加自旋锁、uevent事件上报(判断changed为true,则上报)、解自旋锁


3.uevent何时上报

在BAT_Thread();函数里


mt6320_battery_update();函数中会根据不同状态对mt6320_battery_data结构体赋值,最后调用power_supply_changed();函数触发uevent事件上报。


……

power_supply_changed();函数中置changed为true


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MTK6589驱动和刷机工具.rar是一种用于安装驱动和刷机的软件压缩包。MTK6589驱动是为适配MTK6589芯片的设备提供的一种驱动程序,它可以使计算机正确识别和连接MTK6589芯片的设备。刷机工具则是用于给设备刷写ROM(固件)的软件,通过刷机可以更新、修复或定制设备的操作系统。 使用MTK6589驱动和刷机工具.rar前,我们需要将其解压缩到计算机的某个目录中。解压缩后,我们可以找到驱动程序和刷机工具。 接下来,我们需要先安装MTK6589驱动。首先,通过USB线将MTK6589设备与电脑连接。然后,在计算机中找到解压缩出的驱动程序文件夹,双击运行驱动程序的安装程序。按照提示完成驱动程序的安装。 安装完成后,我们可以运行刷机工具。同样需要通过USB线将设备与电脑连接。打开刷机工具,选择需要刷写的ROM文件,然后按照工具界面的提示进行操作。通常刷机的过程会擦除设备上的所有数据,请提前备份所有重要数据。 刷机完成后,设备会自动重新启动,并加载新的操作系统。刷机可以帮助我们改进设备的性能,修复系统错误或实现个性化定制。然而,刷机也存在风险,错误的操作可能导致设备变砖或丢失数据,因此在刷机前需谨慎操作,并确保备份所有重要数据。 MTK6589驱动和刷机工具.rar是一种方便快捷的安装驱动和刷机工具,它可以帮助我们更好地管理和优化MTK6589设备的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值