5、电池电压小于门槛电压时执行关机充电流程

电池电压电鱼门槛电压时关键性的循环充电log:

[114275] [check_bat_protect_status]: check VBAT=3447 mV with 3450 mV, start charging... 
[114298] [BATTERY] charging current=607 charger volt=4882
[114305] [BATTERY] charging current=607 charger volt=4882
[114312] [BATTERY] charging current=607 charger volt=4882
[114320] [BATTERY] charging current=607 charger volt=4882
[114327] [BATTERY] charging current=607 charger volt=4882
[114334] [BATTERY] charging current=607 charger volt=4882
[114341] [BATTERY] charging current=607 charger volt=4882
[114348] [BATTERY] charging current=607 charger volt=4882
[114356] [BATTERY] charging current=625 charger volt=4882
[119393] [check_bat_protect_status]: check VBAT=3454 mV  

充到大于门槛电压跳出循环log:

[119393] [check_bat_protect_status]: check VBAT=3454 mV with 3450 mV, stop charging... 

在lk阶段的mt_battery.c文件
mt65xx_bat_init

	if (bat_vol < BATTERY_LOWVOL_THRESOLD) 判断门槛电压,这个值是3450
	{
		if (g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && upmu_is_chr_det() == KAL_TRUE) { 关机充电启动模式,同时插了充电器
			dprintf(CRITICAL, "[%s] Kernel Low Battery Power Off Charging Mode\n", __func__);
			g_boot_mode = LOW_POWER_OFF_CHARGING_BOOT; 设置启动模式

			check_bat_protect_status(); 检测电池保护状态

看下check_bat_protect_status函数

void check_bat_protect_status() // 检查电池是否处于保护状态
{
	kal_int32 bat_val = 0;
	int chr_volt;
#if !defined(SWCHR_POWER_PATH)
	int current,cnt=0,i;
#endif

#if defined(SWCHR_POWER_PATH)
	bat_val = get_i_sense_volt(5);
#else
	bat_val = get_bat_sense_volt(5);
#endif

	dprintf(CRITICAL, "[%s]: check VBAT=%d mV with %d mV, start charging... \n", __FUNCTION__, bat_val, BATTERY_LOWVOL_THRESOLD);

	while (bat_val < BATTERY_LOWVOL_THRESOLD) { // 检查电池电压是否 < 3450,如果小于就在这里循环一直充电
		mtk_wdt_restart();
		if (upmu_is_chr_det() == KAL_FALSE) { // 检查是否有插充电器
			dprintf(CRITICAL, "[BATTERY] No Charger, Power OFF !\n");
			mt6575_power_off();
			while (1) {
				if (fix_coverity == 1)
					return;
			}
		}


		chr_volt= get_charger_volt(1);

		if (chr_volt>V_CHARGER_MAX) { // 检测充电器电压是否过压
			dprintf(CRITICAL, "[BATTERY] charger voltage is too high :%d , threshold is %d !\n",chr_volt,V_CHARGER_MAX);
#if defined(SWCHR_POWER_PATH)
			mt6575_power_off();
#endif
			break;
		}

		/* pmic_set_register_value(PMIC_BATON_TDET_EN, 1); */
		pmic_set_register_value(PMIC_RG_BATON_EN, 1);
		if (pmic_get_register_value(PMIC_RGS_BATON_UNDET) == 1) { // 检查有没有拔出电池
			dprintf(CRITICAL, "[BATTERY] No battry plug-in. Power Off.");
			mt6575_power_off();
			break;
		}

		dprintf(CRITICAL, "[%s]: check VBAT=%d mV with %d mV, start charging... \n", __FUNCTION__, bat_val, BATTERY_LOWVOL_THRESOLD); // 循环打印

		is_charging = 1;
		pchr_turn_on_charging(KAL_TRUE);

#if defined(SWCHR_POWER_PATH)
		thread_sleep(5000);
#else
		cnt=0;
		for (i=0; i<10; i++) {
			current=get_charging_current(1);
			chr_volt=get_charger_volt(1);
			if (current<100 && chr_volt<4400) {
				cnt++;
				dprintf(CRITICAL, "[BATTERY] charging current=%d charger volt=%d\n\r",current,chr_volt);
			} else {
				dprintf(CRITICAL, "[BATTERY] charging current=%d charger volt=%d\n\r",current,chr_volt);
				cnt=0;
			}
		}

		if (cnt>=8) {

			dprintf(CRITICAL, "[BATTERY] charging current and charger volt too low: %d\n",cnt);

			pchr_turn_off_charging();
#ifndef NO_POWER_OFF
			mt6575_power_off();
#endif
			while (1) {
				dprintf(CRITICAL, "If you see the log, please check with RTC power off API\n\r");
				if (fix_coverity == 1)
					return;
			}
		}
		thread_sleep(5000);
#endif



#if defined(SWCHR_POWER_PATH)
		bat_val = get_i_sense_volt(5);
#else
		bat_val = get_bat_sense_volt(5);
#endif
		dprintf(CRITICAL, "[%s]: check VBAT=%d mV  \n", __FUNCTION__, bat_val);
	}
	mtk_wdt_restart();

	dprintf(CRITICAL, "[%s]: check VBAT=%d mV with %d mV, stop charging... \n", __FUNCTION__, bat_val, BATTERY_LOWVOL_THRESOLD); // 电压大于3.45v后跳出while循环
}

总结:当插入充电器后电池电压还是小于3.45v就会在while循环里面充电,直到电池电压大于门槛电压才会进入linux内核。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值