MT8735 andorid7.0 充电调试总结(1)——MTK电源管理(MT6318)
2017-12-05 18:19
246 查看
1、 充电线路
1.1 充电线路
1.2 预充电路
1.3 OVP电路
1.4 6305OVP电路
2、 充电过程
2.1 充电流程
2.2 MT6318充电状态转换图
//下面是详细介绍
1、 充电线路
为了方便查看,将每一部分电路独立的画出来了
1.1 充电电路
说明:
1、左边的ADC3_VCHG通过R1、R2组成的分压电路检测充电电压。
2、VCHARGE的范围:4.2V<VCHARGE<9V。AC口最大可承受15V,USB口最大可承受9V
3、VCHARGE通过P-MOS管,Shottkey二极管,充电电阻连接到VBAT,组成充电回路,6318通过控制G极电压,从而控制Vgs,达到控制充电电流的目的,二极管是为防止电流倒灌。下面是MOS管的转移特性图。下图应该有些错误,其实Vgs、Id都是负值。可以看到,当Vgs越负时,漏极电流越大。
4、ISENSE、VBAT连接到充电电阻两端,在IC内部,这两路按以下连接。
可以编程实现分压还是直接连接。BASEBAND根据这两个电压(ISNSE_OUT,VB_OUT)以及充电电阻就可以算出充电电流(两种连接方式不一样)。LAYOUT时要注意,这两根线最好走成粗细长度都相同,这样电压检测才准确,充电电流的检测才准确。
1.2 预充电路
说明:1、当电池电压VBAT<3.3V时,SEL1=L,SEL2=H,左边的MOS管导通,右边的MOS管关断。PMU采用Vcharge供电,实现预充显示。当VBAT>3.3V时,SEL1=H,SEL2=L,左边的MOS管关断,右边的MOS管导通。采用电池供电。要想有预充显示功能,还需SEL1_EN(H3)=H。
2、两个管子均是P-MOS管,作为开关用。所不同的是,左边的MOS管还带了一个肖特基二极管,以防止VBAT电流倒灌到VCHARGE。另外左边的MOS管不仅仅是作为开关用,还可以改变栅极电压来改变整个管子的压降,以控制输入到PMIC的电压在3.8V左右。当时,左边的MOS管导通,右边的MOS管关断。
3、SEL1,SEL2均是VCHARGE供电的。
1.3 过压保护及温度检测电路
说明:1、VCHARGE通过R1、R2分压以后连接到BAT_ON。当BAT_ON>2.5V时,电池没有连接,PMIC会立即停止充电。可以计算该处OVP电压为:V=(2.5+0.3)*42/18=6.5V
2、电池温度检测:AVDD通过R3和电池内部的10K温敏电阻分压。当电池温度变化时,温敏电阻的值会改变,从而上面的电压跟着改变,ADC2_TBAT检测该电压。
3、两个二极管的作用是隔离,否则,两边的检测会相互受到影响。
充电过程
kernel层充电相关函数介绍
alps\kernel-3.10\drivers\power\mediatek目录下:
battery_common.c -----------充电控制主线程
battery_meter.c -----------SW FG算法
linear_charging.c ----------PMIC充电控制
switch_charging.c ---------SW charger充电控制
充电相关的需要客制化的代码路径
//ZCV曲线
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6
4000
735\aeon6735m_65u_s_l1\power目录下cust_battery_meter_table.h 和 cust_battery_meter.h 这两个文件,根据电池厂家提供的ZCV参数更新这两个文件下对应4个温度下的参数即可{放电深度,电池电压}; {电池内阻,电池电压}
;同时还要更新NTC电阻曲线{温度,NTC电阻值}
//充电电流精度设置
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\cust_battery_meter.h
#define CUST_R_SENSE 56 -------从基带那边获取,影响充电电流的精度
//充电电池内部温度检测电阻设置
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_battery_meter_table.h
#define BAT_NTC_10 1
#define BAT_NTC_47 0
#if (BAT_NTC_10 == 1)
#define RBAT_PULL_UP_R 16900
#define RBAT_PULL_DOWN_R 27000
#endif
#if (BAT_NTC_47 == 1)
#define RBAT_PULL_UP_R 61900
#define RBAT_PULL_DOWN_R 100000
#endif
#define RBAT_PULL_UP_VOLT 1800
这里定义电池内部温度检测电阻,上拉电阻及电压,从基带那里获取这些信息。
//电池高低温停充/恢复充电
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
#define MAX_CHARGE_TEMPERATURE 50
#define MIN_CHARGE_TEMPERATURE 0
#define ERR_CHARGE_TEMPERATURE 0xFF
//充电电流设置
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
Lk: \alps\bootable\bootloader\lk\target\aeon6735m_65u_s_l1\include\target\ cust_battery.h
/* Charging Current Setting */
#define USB_CHARGER_CURRENT Cust_CC_450MA
#define AC_CHARGER_CURRENT Cust_CC_650MA
以上这些客制化的设置在7.0后,都集中到如下文件去设置
B:\drivers\kernel-3.18\arch\arm64\boot\dts\neostra8735_tb_n_bat_setting.dtsi
2.1 基本流程
电池充电过程分三个阶段:预充电、恒流充电和恒压充电。
1.预充电:当Vbat<3.4V时即进入此阶段,此时PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态。预充电流一般相对较小,理论上不要超过0.2C
2.恒流充电:当3.4<Vbat<4.2V时进入此阶段,此时PMIC的LDO开始输出电压,CPU开始工作。
3.恒压充电:当Vbat>4.2V后进入此阶段,此时充电电流会越来越小,电压维持不变
2.2 MT6318充电状态转换图
注意以下几点:
1. 充电的条件: 电池连接OK(BAT_ON=0);充电器连接OK(CHR_DEC=1);充电电压不过高(OV=0)
2. 预充转换到CC的条件是VBAT>3.3V,而CC装换到预充的条件是 VBAT<3.0V,这个主要是为了防止当VBAT在3.3V附近时,在两个状态间不停切换。同样的道理,CC到CV的过程也是一样的。
1.1 充电线路
1.2 预充电路
1.3 OVP电路
1.4 6305OVP电路
2、 充电过程
2.1 充电流程
2.2 MT6318充电状态转换图
//下面是详细介绍
1、 充电线路
为了方便查看,将每一部分电路独立的画出来了
1.1 充电电路
说明:
1、左边的ADC3_VCHG通过R1、R2组成的分压电路检测充电电压。
2、VCHARGE的范围:4.2V<VCHARGE<9V。AC口最大可承受15V,USB口最大可承受9V
3、VCHARGE通过P-MOS管,Shottkey二极管,充电电阻连接到VBAT,组成充电回路,6318通过控制G极电压,从而控制Vgs,达到控制充电电流的目的,二极管是为防止电流倒灌。下面是MOS管的转移特性图。下图应该有些错误,其实Vgs、Id都是负值。可以看到,当Vgs越负时,漏极电流越大。
4、ISENSE、VBAT连接到充电电阻两端,在IC内部,这两路按以下连接。
可以编程实现分压还是直接连接。BASEBAND根据这两个电压(ISNSE_OUT,VB_OUT)以及充电电阻就可以算出充电电流(两种连接方式不一样)。LAYOUT时要注意,这两根线最好走成粗细长度都相同,这样电压检测才准确,充电电流的检测才准确。
1.2 预充电路
说明:1、当电池电压VBAT<3.3V时,SEL1=L,SEL2=H,左边的MOS管导通,右边的MOS管关断。PMU采用Vcharge供电,实现预充显示。当VBAT>3.3V时,SEL1=H,SEL2=L,左边的MOS管关断,右边的MOS管导通。采用电池供电。要想有预充显示功能,还需SEL1_EN(H3)=H。
2、两个管子均是P-MOS管,作为开关用。所不同的是,左边的MOS管还带了一个肖特基二极管,以防止VBAT电流倒灌到VCHARGE。另外左边的MOS管不仅仅是作为开关用,还可以改变栅极电压来改变整个管子的压降,以控制输入到PMIC的电压在3.8V左右。当时,左边的MOS管导通,右边的MOS管关断。
3、SEL1,SEL2均是VCHARGE供电的。
1.3 过压保护及温度检测电路
说明:1、VCHARGE通过R1、R2分压以后连接到BAT_ON。当BAT_ON>2.5V时,电池没有连接,PMIC会立即停止充电。可以计算该处OVP电压为:V=(2.5+0.3)*42/18=6.5V
2、电池温度检测:AVDD通过R3和电池内部的10K温敏电阻分压。当电池温度变化时,温敏电阻的值会改变,从而上面的电压跟着改变,ADC2_TBAT检测该电压。
3、两个二极管的作用是隔离,否则,两边的检测会相互受到影响。
充电过程
kernel层充电相关函数介绍
alps\kernel-3.10\drivers\power\mediatek目录下:
battery_common.c -----------充电控制主线程
battery_meter.c -----------SW FG算法
linear_charging.c ----------PMIC充电控制
switch_charging.c ---------SW charger充电控制
充电相关的需要客制化的代码路径
//ZCV曲线
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6
4000
735\aeon6735m_65u_s_l1\power目录下cust_battery_meter_table.h 和 cust_battery_meter.h 这两个文件,根据电池厂家提供的ZCV参数更新这两个文件下对应4个温度下的参数即可{放电深度,电池电压}; {电池内阻,电池电压}
;同时还要更新NTC电阻曲线{温度,NTC电阻值}
//充电电流精度设置
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\cust_battery_meter.h
#define CUST_R_SENSE 56 -------从基带那边获取,影响充电电流的精度
//充电电池内部温度检测电阻设置
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_battery_meter_table.h
#define BAT_NTC_10 1
#define BAT_NTC_47 0
#if (BAT_NTC_10 == 1)
#define RBAT_PULL_UP_R 16900
#define RBAT_PULL_DOWN_R 27000
#endif
#if (BAT_NTC_47 == 1)
#define RBAT_PULL_UP_R 61900
#define RBAT_PULL_DOWN_R 100000
#endif
#define RBAT_PULL_UP_VOLT 1800
这里定义电池内部温度检测电阻,上拉电阻及电压,从基带那里获取这些信息。
//电池高低温停充/恢复充电
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
#define MAX_CHARGE_TEMPERATURE 50
#define MIN_CHARGE_TEMPERATURE 0
#define ERR_CHARGE_TEMPERATURE 0xFF
//充电电流设置
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
Lk: \alps\bootable\bootloader\lk\target\aeon6735m_65u_s_l1\include\target\ cust_battery.h
/* Charging Current Setting */
#define USB_CHARGER_CURRENT Cust_CC_450MA
#define AC_CHARGER_CURRENT Cust_CC_650MA
以上这些客制化的设置在7.0后,都集中到如下文件去设置
B:\drivers\kernel-3.18\arch\arm64\boot\dts\neostra8735_tb_n_bat_setting.dtsi
2.1 基本流程
电池充电过程分三个阶段:预充电、恒流充电和恒压充电。
1.预充电:当Vbat<3.4V时即进入此阶段,此时PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态。预充电流一般相对较小,理论上不要超过0.2C
2.恒流充电:当3.4<Vbat<4.2V时进入此阶段,此时PMIC的LDO开始输出电压,CPU开始工作。
3.恒压充电:当Vbat>4.2V后进入此阶段,此时充电电流会越来越小,电压维持不变
2.2 MT6318充电状态转换图
注意以下几点:
1. 充电的条件: 电池连接OK(BAT_ON=0);充电器连接OK(CHR_DEC=1);充电电压不过高(OV=0)
2. 预充转换到CC的条件是VBAT>3.3V,而CC装换到预充的条件是 VBAT<3.0V,这个主要是为了防止当VBAT在3.3V附近时,在两个状态间不停切换。同样的道理,CC到CV的过程也是一样的。
相关文章推荐
- MT8735 andorid7.0 充电调试总结(2)——电池驱动流程关键代码分析
- MT8735 andorid7.0 充电调试总结(3)——移植外部充电IC bq24298
- mt8735 andorid7.0 lcm调试总结
- javascript在vs2003中调试随笔和Fitch and Mather 7.0中javascript使用小总结
- MTK平台充电调试总结
- MTK65XX平台充电调试总结
- mt8735 andorid7.0 lcm Icn6202驱动(lk)
- MTK65XX平台充电调试总结
- MTK65XX平台充电调试总结
- Oracle PL/SQL开发利器-Toad应用总结(一)-PL/SQL Program基本编写、调试
- shell脚本学习总结11--脚本调试
- 【前端】复杂环境本地调试H5页面方案总结
- 调试路由器认证平台小总结
- VS 的Command Window 调试命令的总结
- console调试JS总结
- JLINK 裸机调试 OK6410 总结
- eclipse下使用gdb+j-link调试总结
- 【Andorid学习笔记】LogCat日志调试工具
- iOS开发之Xcode常用调试(Debug)技巧总结
- struts 2初学和常见的代码调试 报错总结