一. 基本情况介绍
1. 硬件方案组成
产品中采用的是IMX8M核心板的方案,如图1所示是产品的硬件系统整体组成示意图。
2. 问题描述
今年5月份有一台设备出现系统偶发启动失败,uboot阶段都无法通过,表面现象是显示屏黑屏。此故障发生概率还挺高,基本上反复上电20次以内必出。
二. 排查记录
1. 第一阶段
1) 显示功能排查
检查显示排线连接,无明显异常;
2) 故障定位
显示屏及显示驱动电路若有问题,通常是必出,而不是偶发,因此核心板的可能性更大。更换其他核心板,问题不再复现,明确问题是随着核心板走的。
3) 核心板运行故障定位
接上串口助手定位核心板具体故障点。结果问题不再复现。(有可能加大测试量会出,后续测试以千次以上为标准)
难道是UART上的干扰造成的?
回想起年前批量事故:UART上脏数据引起系统误入uboot调试模式。最终解决办法是软件上在uboot启动阶段不对UART进行响应。
另外发现输入电源线靠近和远离核心板调试串口UART1,问题的发生概率也有明显区别。似乎都指向了是UART1干扰造成了核心板启动失败。
针对UART1悬空易受干扰的问题,可以通过接上拉电阻的方式避免。如下图所示。
因此在UART1的TX和RX线上接上上拉电阻复测。结果在200次左右还是复现了问题。
4) 更改启动方式
有没有可能还是eMMC传输不稳造成的?
将ARM系统启动方式改为从TF卡启动再进行复测,未再复现系统启动失败现象。
似乎还是和eMMC有关。
2. 第二阶段
将问题核心板连同设备寄给核心板方案商分析。方案商通过各种测试对比,认为是上电时序未合理控制的问题,底板先上电造成串电引起核心板启动异常,具体漏电点未查明。
3. 第三阶段
根据方案商提供的线索,排查具体的漏电点。
1) 更改上电时序
如图3更改上电时序,无论是采用电源优化方案1还是电源优化方案2,即核心板上电后再控制主控板5V后上电或者3.3V后上电,都无法复现系统启动失败的现象。
2) 接口排查
- 断开核心板与STM32F103的通讯口UART2,复现问题,排除UART2的可能性。
- 断开显示屏,未复现问题;显示屏相关电路嫌疑很大。
PS: 断开显示屏,无法再通过观察显示来判断系统是否正常启动,因此采用替代方案,即通过观察输入电流的变化来识别。异常启动过程,电流增大到350mA左右会停止一段时间,然后降低到220mA,而正常启动过程,电流会继续增大到500mA以上,然后再降低到350mA左右。
3) 显示接口排查
显示接口包括MIPI、I2C和GPIO口,如图1所示。
询问方案商I2C1连接情况,方案商反馈I2C1在核心板上用于PMU和ARM之间的通讯,并截了一段相关原理图过来。如图4所示
根据这部分截图,找到核心板上R2、R3位置,使用示波器抓取I2C1和NVCC_SNVS_3V3波形。
图5中紫色线是NVCC_SNVS_3V3的波形,绿色线是I2C1_SDA的波形。当发生启动异常的时候,NVCC_SNVS_3V3正常上电,但I2C1出现异常。不过,从这波形来看,I2C1波形异常是结果,而不是原因。
联想到图4中I2C1的上拉电阻,灵感一闪,如果上电时序会影响,是否主控板上的电压通过上拉电阻,反灌到核心板上的NVCC_SNVS_3V3。如图6所示,是目前的I2C1挂载情况。
I2C1挂载了核心板上的PMU,同时还挂载了TC358775XBG和触摸。且核心板上上拉电压NVCC_SNVS_3V3和主控板上上拉电压VCC_SYS_3V3上电时序不一致。
检测NVCC_SNVS_3V3和VCC_SYS_3V3电压波形和上电时序,如图7所示。图中,紫色线为VCC_SYS_3V3波形,蓝色线为NVCC_SNVS_3V3波形。很明显,VCC_SYS_3V3比NVCC_SNVS_3V3早上电20ms,同时VCC_SYS_3V3对NVCC_SNVS_3V3有影响,如黄色圈出部分,有一个120mv左右的电压台阶。
比较可惜的是,一直未抓到异常时的NVCC_SNVS_3V3和VCC_SYS_3V3对比电压波形。去除主控板和显示板上的I2C1上拉电阻,复测,未再出现启动失败的现象,波形如图8所示,电源台阶也消除了(绿色波形)。
对于NVCC_SNVS_3V3异常会怎样影响PMU或者IMX8M,目前还没弄清楚,留待后续能力提上来再进行分析。
有没有可能从I2C1总线直接反灌到IO口呢?
我认为是不太可能的。I2C总线内部使用的是漏极开路驱动器,因此SDA和SCL可以被拉低为低电平,但是不能被驱动为高电平,这也是I2C总线需要接上拉电阻的原因。
对于漏极开路结构,输出端不会漏电到栅极。从启动异常的波形上看,也没有出现异常源漏极导通的情况。
增加另一个实验,可以进一步辅助证明I2C总线影响的不是I/O,而应该是影响了PMU的电源启动逻辑。I2C2挂载了RTC和光源,在核心板上未配备上拉电阻。去除主控板和显示驱动板上的I2C1上拉电阻,保留I2C2的上拉电阻,进行开关测试,连续测试上千次,未复现启动失败的问题。
有没有可能MIPI信号漏电到核心板造成启动失败?
去除主控板和显示驱动板上的I2C1上拉电阻,并断开I2C1的连接,连续测试上千次,也未复现启动失败。
至此,可以确认就是主控板和核心板的上电时序未进行合理控制,主控板上的VCC_SYS_3V3通过上拉电阻,影响到NVCC_SNVS_3V3,进而因此PMU上电时序紊乱。
三. 遗留问题
1. NVCC_SNVS_3V3异常是如何影响PMU上电时序的?
2. 为什么IMX8M的调试串口会影响系统启动失败的发生概率?
3. 为什么采用TF卡启动方式,不会造成系统启动失败?
四. 参考资料
1.UART的抗干扰设计
2.IMX8M核心板偶发系统启动失败排查实录