QSC11x0 charge总结.docx
- 文档编号:3497380
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:12
- 大小:492.41KB
QSC11x0 charge总结.docx
《QSC11x0 charge总结.docx》由会员分享,可在线阅读,更多相关《QSC11x0 charge总结.docx(12页珍藏版)》请在冰豆网上搜索。
QSC11x0charge总结
QSC11x0充电
一,硬件原理图
采用USB_VBUS接地,USB数据线的VBUS接VCHG,用VCHG检测USB的插拔。
此种电路接法的资料请参考文档“80-VN716-1_A_QSC11x0_VCHG_Support_USB_Detection.pdf”。
QSC11x0的充电过程大多数时候由硬件内部的FiniteStateMachine(FSM)控制,FSM不依赖软件就可以完成一次充电。
但是,手机启动前不支持FSM的滴流充电,这主要是出于充电温度的不确定性等因素。
因此,软件控制滴流充电还是必要的。
图
(1)QSC11x0电路原理图
二,充电流程图
如果定义了宏FEATURE_CHG_TASK,当手机开机后,初始化充电任务,调用chg_task不断的循环检测是否开始自动充电,见图
(2)。
整个充电过程的流程图见图(3)。
详见文档“80-VM467-1_B_Autonomous_Charging_SW_Usage_QSC1100_1110_6240_6270_ISOD.pdf”
图
(2)
图(3)ChargerFlowchart
三,代码实现
1,FSM控制充电的代码模块宏的设置
关闭宏
#defineFEATURE_BATTERY_CHARGER
添加宏
#defineFEATURE_CHG_TASK
2,充电相关的文件配置
头文件Pm66xxchg.h:
定义了充电相关的一些枚举类型,比如“pm_auto_chg_state_name_type”,“pm_pulse_chg_tdone_type;”。
Extern充电相关的函数,比如:
头文件Chg_config.h
配置一些充电电池在充电各种状态的电压值等信息。
比如:
3,充电过程
充电开始,先调用函数AutoChargingManager:
:
startShpAutoCharging(),先不使能自动充电
。
设置Vmaxsel电压为AUTO_CHARGING_VMAXSEL为4.2V,设置充满电压中断检测AUTO_CHARGING_VBATDET为4.15V等参数后,使能自动充电
。
更新记录充电状态的一些变量。
配置好参数,充电开始了,由FSM控制整个充电过程。
每五秒钟,通过调用函数AutoChargingManager:
:
getCurrentState()了解充电的状态,记录在枚举类型的变量
中。
例如,进入了快速充电状态,mCurrentState=CHG_AUTO__FAST_ST。
当充电快结束时mCurrentState=CHG_AUTO__PWR_ON_CHGR_ST,并且当
条件成立,完成最后一个周期的充电。
充电结束,调用函数AutoChargingManager:
:
stopAutoCharging();更新充电状态的参数。
注:
充电状态的转变调用函数AutoChargingManager:
:
EventFired(ChargingEvent*event)实现。
调用获取当前充电状态的函数接口,在pm66xxirqs.h中有介绍:
四,充电C++类
QSC11x0平台充电代码是由C++语言编写的,在头文件chg_autocharging.h中定义了几个重要的C++类。
下面介绍几个充电相关的类。
classAutoChargingManager:
publicChargingEventListener,
publicChargingEventGenerator
{
……
……
}
该类顾名思义管理充电的整个流程。
该类有以下几个私有成员变量:
pm_auto_chg_state_name_typemCurrentState;
记录各种充电状态;
boolmStateChangeIrqTriggered;
充电状态转换标志位;
boolmChargingDoneIrqTriggered;
充电完成标志位;
boolmIsInFinalCycle;
结束充电前的最后一个充电周期标志;
chg_general_status_typemGeneralStatus;
包含记录充电的一些状态的变量;
该类有以下公有成员函数:
virtualvoidEventFired(ChargingEvent*event);
充电状态的转变调用该函数;
BooleanIsCharging(){returnmGeneralStatus.is_charging;};
调用该函数判断手机是否在充电;
BooleanIsChargerValid(){returnmGeneralStatus.is_charger_valid;};
搜索“is_charger_valid”,正常充电返回TRUE。
BooleanIsBatteryValid(){returnmGeneralStatus.is_battery_valid;};
当充电状态为CHG_AUTO__AUTO_TRICKLE_FAILED_ST,或者mGeneralStatus.battery_status的值不等于BATTERY_STATUS__GOOD时返回FALSE,mGeneralStatus.battery_status的值可以调用函数pm_err_flag_typepm_get_rt_status(pm_rt_status_typert_status_id,boolean*rt_status)得知,该函数未给出完整的函数定义,具体功能请详见pm66xxirqs.h对其的注释。
chg_ui_event_typeGetUiEvent(){returnmGeneralStatus.ui_event;};
详见注释,用于UI显示充电图标等作用。
该类还包括以下保护类型的成员函数,上文已介绍:
还有一个类提一下,classAutoChargingManagerCVTopoff:
publicAutoChargingManager;显然,类AutoChargingManagerCVTopoff是继承于AutoChargingManager,拥有父类的除私有成员之外的所有功能,此次不累赘介绍。
若头文件custpmic3.h中定义了宏FEATURE_CHG_TASK_USE_CV_TOPOFF;这个类将使用软件方式控制PMIC3恒压充电直至Topoff状态,否则将使用类AutoChargingManager的功能。
该类在此文档上文中未用到,因没有定义宏FEATURE_CHG_TASK_USE_CV_TOPOFF。
在头文件chg_evt.h中定义了类
classChargingEvent{};及其子类classIrqEvent:
publicChargingEvent{};
大概介绍下两个类充电相关的中断请求命令的功能:
父类中有一公有成员函数chg_task_cmd_id_typeGetEventId(){returnmEventId;},子类中有一成员函数pm_irq_hdl_typeGetIrqId(){returnmIrqId;}。
AutoChargingManager:
:
EventFired(ChargingEvent*event)调用GetEventId(),若GetEventId()返回值为CHG_CMD__IRQ_TRIGGERED,根据irqid的值可知发生何种中断事件:
比如插入充电源USB,拔出USB,接入电池,拔出电池,充电状态变化,充电完成等。
(见文件chg_autocharging.cpp)
五,常见问题
(1)充电各种状态及其之间的转换
充电状态的转变调用函数AutoChargingManager:
:
EventFired(ChargingEvent*event)实现。
获取当前充电状态的函数接口在pm66xxirqs.h中有介绍:
由于只有函数接口,可能不是很直观的了解每个状态转换时对电池电压值的要求,若对手机充电感兴趣的话,可以用QXDM打log看看。
(2)电池温度检测
电池温度的检测,说白了,就是电池电压的反应。
电池中间有一个pin,该pin脚在电池正极和负极之间分压。
该pin脚连接手机的ADC转换器,芯片读取ADC的电压值,就可以获取电池目前的电量。
如果电池电压过高,该pin脚输出的电压超标,输出到ADC,再有ADC传输到芯片大脑,判断电压过高,即TOOHOT;反之,TOOCOLD。
电池温度是否超标,可用下面的函数检测,若超标,则mGeneralStatus.battery_status=BATTERY_STATUS__BAD_TEMP。
六,遗留的问题
由于自身水平有限,有个问题没有完全搞清楚。
USB充电和电信规范充电
USB充电D+和D-是分开的,且均为上拉高电平时开始充电。
电信规范充电器充电,充电器D+、D-短接。
QSC11x0下两者充电流程的区别?
和其他平台的区别是什么?
求给力解答!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QSC11x0 charge总结 charge 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)