MTK添加充电(快充)

MT6735 - battery相关笔记 (充电、电池状态、zvc、driver与service通信) 充电 kernel-3.18/drivers/misc/mediatek/include/mt-plat/mt6735/include/mach/mt_charging.h #define AC_CHARGER_CURRENT CHARGE_CURRENT_800_00_MA //先跑这个 kernel-3.18/arch/arm64/boot/dts/mt6735.dtsi / 阅读详情

1.在添加充电之前,看准原理图弄清楚,你的充电是通过还是走pmic的线性充电还是外置充电IC

我用我项目情况mt6370芯片(支持快充)举例子

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/mt6370.dtsi

mt6370,intr_gpio_num = <11>; /* direct defined GPIO num */
mt6370,intr_gpio = <&pio 11 0x0>; /* GPIO */

最好还同步配置一下dws

<gpio11>
                <eint_mode>true</eint_mode>
                <def_mode>0</def_mode>
                <inpull_en>true</inpull_en>
                <inpull_selhigh>true</inpull_selhigh>
                <def_dir>IN</def_dir>
                <out_high>false</out_high>
                <varName0>GPIO_SUBPMIC_IRQB_EINT_PIN</varName0>
                <smt>false</smt>
                <ies>true</ies>
 </gpio11>

配置好对应的pmic中断,你就会发现有充电图标显示了,不过此时充电电流只有0.5A左右

2.配置充电电流为2A左右(测量的时候充电器和线不适配可能会电流计显示偏差)

device/mediateksample/$(yourprojectname)/ProjectConfig.mk

MTK_DUAL_CHARGER_SUPPORT = no    //外部充电ic的时候启用比如sd7601,rt9465

$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_debug_defconfig

$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_defconfig

#  CONFIG_CHARGER_RT9465 is not set

很多时候需要把不用的宏开关给关掉,要不在某些驱动里面会识别运行,可能会让器件运行不起来(我就遇到过一次调试的时候因为添加打印log,打印出来的信息编码对不上,是乱码,造成系统一直开机重启,把log信息去掉就好了)

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/mt6370.dtsi

aicr = <2000000>;    /* uA */            //设置输入电流的平均值2A
mivr = <4200000>;    /* uV */          //输入电压最小限定,原来是4.6,看你具体情况看要不要改

不改的无视下面46改42的修改部分

相关参数定义

ICHG = “設定的充電電流”,
AICR = “AICR 保護下允許的最高抽電流”
MIVR = “設定的允許的充電器最低電壓”
IEOC = “設定的截止充電電流”
CV = “設定的Constant Voltage 值”
VSYS = “量測到的 VSYS 值”
VBAT = “测量到的电池电压”
IBAT = “测量到的充电电流”
IBUS = “测量到充电器的电流”
VBUS = “测量到充电器的电压”
soc = 底层电量百分比
uiso = 上层显示电量百分比
CT = 充电器类型

$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/$(MTK_PLATFORM).dtsi

(我把修改地方上下文也给出来,方便定位,红色值为修改部分)

/* charging current */
         usb_charger_current = <500000>;
         ac_charger_current = <2000000>;
         ac_charger_input_current = <2000000>;
         non_std_ac_charger_current = <2000000>;
         charging_host_charger_current = <2000000>;
         ta_ac_charger_current = <2000000>;
         pd_charger_current = <500000>;

pe_ichg_level_threshold = <1000000>; /* uA */
         ta_start_battery_soc = <0>;
         ta_stop_battery_soc = <95>;
         min_charger_voltage = <4200000>;

ta_start_battery_soc = <0>;
         ta_stop_battery_soc = <85>;
         min_charger_voltage = <4200000>;

/* dual charger in series */
         dcs_input_current = <3200000>;
         dcs_chg1_charger_current = <2000000>;
         dcs_chg2_charger_current = <2000000>;

min_charger_voltage = <4200000>;
         pd_vbus_low_bound = <5000000>;
         pd_vbus_upper_bound = <5000000>;
         vsys_watt = <5000000>;

