[A133 Android11] 连接pc板子掉电

平台:A133+AXP717
系统:Android11
内核:Linux5.4
现象:在板子不接电池的情况下,连接电脑板子掉电(该项目不需要电池),用示波器抓到的波形显示reset一直为低。

使用逻辑分析仪测量pmu和主控在掉电前的通讯,发现其对pmu进行写0x17 0x88

通过查阅axp717数据手册我们发现0x17为一个限流操作,限制为500ma(100+N*50)mA,N为低5为即8。

我们将屏幕和喇叭去掉,发现其能正常开机了,说明猜想正确。

我们将dts中的pmu_usbpc_cur设为1500后进行测试,发现仍然起不来,逻辑分析仪显示仍然是下0x17 0x88,没办法我们只好去跟代码了

	pmu_usbpc_vol = <4600>;
	pmu_usbpc_cur = <1500>;//将其改为1.5A
	pmu_usbad_vol = <4600>;
	pmu_usbad_cur = <2500>;
	pmu_usb_typec_used = <0>;
	wakeup_usb_in;
	wakeup_usb_out;
};

通过compatible查找到文件为axp2202_usb_power.c
函数axp2202_set_iin_limit为限流函数,添加打印后发现其当连接pc时下了500ma的参数

static int axp2202_set_iin_limit(struct regmap *regmap, int mA)
{
	printk("axp2202_set_iin_limit mA = %d\n",mA);
	unsigned int data;
	int ret = 0;
	data = mA;
     printk("pmu_debug: data = %d",data);

	if (data > 3250)
		data = 3250;
	if	(data < 100)
		data = 100;
	data = ((data - 100) / 50);
	ret = regmap_update_bits(regmap, AXP2202_IIN_LIM, GENMASK(5, 0),
				 data);
	if (ret < 0)
		return ret;

	return 0;
}

在文件中共有3处调用

static int axp2202_usb_set_property(struct power_supply *psy,
				enum power_supply_property psp,
				const union power_supply_propval *val)
    
static irqreturn_t axp2202_irq_handler_usb_in(int irq, void *data)   

static void axp2202_usb_set_current_fsm(struct work_struct *work) 

通过再次添加打印,我们发现axp2202_usb_set_property为该次调用函数。

.set_property = axp2202_usb_set_property,

 static int ps_set_cur_charge_cntl_limit(struct thermal_cooling_device *tcd,
					unsigned long state)
     {	ret = psy->desc->set_property(psy,
		POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT, &val);}
		
  .set_cur_state = ps_set_cur_charge_cntl_limit,

通过查看函数调用关系,最后发现为sunxi_udc.c下的sunxi_set_cur_vol_work调用

void sunxi_set_cur_vol_work(struct work_struct *work)
{
#if !defined(SUNXI_USB_FPGA) && defined(CONFIG_POWER_SUPPLY)
	struct power_supply *psy = NULL;
	union power_supply_propval temp;

	if (of_find_property(g_udc_pdev->dev.of_node, "det_vbus_supply", NULL))
		psy = devm_power_supply_get_by_phandle(&g_udc_pdev->dev,
						     "det_vbus_supply");

	if (!psy || IS_ERR(psy)) {
		DMSG_PANIC("%s()%d WARN: get power supply failed\n",
			   __func__, __LINE__);
	} else {
		temp.intval = 2500;//改大到2500

		power_supply_set_property(psy,
					POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, &temp);
	}
#endif
}

可以发现这是一个保护pc的电流限制,当识别usb连接pc时主动将VBUS电流限制在500mA,由于我们的设备有额外的电源,所以直接将其调大。

  • 2
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论
AXP192最新datasheet。 AXP192是高度集成的电源系统管理芯片,针对单芯锂电池(锂离子或锂聚合物)且需要多路电源转换输出的应用,提供简单易用而又可以灵活配置的完整电源解决方案,充分满足目前日益复杂的应用处理器系统对于电源相对复杂而精确控制的要求。 AXP192 内部集成了一个自适应的USB-Compatible 的充电器,3 路降压转换器(Buck DC-DC converter),4 路线性稳压器(LDO),电压/电流/温度监视等多路12-Bit ADC。为保证电源系统安全稳定,AXP192 还整合了过/欠压(OVP/UVP)、过温(OTP)、过流(OCP)等保护电路。 AXP192 的智慧电能平衡(Intelligent Power Select, IPS™)电路可以在USB 以及外部交流适配器、锂电池和应用系统负载之间安全透明的分配电能,并且在只有外部输入电源而没有电池(或者电池过放/损坏)的情况下也可以使应用系统正常工作。 AXP192 具有外部适配器和USB 以及电池等三输入能力,支持可充电备用电池。 AXP192 提供了一个与主机通讯的两线串行通讯接口:Two Wire Serial Interface (TWSI),应用处理器可以通过这个接口去打开或关闭某些电源输出,设置它们的电压,访问内部寄存器和多种测量数据(包括Fuel Gauge)。高精度(0.5%)的电量测量数据方便消费者更清楚的实时掌握电能使用状况,给消费者带来前所未有的设备电能使用体验。 AXP192 提供 6mm x 6mm 48-pin QFN 封装。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

TintyHD

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值