ChargerFuelGauge (Riogande platform)
1. *#*#4636#*#* 可查看 手机信息,电池信息
2. https://wiki.sonyericsson.net/androiki/Fuel_Gauge_FAQ 如何抓fuel gauge 的log
a. How to save kernel logs to phone memory
$ adb shell
mkdir /data/debugfs
mount -t debugfs none /data/debugfs
echo -n 'file ab8500_charger.c +p' > /data/debugfs/dynamic_debug/control
echo -n 'file ab8500_chargalg.c +p' > /data/debugfs/dynamic_debug/control
echo -n 'file ab8500_fg.c +p' > /data/debugfs/dynamic_debug/control
echo -n 'file ab8500_btemp.c +p' > /data/debugfs/dynamic_debug/control
exit
adb remount
adb shell chmod 6755 /system/bin/klogger
adb shell setprop persist.kernel.log uart
adb shell klogger &
b. And to run klogger on every boot up, you should run this
adb shell
mkdir /data/data/com.sonyericsson.android.logalong
mkdir /data/data/com.sonyericsson.android.logalong/files
echo -e "kernel;" >> /data/data/com.sonyericsson.android.logalong/files/logalongBootCompleted
c. Kernel logs will be saved either at
/data/data/kernel0.txt
/data/data/kernel1.txt
or at
/sdcard/kernel0.txt
/sdcard/kernel1.txt
用以上方法有时候抓不到代码中,dev_dbg的log, 另外我们可以在你需要输出dev_dbg的*.c文件中定义#define DEBUG即可
3. Riogrande 平台上 charge only(电池电量不够,不能开机,只能进入开机充电画面)的程序在vendor/semc/hardware/power/chargemon 下面
3.1 在手机上init.st-ericsson.rc中有
on early-boot
# Start the offline charging (This blocks booting further in some cases)
exec /system/bin/chargemon
3.2 分析main@vendor/semc/hardware/power/chargemon/main.c
4. 关于充电的驱动代码位于/kernel/drivers/power/ab8500_btemp.c, ab8500_chargalg.c(charge algorithm),ab8500_charger.c(charge driver), ab8500_fg.c, power_supply_core.c, power_supply_sysfs.c, power_supply_leds.c, power_supply.c ;
5. DMS01203256
6. 手机中/sys/class/power_supply/包含相关的 充电信息
7. ab8500_charger_set_vbus_in_curr@kernel/drivers/power/ab8500_charger.c ,该函数会设置充电电流限制
8. kernel/arch/arm/mach-ux500/charger-lotus.c中有充电电流限制的定义
struct device_data device_data = {
.charge_full_design = 1500, /* C */
.normal_cur_lvl = 1050, /* 0.7C */
};
9. 在kernel/drivers/power/ab8500_charger.c中,ab8500_charger_irq结构设置(中断处理函数)-->ab8500_charger_usb_link_status_work-->ab8500_charger_detect_chargers(区分charger类型:USB_PW_CONN/USB charger;AC_PW_CONN/AC charger);
a. 如果是USB charger则 ab8500_charger_read_usb_type->ab8500_charger_max_usb_curr->ab8500_charger_set_vbus_in_curr[usb charger]和ab8500_charger_set_output_curr[wall charger]-->ab8500_charger_set_current,该函数根据识别的USB type规定充电的最大电流;
b. 如果是AC charger则ab8500_charger_psy_changed ????-->ab8500_charger_usb_en(当用wall charger连上手机时)
10. Read USB charge current now: adb shell cat /sys/class/power_supply/ab8500_usb/current_now; //估计应该是charger的最大限流
Read battery current now: adb shell cat /sys/class/power_supply/ab8500_fg/current_now;//是从电池流入或者流出的电流;如果正在充电,则是充电器的电流减去系统消耗的电流(可正可负,比如如果系统耗电> 500mA,而用PC USB充电的限流又是500mA,则这时候电池也会提供部分电流给系统用);如果没有充电,则是电池提供给系统的电流(为负)
11. adb8500_charger_probe@ad8500_charger.c中有当手机启动就连着usb cable的处理,通过charger_status = ab8500_charger_detect_chargers(di, true);识别连着的charger类型
12. 分析几种USB充电的类型
12.1 手机startup完后,用wall charger充电
a. ab8500_charger_vbusdetr_handler中断处理函数检测到usb cable插入,VBUS rise信号会触发(log: VBUS rising detected)
b. ab8500_charger_detect_usb_type_work-->ab8500_charger_detect_chargers, 有AB8500_CH_USBCH_STAT1_REG=3 (log: AB8500_CH_USBCH_STAT1_REG 3)
c. ab8500_charger_usb_notifier_call(log: not a standard host, returning),谁触发的?
d. ab8500_charger_usblinkstatus_handler(log: USB link status changed)->ab8500_charger_usb_link_status_work->ab8500_charger_detect_chargers->ab8500_charger_read_usb_type->ab8500_charger_max_usb_curr[get usb type = USB_STAT_DEDICATED_CHG](log: USB Type - 0x07 MaxCurr: 1500)->启动ab8500_charger_usb_link_attach_work
e. ab8500_charger_usb_link_attach_work->ab8500_charger_set_usb_connected(log: connected 1)->???
f. ab8500_charger_usb_en(log: Enable USB: 4000mV 400mA)->ab8500_charger_set_vbus_in_curr(log: VBUS input current limit set to 1500 mA
)->ab8500_charger_set_current(log: Auto VBUS curr is 50 mA 和 curr change_2 to: 10 for 0xc2 ...逐步100mA调整,0x0BC2寄存器是UsbChCurrLevel,是充电控制器的输入,可以设置充电器的输入电流)
g. 接上,ab8500_charger_set_output_curr[设置充电器输出电流,寄存器0x0B42 ChOutCurrLevel],另外ab8500_charger_usb_en在此期间还会被触发,谁干的呢?
h. 触发ab8500_charger_vbuschdropend_handler(谁触发?log: VBUS charger drop ended)->ab8500_charger_vbus_drop_end_work->ab8500_charger_set_vbus_in_curr->ab8500_charger_set_current 会调整充电电流,ab8500的charger有自己的充电算法控制充电电流,我们可以通过读取0xBC2得到当前的充电电流(有log输出VBUS input current limit), 再读取0xB03获取可自动调整的输入充电电流(有log输出setAuto VBUS curr),为防止电压下降;比较两者0xBC2[实际的充电电流]和0xB03寄存器是UsbChStatus2用于读取当前充电器的输入电流[ab8500的HW 计算出来的最优输入电流,防止压降] 然后逐步调整(100mA)
i. 充电器的USB cable被拔掉(VBUS falling),触发ab8500_charger_vbusdetf_handler->ab8500_charger_detect_usb_type_work
j. 主要的几个控制寄存器,
UsbChStatus2(0xB03): Result of automatic input current limitation (to avoid to Vbus voltage to drop). Input current limitation can be from 90mA to 1.3A by about 100mA steps
UsbChCurrLevel(0x0BC2): USB charger current control
ChOutCurrLevel(0xB42):Defined charger output current when Btemp above Medium threshold and below High threshold. Setting from 100mA to 1.5A by 100mA steps
12.2 手机startup完后,用USB charger充电
ChargerFuelGauge (Riogande platform)相关推荐
- AIOT时代来临,物联网平台(IoT Platform)真有那么重要吗?
AIOT is comming 2019年悄悄的过去,曾今在作文中展望的2020马上就要到了,岁月如梭,每天度过的生活好像都是一样的,殊不知,5G已在悄然布局,人工智能.云计算.大数据.物联网,这些已 ...
- 用户画像-标签体系(dwt层)
1 前言 最近在学习用户画像,翻看了七十多份资料,简单过了一遍赵宏田老师的书,最近又看了许多微信公众号里的文章. 整体感受就是,资料太杂.内容太乱.重复的太多.相互间也会有些冲突.但大致可以归为两类: ...
- BI数据分析专业词汇整理(1/9)
*ROI测算: 实验组假设不做活动日活跃天 = 对照组日活跃天 * (实验组流量 / 对照组流量) 实验组收益 = 实验组日活跃天 - 实验组假设不做活动日活跃天 *A\B测试实验结束后需要: 1-反 ...
- 《中国联通5G行业专网白皮书》发布!(附下载)
近日,中国联通发布<5G行业专网白皮书>.白皮书中指出,中国联通5G专网分为三种类型:5G虚拟专网.5G混合专网.5G独立专网. 5G专网类型 5G虚拟专网 指基于中国联通5G公众网络资源 ...
- TOGAF10®标准中文版(全文目录)
The Open Group是一个通过技术标准实现业务目标的全球联盟.我们拥有超过870个成员组织,成员来自技术社区的各个部门,包括客户.系统和解决方案供应商.工具供应商.集成商和顾问,以及学者和研究 ...
- OM | 具有弹性需求的广义随机共乘(拼车)用户均衡问题
编者按: 通过扩展确定性共乘用户均衡问题,提出了具有弹性需求的广义随机共乘用户均衡问题,用于具有共乘出行活动的城市交通网络分析. 1.引言 共乘(ridesharing), 即生活中的"拼 ...
- 车载软件背景(留坑)
目前,车载软件已经成为汽车电子系统中不可或缺的一部分.随着汽车制造商不断增加车载软件的功能和性能,车载软件的市场规模也在不断扩大.据市场研究公司 Grand View Research 预测,到202 ...
- 【学习笔记】低代码平台(LCAP:Low-Code Application Platform)
学习笔记:低代码平台(LCAP:Low-Code Application Platform) [概念] 开发者写很少的代码,通过低代码平台提供的界面.逻辑.对象.流程等可视化编排工具来完成大量的开发工 ...
- 基于低代码平台(Low Code Platform)开发中小企业信息化项目
前言:中小企业信息化需求强烈,对于开发中小企业信息化项目的软件工作和程序员来说,如何根据中小企业的特点,快速理解其信息化项目的需求并及时交付项目,是一个值得关注和研讨的话题. 最近几年来,随着全球经济 ...
最新文章
- 人名翻译_考研英语翻译:句子中出现人名怎么办?
- 浅谈JavaScript中按键事件的e.keyCode || e.which || e.charCode
- 查询数据库游标使用情况以及sql
- Sublime Text 设置在标签页中打开文件
- 春眠不觉晓,读书醒醒脑|世界读书日送送送10本硬核书
- 传智播客 C/C++学习笔记 在向指针所指空间copy数值,要分配内存
- 记录gns3出现各种erro报错以及具体修复过程
- 电脑文件夹同步软件哪个比较好用?
- 如何在安装时备份sis文件
- Xshell vim使用右侧数字键盘时数字变成英文字母的解决办法
- 蒙泰RIP快捷键大全
- LwIP 协议栈移植教程
- Window-10 Hyper-V 安装 Windows 10
- 自己写的java excel导出工具类
- 对互联网的认识和看法,直接关系到产业互联网的路径发展
- 【Python】第二章 内置数据类型
- lycos搜索引擎_搜索元老Lycos计划在2013年推全新搜索引擎
- 应届生从头脑风暴到游戏策划案的个人思路(三)(初稿)
- ISO9001认证多少钱?
- 3D中的方位和角位移(2)