/* dual charger in series */
         dcs_input_current = <3200000>;
         dcs_chg1_charger_current = <2000000>;
         dcs_chg2_charger_current = <2000000>;

compatible = "mediatek,charger,pe4";
         gauge = <&mtk_gauge>;
 
        min_charger_voltage = <4200000>;
         pe40_stop_battery_soc = <80>;

/* dual charger in series*/
         dcs_input_current = <3200000>;
         dcs_chg1_charger_current = <2000000>;
         dcs_chg2_charger_current = <2000000>;

/* common */
         battery_cv = <4350000>;
         max_charger_voltage = <6500000>;
         min_charger_voltage = <4200000>;

/* charging current */
         usb_charger_current = <500000>;
         ac_charger_current = <2000000>;
         ac_charger_input_current = <2000000>;
         charging_host_charger_current = <2000000>;

$(LINUX_KERNEL_VERSION)/drivers/power/supply/mtk_basic_charger.c

static bool select_charging_current_limit函数

if (support_fast_charging(info))
		is_basic = false;
	else {
		is_basic = true;
		/* AICL */
		charger_dev_run_aicl(info->chg1_dev,
			&pdata->input_current_limit_by_aicl);
		if (info->enable_dynamic_mivr) {
			if (pdata->input_current_limit_by_aicl >
				info->data.max_dmivr_charger_current)
				pdata->input_current_limit_by_aicl =
					info->data.max_dmivr_charger_current;
		}
		if (is_typec_adapter(info)) {
			if (adapter_dev_get_property(info->pd_adapter, TYPEC_RP_LEVEL)
				== 3000) {
				pdata->input_current_limit = 3000000;
				pdata->charging_current_limit = 3000000;
			} else if (adapter_dev_get_property(info->pd_adapter,
				TYPEC_RP_LEVEL) == 1500) {
				pdata->input_current_limit = 1500000;
				pdata->charging_current_limit = 2000000;
			} else {
				chr_err("type-C: inquire rp error\n");
				//lpf add start
				pdata->input_current_limit = 2000000;    //同步修改这里
				pdata->charging_current_limit = 2000000; //这两个值
				//lpf add end
			}

			chr_err("type-C:%d current:%d\n",
				info->pd_type,
				adapter_dev_get_property(info->pd_adapter,
					TYPEC_RP_LEVEL));
		}
	}

