IMX93低温下重启原生ADC加载失败

环境

软件版本:

uboot:2022.04-gb5ea6d4016

kernel:linux 6.1

处理方式(永久)

uboot补丁

From 8c1e705ca1b028eba18276b0c5481dbbc91942f8 Mon Sep 17 00:00:00 2001
From: yangx <yangx@>
Date: Tue, 18 Mar 2025 09:22:50 +0800
Subject: [PATCH] =?UTF-8?q?QY:=20=E6=94=B9PMIC=E7=9A=84PWM=E6=A8=A1?=
 =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=BD=8E=E6=B8=A9=E9=87=8D?=
 =?UTF-8?q?=E5=90=AFADC=E8=8A=82=E7=82=B9=E4=BC=9A=E6=8E=89=E7=9A=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 board/freescale/imx93_qiyang/spl.c | 3 +++
 configs/imx93_qiyang_defconfig     | 1 +
 2 files changed, 4 insertions(+)

diff --git a/board/freescale/imx93_qiyang/spl.c b/board/freescale/imx93_qiyang/spl.c
index d596705998..fd0c3f7e47 100644
--- a/board/freescale/imx93_qiyang/spl.c
+++ b/board/freescale/imx93_qiyang/spl.c
@@ -109,6 +109,9 @@ int power_init_board(void)
 
 	/* set WDOG_B_CFG to cold reset */
 	pmic_reg_write(dev, PCA9450_RESET_CTRL, 0xA1);
+
+	/*  Force buck5 VDD_ANAx_1P8 output of PMIC to PWM mode.  by yangx */
+	pmic_reg_write(dev, PCA9450_BUCK5CTRL,0x0D);
 	return 0;
 }
 #endif
diff --git a/configs/imx93_qiyang_defconfig b/configs/imx93_qiyang_defconfig
index 53d12ff74c..96af5ebe34 100644
--- a/configs/imx93_qiyang_defconfig
+++ b/configs/imx93_qiyang_defconfig
@@ -19,6 +19,7 @@ CONFIG_TARGET_IMX93_QIYANG=y
 CONFIG_SPL_SERIAL=y
 CONFIG_SPL_DRIVERS_MISC=y
 CONFIG_SPL=y
+CONFIG_DM_PMIC_PCA9450=y
 CONFIG_CMD_DEKBLOB=y
 CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000
 CONFIG_SPL_LOAD_IMX_CONTAINER=y
-- 
2.25.1

复现步骤

现象:

-30度低温测试1个小时,重启会丢失节点 /sys/bus/iio/devices/iio:device0

日志:

关键错误:

[ 1.714885] imx93-adc 44530000.adc: ADC calibration failed!
[ 1.720517] imx93-adc: probe of 44530000.adc failed with error -11

问题分析和原因

看日志,常温正常下可以那么说明软件部分probe之后是正常的,就是有什么影响了ADC的probe,询问了NXP,回复硬件部分的电源纹波LX输出电压尖峰影响,一般来说低温也会放大纹波,Buck转换器在-40℃下的纹波劣化。

查看核心板原理图(图见下)和NXP的IMX93硬件设计指南(链接和图见下)ADC使用 VDD_ANAx_1P8 作为基准电压,而 VDD_ANAx_1P8 由PIMC BUCK5 供电,所以尝试修改buck5的输出模式,以减少电源纹波对ADC的影响。根据PMIC手册:

alt text

默认为PWM(脉宽调制)和PFM(脉冲频率调制)模式自动转换,设置为强制PWM模式。PWM是通过调整脉冲宽度来调节输出电压或电流,频率固定,纹波比较稳定,然后进行测试验证设计。

官网上参考设计说明:

alt text

链接:

https://docs.nxp.com/bundle/IMX93HDG/page/topics/imx_93_design_checklist.html#GUID-0ADA5E99-E1DA-4208-AFF8-F08E3A6DA562__table_y4m_1td_ndc

(需要注册登陆NXP的账号才可以看,免费的)

原理图:

VDD_ANAx_1P8:

alt text

PMIC:

alt text

实验验证:

实验一:

● 测试目的:常温下验证BUCK FPWM模式对电源纹波的差异,同时观察ADC的状态
● 测试方法:通过更改BUCK5CTRL(图1)寄存器FPWM位0和1来测试
● 测试环境: 常温
● 测试过程:使用示波器在系统启动过程中,测量电源纹波情况

原始未改动(FPWM 0b)

alt text

最大值:6.8V

改动后(FPWM 1b)

alt text

最大值6.6V

● 测试结果:

常温下ADC状态均无异常,模式修改后的电源纹波下降0.2v.

实验二:

● 测试目的:低温下验证修改BUCK FPWM模式前后ADC的状态和电源纹波情况
● 测试方法:通过更改BUCK5CTRL(图1)寄存器FPWM位0和1来测试
● 测试环境: 低温,设备系统启动过程状态
● 测试过程:使用示波器在系统启动过程中,测量电源纹波情况,同时查看启动过ADC的状态

未改BUCK mode的电源纹波,触发抓取:

alt text

最大值:6.8V ADC异常

低温下改BUCK mode的电源纹波,触发抓取:

alt text

最大值6.6V ADC正常

● 测试结果:

-30度低温下,未更改的设备ADC异常,更改后的设备ADC状态正常,模式修改后的电源纹波下降0.2v.。

实验三:

● 测试目的:低温下验证修改BUCK FPWM模式,对比对比电源纹波
● 测试方法:通过更改BUCK5CTRL(图1)寄存器FPWM位0和1来测试
● 测试环境: 低温
● 测试过程:使用示波器在系统正常运行的状态下,测量电源纹波情况

运行时波形:

alt text

最大值在6.6V-6.8V

运行时波形:

alt text

最大值在6.0V-6.2V

● 测试结果:

在系统正常运行的状态下,-30度的低温环境,更改BUCK5CTRL寄存器电源纹波下降0.6v左右。

总结

ADC的失效原因是由电源纹波过大引起,特别是在低温环境下进一步放大了电源纹波.通过给uboot代码打上补丁,更改buck模式让电源纹波回到了一个正常的水平,从根本上解决了ADC失效的问题.

posted @ 2026-06-25 11:44  杨旭0324  阅读(10)  评论(0)    收藏  举报