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手册:

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

链接:
(需要注册登陆NXP的账号才可以看,免费的)
原理图:
VDD_ANAx_1P8:

PMIC:

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

最大值:6.8V
改动后(FPWM 1b)

最大值6.6V
● 测试结果:
常温下ADC状态均无异常,模式修改后的电源纹波下降0.2v.
实验二:
● 测试目的:低温下验证修改BUCK FPWM模式前后ADC的状态和电源纹波情况
● 测试方法:通过更改BUCK5CTRL(图1)寄存器FPWM位0和1来测试
● 测试环境: 低温,设备系统启动过程状态
● 测试过程:使用示波器在系统启动过程中,测量电源纹波情况,同时查看启动过ADC的状态
未改BUCK mode的电源纹波,触发抓取:

最大值:6.8V ADC异常
低温下改BUCK mode的电源纹波,触发抓取:

最大值6.6V ADC正常
● 测试结果:
-30度低温下,未更改的设备ADC异常,更改后的设备ADC状态正常,模式修改后的电源纹波下降0.2v.。
实验三:
● 测试目的:低温下验证修改BUCK FPWM模式,对比对比电源纹波
● 测试方法:通过更改BUCK5CTRL(图1)寄存器FPWM位0和1来测试
● 测试环境: 低温
● 测试过程:使用示波器在系统正常运行的状态下,测量电源纹波情况
运行时波形:

最大值在6.6V-6.8V
运行时波形:

最大值在6.0V-6.2V
● 测试结果:
在系统正常运行的状态下,-30度的低温环境,更改BUCK5CTRL寄存器电源纹波下降0.6v左右。
总结
ADC的失效原因是由电源纹波过大引起,特别是在低温环境下进一步放大了电源纹波.通过给uboot代码打上补丁,更改buck模式让电源纹波回到了一个正常的水平,从根本上解决了ADC失效的问题.
本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/20797169,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号