手机方案 一,各家方案及演进 1,高通的QiuckCharge-提升电压-发热严重 QC1.0,microUSB接口。5V充电环路阻抗0.32Ω,最大充电电流为(5-4.2)/0.32=2.5A,线材限制2A,功率限制10W。 QC2.0, MicroUSB/USB-A/Type-C接口。通过D+D-调压来向充电器申请不同的充电电压,电压固定档5V/9V/12V/20V,线材限制2A,最大功率40W. QC3.0 MicroUSB/USB-A/Type-C接口。在2.0基础上添加最佳电压智能协商算法(INOV 阅读详情

相关推荐

MTK6580 Android P版本PSX5415A 带OTG调试

之前一直没有记录工作过程的想法。 在这里插入代码片 ```struct device *dev = &pdev->dev; struct device_node *node = dev->of_node; //zxw add pinctrl = devm_pinctrl_get(&pdev->dev); pinctrl_iddig = pinctrl_...

zxw0775的博客 4210

MT6370 datasheet

MT6370_PMIC_Data_Sheet_V1.1 ,mt6763 配套的 PMIC mt6370 datasheet

MTK充电协议简介

MTK充电协议简介

manbuyuzhong87的博客 1945

MT6370_PMIC_Data_Sheet_V1.2.pdf

MT6370_PMIC_Data_Sheet_V1.2.pdf, pswd:5584170090

mt6370芯片资料mt6370数据手册datasheet 规格书

mt6370是一种高度集成的智能电源管理icc,其中包括一个电池离子/聚合物交换电池充电器,一种usb类型&电源输送(pd)控制器,双闪光灯导流源,argb领导的司机,背光的司机,显示偏置驱动程序通用ldo便携式设备.开关充电器集成了同步pwm控制器,电源苔藓、输入电流感应输入电流调节,高精度电压调节,并充电终止电路。此外,电荷电流是被调节的通过集成传感电阻。mt6370还提供了usb...

weixin_34010566的博客 1422

MTK 充电知识

相关概念 懒的排版了,直接上图 相关文件关系 再来一发 杂项,电池温度检测原理图 发 充电流程 图样图森破 核心函数特写 /* 概念: ZCV:开路电压 OCV: 开路电压 VC:闭路电压 CAR:库伦计 DOD: 放电深度,100-DOD 即电容容量 Cmax/Qmax: 电池容量 相关文件关系: Battery_common.c (s:\i841\mediatek\k...

cktrobin的博客 5132

linux 驱动-power_supply 与 mtk 充电框架

作者: baron博客: baron-z.cn本文分析总结 mtk 平台的充电框架, 平台mt8786, 系统Android12, 内核版本. mtk充电包含这几个部分,: 给电池充电, 以及系统供电的芯片, 包含 ichg 充电电流 vbus 充电电压, ocv 截止电压等: 管理电池的基本信息, 电量, 充电电流等: 冲算法相关: 通用适配器驱动, 统一 sink 的接口为 mtk 的标准接口: 例如 1711 等 sink 驱动more整体框架如图所示.

sty01z的博客 2307

怎么查充电器支不支持pd协议_新买的iPhone11不能?很可能是因为你没用对充电器...

iPhone11是苹果近几年来价格最低的手机,虽然没有5G,但凭借着配色丰富,价格亲民,因此一上市就受到了消费者的热捧,出货量超出了苹果的预期。但是iPhone11系列中,只有iPhone11 proiPhone11 pro max配备了18W PD,而销量最多的iPhone11依旧配备了苹果前年不变的5V1A。这都9102年了,安卓手机早都步入了时代。而iPhone11竟然还是配备的5W...

weixin_39755873的博客 6356

充电协议: 协议,如何选充电宝?

选择好自己的协议,才能配置好合适的充电宝协议

TK - Kung 1万+

mtk协议与qc协议_通用充电协议QC2.0,QC3.0,MTK PE,PE+,充电识别

通用USB充电()说明一、的意义:USB得到广泛普及是因为其能够为外围设备供电。USB孕育于上世纪90年代中期,最初的目的是将外部设备(例如键盘、鼠标、打印机、外置驱动器等)连接至计算机。随着越来越多的各种便携式设备受到青睐,也同样需要为其供电。利用数据传输连接器供电的能力使得USB在便携式市场具有直接而显著的优势。在2007年第一个电池充电规范颁布之前,尝试为电池充电本质上是一种冒险—...

weixin_42509293的博客 2068

mtk协议与qc协议_协议是如何工作的?

协议是充电器与设备沟通握手所需的“语言”,只有正确“对话”后,才可以“握手”成功,进行充电。让我们一步一步来看不同协议是怎样工作的。几年前协议十分简单,简单到类似交通信号灯,幼儿园小朋友都可以通过颜色判断信号含义。设备与充电器不需要很“聪明”就可以读懂双方的需求,不管是研发难度还是物料成本都简单便宜。而协议的红绿灯,则是采用D+D-电压进行信息传输。旧式协议都是使...

weixin_28722991的博客 2608

技术及电源IC芯片的浅显认识

随着近年来智能手机的普及,手机在人们日常生活中的功能由仅仅局限于打电话,发展到集商务、娱乐、信息交流生活支付为一体。各种APP的喷涌而现,为了满足其应用需求,智能手机在硬件的配置上也在飞速发展,大屏幕、处理器、RAM ROM较往日翻倍,但同时,高频处理器、蓝牙、GPS WiFi等等功能都在大量的消耗电池的电量。然而,限于体积,手机锂离子电池容量的提升已达到极限,较长的充电时间较多的充电次数严重影响了手机使用体验。可喜的是,充电技术的出现另辟蹊径,解决了困扰已久的手机续航问题。 技术指的是

Silhouette_Lin的博客 1万+

mtk协议与qc协议_通用充电协议QC2.0,QC3.0,MTKPE,PE+,充电识别

通用USB充电()说明、的意义:USB得到广泛普及是因为其能够为外围设备供电。USB孕育于上世纪90年代中期,最初的目的是将外部设备(例如键盘、鼠标、打印机、外置驱动器等)连接至计算机。随着越来越多的各种便携式设备受到青睐,也同样需要为其供电。利用数据传输连接器供电的能力使得USE在便携式市场具有直接而显著的优势。在2007年第一个电池充电规范颁布之前,尝试为电池充电本质上是一种冒险一—...

weixin_39826809的博客 2175

mtk协议与qc协议_充电杂谈No3:协议是如何工作的?

各位小伙伴们大家好,充电杂谈是充电头网新开设的一期栏目,主要吐槽日常使用过程中遇到各种充电相关,前两期我们探讨了《充电杂谈No.1为何你的充电器老插不稳?》《充电杂谈No.2:到底是什么?》,今天栏目第三期我们来聊一下,充电杂谈No.3:协议如何工作的?协议是充电器与设备沟通握手所需的“语言”,只有正确“对话”后,才可以“握手”成功,进行充电。我们一步一步来看不同的协议是怎样工...

weixin_39858124的博客 898

MTK Linux Charger驱动分析(九)- mtk_basic_charger.c

这个文件实现了 MediaTek 平台的通用充电算法,支持多种充电场景,包括 USB 充电、Type-C/PD 、多充电器配置(如串联/并联)高级功能如 JEITA 温度保护、AICL(自动输入电流限制)动态 MIVR(最小输入电压调节)。它通过动态选择算法(如 PE5、PE5P、HVBP)来优化充电,支持事件通知算法仲裁。文件强调灵活性兼容性,适用于复杂硬件架构,与 mtk_pulse_charger.c 相比,更注重充电器支持。

iTom1900 1284

MTK PE+ 1.1协议详解

MTK PE+ 1.1协议详解 本文的实验基于某款MTK平台的4G手机,电池充电芯片是TI的BQ24261MRGER。 手机端通过I2C控制充电芯片的充电电流在100mA-500mA之间跳变,从而在VBUS上产生电流脉冲信号。 充电头从VBUS上检测到电流脉冲信号,解读指令,做出VBUS升压或降压动作。

qq_29161219的博客 2937

关于的几点疑问

1.充电速度跟什么相关 电池容量=电流对时间的积分,简单理解就是电池容量=电流*时间,可知要提供充电速度,只能增加充电电流。 2.为什么18w(9v2A)充电器比10w(5V2V)充电充电 充电电流都是2A,那充电速度肯定一样呀。当初小编就有这样的疑问,到网上找资料,大家都说18w比10w的,感觉也没说出个所以然,观点就是功率大,充电。但功率大充电前面的充电电流一法不就自相矛盾了吗。 请先看下手机主板的电流流向https://blog.csdn.net/mike8825/artic

Android开发 5347

mtk添加关机充电图片流程,以及与kernel通信

mtk平台下的关机充电有两种情况 1、充电只启动bootloader程序,即启动lk,不启动kernel 2、充电启动bootloader、kernel、kernel上层的应用程序 以第2种为例说明 1、添加图片资源 (1)通过vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/rules.mk里面的$(BOOT_LOGO_DIR) $(BASE_LOGO)来获取当前所用的图片位置,可以在rules.mk对应的位置来添加调试信息.

chen245250566的专栏 2223
上一篇: MTK配置SD卡与sim卡
下一篇: 手机连接内网提示网络连接受限
2201_75918415
博客等级 码龄4年 24粉丝 13原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值