注意UART的抗干扰设计

发布时间:2024年01月24日

注意UART的抗干扰设计

一. 引言

产线最近出现多台设备启动卡死的问题,卡死在uboot启动界面,如下图所示。复现问题的时候,发现卡死的现象随着问题A53核心板走。因此联系核心板供应商,对方给出的可能原因是串口上有脏数据,导致进入uboot命令模式。相应的解决办法是:bootdelay改为-1,不进入uboot命令模式即可。修改以后,仍会出现启动卡死的现象,但打印信息提示的是eMMC未识别成功,但发生卡死的概率已大大降低。

本文中只分析UART上干扰的影响,eMMC未识别的原因及其影响暂时先不讨论。

图1 启动卡死时的停留界面

二. 原因分析

通过串口调试助手,查看打印信息,发现当卡死在logo显示阶段,打印信息显示已进入uboot命令模式。如下图所示,说明有UART上有脏数据,导致误入uboot命令调试。

图2 启动卡死时的打印信息

为什么会进入uboot命令模式?

uboot启动以后会进入3s倒计时。如果在3s倒计时结束之前,调试串口UART上输入任何字符,那么就会进入uboot的命令模式,反之,3s结束后就会自动启动linux内核。因此,首先要排查UART上的RX信号。

检测UART的RX线上波形,发现噪声较严重。如下图所示,大多数情况下,噪声信号幅度在0.6V以内,不会出现电平误判,但偶尔会出现0.8V以上幅度大小的噪声信号。

图3 RX上电压波形

查阅i.MX8M芯片的资料,该芯片的UART采用的电平标准是LVTTL,如下图所示。

图4 i.MX8M的UART电平标准

LVTTL又分为3.3V、2.5V以及更低电压的LVTTL,其电平判定标准如下:

图5 3.3V LVTTL电平标准
图6 2.5V LVTTL电平标准

按照3.3V的LVTTL电平标准,对于0.8V~2.0V之间未定义的电平信号,是有可能产生电平误判的。

如图7所示,UART的一个数据帧包含1个起始位、7位有效数据、1个奇偶校验位以及1~2个停止位。当没有数据传输时,UART要求通信线路保持高电平,即“1”,每当有效数据传输之前,UART要求先发送一个bit宽度的低电平,即发送一个“0”,用于标识一帧通信数据的开始,即起始位。校验位是一个可选位,可有可无,用于检查数据传送的正确性。停止位是一帧通信数据的结束标志,必须是高电平,即“1”,其宽度可以是1位、1.5位或2位。

在内核启动之前,UART上的RX线上一直为低电平,即处于非空闲状态,当RX线上出现一个0.8V以上的干扰,误判为高电平,并作为停止位,那么是会造成错误通信数据的。当这个错误数据正好发生在uboot启动后的3s倒计时,就会进入uboot命令模式。

图7 UART通讯数据帧格式示意图

那么怎么消除UART上的脏数据影响呢?

三. 整改措施

1. 从软件角度来说,可以增加防干扰设计,比如增加奇偶校验,对于关键指令,可以多次验证。对于本次误入uboot命令模式的问题,更是可以简答粗暴的不响应UART。

2. 从硬件角度,增加上拉电阻,也可以极大提高UART的抗干扰能力。如图8所示,在RX上增加上拉电阻,通过10K电阻接到3.3V,极大抑制了RX上的干扰信号。

图8 增加上拉电阻后的RX信号
文章来源:https://blog.csdn.net/gonylibechen1/article/details/135830084
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。