奇怪的 NRST 管脚异常复位问题

1. 引言

本文探讨一个奇怪的 MCU NRST 管脚异常复位现象。

2. 复位问题及排查

这个问题是客户对开发的平台做 EMS 浪涌测试的时候发生的, 平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的 EMS 测试中, 客户发现 MCU 有时候会异常复位而影响平台的稳定工作。

2.1. MCU 异常复位问题的通常解决思路

我们知道, 导致 MCU 异常复位的原因有很多, 比如外部复位电路被干扰, MCU 电源的异常跌落, 看门狗不能正常喂狗导致的复位等等。

STM32 MCU 的复位标志位寄存器可以帮助我们发现导致异常复位的线索。

复位标志位的相关信息可以在 STM32 MCU 的 Reference Manual 中找到。在 RCC 章节的 RCC_CSR 寄存器中,我们可以看到:
在这里插入图片描述

图中红色围住的部分就是复位标志相关的寄存器。

LPWRRSTF:低功耗模式复位标志位, 被置 1 表示发生了非法的 STOP, SLEEP 或SHUTDOWN 等低功耗模式进入。

  • WWDGRSTF: 窗口看门狗复位标志。
  • IWDGRSTF: 独立看门狗复位标志。
  • SFTRWTF: 软件复位标志位。
  • BORRSTF: 欠压复位标志位。
  • PINRSTF: 从 NRST 引脚输入产生的复位的标志位。
  • OBLRSTF: 加载选项字节产生的复位的标志位。

以上的标志位被置 1 表示发生了相关的复位。

这些被置 1 的标志位可以通过向 RMVF 位写 1 清除。

在一次正常的 MCU 上电过程中, 电压的上升和 PDR 电路的工作必然会导致BORRSTF 和 PINRSTF 被置位 1, 因此在做 EMS 实验前, 需要先通过向 RMVF 写 1将所有复位标志位清除, 然后观察在 EMS 测试导致的复位后, 哪些复位标志位被置位了。

例如,当观察到 BORRSTF 被置 1 表示发生了欠压复位, 需要重点检查 MCU 供电电路包括滤波/退耦电容的设计和布局等等。

PINRSTF 位被置 1 表示 MCU 的 NRST 管脚接收到了能够触发复位的异常低电平,需要检查 NRST 的外围电路是如何被干扰的, 或设法增加滤波电路滤除干扰。

WWDGRSTF 或 IWDGRSTF 被置 1 表示喂狗不正常导致了复位,一般是由程序在EMS 测试中运行不正常进入死循环导致,MCU 被 EMS 干扰影响的途径相对难以判断,可能是地或某个/些 GPIO 管脚被 EMS 干扰侵入而影响了 MCU 的正常运行。

通过观察异常复位发生后的复位标志位,可以使我们避免解决问题时在不相关的电路上浪费时间, 比如如果只有 BORRSTF 被置位, 我们需要重点关注供电电路, 而不需要在复位管脚相关电路做无用的调整。

2.2. 在客户开发平台上的排查

根据上面 2.1 节描述的思路,我们在客户的平台上排查发生异常复位的原因, 通过检查 STM32G4 的复位标志位,发现复位发生后 PINRSTF 被置 1 了。

这似乎是个简单的 NRST 复位管脚被干扰的问题。

但是观察客户的设计, NRST 管脚并没有外接比较长走线的外部电路, 只是在管脚放置了一颗 0.1UF 的电容。按常理这样的电路一般不会将干扰引入 NRST 管脚。
在这里插入图片描述

为了避免是 0.1UF 电容将地噪声引入管脚, 拆除这颗电容后再做浪涌实验, 结果PINRSTF 还是被置位。

STM32G4 有一个新功能, NRST 管脚可以被复用为一个 GPIO PG10, 当这个管脚被定义为 PG10 后, 加在这个管脚的低电平干扰将不会再导致 MCU 复位。但是奇怪的事情发生了,STM32G474 第 7 脚由 NRST 改定义成 PG10 后(Option byte 中修改),浪涌实验中依然发生了 PINRSTF 被置位的现象。

这时候看来不能只局限于 NRST 管脚的探查了,干扰是不是从其它 GPIO 窜入 MCU 并进一步通过耦合影响了复位电路的工作呢?

在 LQFP 的封装中,由于 MCU 内部并行的较长的 bonding 线的存在, 相邻的 GPIO之间 最可能产生耦合干扰, 所以我们从第 7 脚相邻的第 6 和 8 脚开始排查。分别将它们的外部信号断开。

通过排查, 第 8 脚信号断开没有解决问题。

但是当将第 6 脚相连的晶振和电容断开,并改用内部 HSI 时钟源后, 异常复位问题消失了, PINRSTF 不再被置位。看来干扰是从第 7 脚进入的。观察客户的 PCB 设计, 发现晶振的 CLOAD 电容接地并不是直接接地平面, 而是经过一根细长的地走线后才由一个过孔连接到地平面,很明显这根细长的地走线在浪涌测试中作为天线接收了干扰并经电容传递到了 MCU 内部。

3. 总结

MCU 内部是远比 MCU 外部电路更复杂的微电子电路,内部线路间距小,不同功能间可能只是由电子开关或多路复用器做选择,当高频干扰进入 MCU 后,干扰可以在看似不直接相连的电路间耦合而影响 MCU 的正常工作。重要的是避免干扰进入 MCU。在排查干扰传递的路径时,不要将目光局限于直接相连的电路或管脚。

参考文献

在这里插入图片描述

本文档参考ST官方的《【应用笔记】LAT1244+奇怪的NRST+管脚异常复位问题.PDF》文档。
参考下载地址:https://download.csdn.net/download/u014319604/89170946

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux驱动开发笔记(一)字符驱动

文章目录 前言一、字符设备驱动程序框架二、基本原理1. 设备号的申请与归还2. 保存file_operations接口3. 设备节点的创建和销毁4. 创建文件设备4.1 mknod4.2 init_special_incode( )函数 5. 查找file_operation接口函数速查表 三、程序编写1. 模块初始化及关闭2. 文件操作方式…

Pytorch 学习路程

目录 下载Pytorch 入门尝试 几种常见的Tensor Scalar Vector Matrix AutoGrad机制 线性回归尝试 使用hub模块 Pytorch是重要的人工智能深度学习框架。既然已经点进来,我们就详细的介绍一下啥是Pytorch PyTorch 希望将其代替 Numpy 来利用 GPUs 的威力&…

Python --- 在python中安装NumPy,SciPy,Matplotlib以及scikit-learn(Windows平台)

在python中安装NumPy,SciPy,Matplotlib以及scikit-learn(Windows平台) 本文是针对(像我一样的)python新用户所写的,刚刚在电脑上装好python之后,所需的一些常见/常用的python第三方库/软件包的快速安装指引。包括了这些常用安装包…

(mac)性能监控平台搭建JMeter+Grafana+Influxdb

【实现原理】 通过influxdb数据库存储jmeter的结果,再通过grafana采集influxdb数据库数据,完成监控平台展示 一、时间序列数据InfluxDB 1.InfluxDB下载安装 官网下载 https://portal.influxdata.com/downloads/ 官网最新版: &#xff0…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果,以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…

x-cmd mod | x whisper - 使用 whisper.cpp 进行本地 AI 语音识别

介绍 Whisper 模块通过 whisper.cpp 帮助用户快速将音频转换为文字。 INFO: whisper.cpp 是一个用 C/C 编写的轻量级智能语音识别库,是基于 OpenAI 的 Whisper 模型的移植版本,旨在通过深度学习模型实现音频转文字功能。 由于 whisper.cpp 目前只支持 1…

记录一下flume中因为taildir_position.json因位置不对导致数据无法从kafka被采到hdfs上的问题

【背景说明】 我需要用flume将kafka上的数据采集到hdfs上,发现数据怎么到不了hdfs。 【问题排查】 1.kafka上已有相应的数据 2.我的flume配置文档(没问题), 3.时间拦截器(没问题), 4.JSONObje…

《运营之光》3.0 读书笔记

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

HarmonyOS开发案例:【首选项】

介绍 本篇Codelab是基于HarmonyOS的首选项能力实现的一个简单示例。实现如下功能: 创建首选项数据文件。将用户输入的水果名称和数量,写入到首选项数据库。读取首选项数据库中的数据。删除首选项数据文件。 最终效果图如下: 相关概念 [首…

OpenHarmony鸿蒙南向开发案例:【智能门铃】

样例简介 智能门铃通过监控来访者信息,告诉主人门外是否有人按铃、有陌生人靠近或者无人状态。主人可以在数字管家中远程接收消息,并根据需要进行远程取消报警和一键开锁。同时,也可以通过室内屏幕获取门外状态。室内屏幕显示界面使用DevEco…

SQL增加主键约束的条件

结论 常见认为设为主键的条件为: 值唯一不含空值 具体实施中会出现各种问题 添加主键约束的条件细则: 值唯一数据中不含空值在定义时需要not null约束(使用check约束不行) 验证实验 接下来我做了关于这个细则的验证实验&am…

【MATLAB源码-第193期】基于matlab的网络覆盖率NOA优化算法仿真对比VFINOA,VFPSO,VFNGO,VFWOA等算法。

操作环境: MATLAB 2022a 1、算法描述 NOA(Network Optimization Algorithm,网络优化算法)是一个针对网络覆盖率优化的算法,它主要通过优化网络中节点的分布和配置来提高网络的整体覆盖性能。网络覆盖率是衡量一个无…

【学习】软件压力测试对软件产品的作用

在信息化高速发展的今天,软件产品已经成为各行各业不可或缺的一部分。然而,随着软件功能的日益复杂和用户需求的不断增长,软件产品的稳定性和可靠性问题也愈发凸显。在这样的背景下,软件压力测试作为软件质量保障的重要手段之一&a…

【项目亮点】大厂中分布式事务的最佳实践 问题产生->难点与权衡(偏爱Saga)->解决方案

【项目亮点】大厂中分布式事务的最佳实践 问题产生->难点与权衡->解决方案->底层实现->应用案例 不断有同学问我大厂中实践分布式事务的问题,这里从分布式事务的产生,到强弱一致性与性能的权衡,再到最终落地的解决方案,再到实际的代码实现,再到我工作中实际使用SA…

【C语言__动态内存管理__复习篇6】

目录 前言 一、动态内存管理 二、动态内存函数 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、动态内存常见的6个使用错误 3.1 接收malloc/calloc返回的参数后未及时检查是否为NULL 3.2 越界访问动态内存空间 3.3 对非动态开辟的内存使用free释放 3.4 使用free只释放了…

AI时代,我要如何学习,才能跟上步伐

在21世纪这个被数据驱动的时代,人工智能(AI)已经渗透到我们生活的方方面面。无论是智能手机中的语音助手、在线客服的聊天机器人,还是自动驾驶汽车,AI的应用都在告诉我们一个信息:未来已来。因此&#xff0…

1.微服务介绍

完整的微服务架构图 注册中心 配置中心 服务集群 服务网关 分布式缓存 分布式搜索 数据库集群 消息队列 分布式日志服务 系统监控链路追踪 Jenkins docker k8s 技术栈 微服务治理: 注册发现、远程调用、负载均衡、配置管理、网关路由、系统保护、流量…

企业单位IPTV数字电视直播与点播系统-中国卫通怀来地球站IPTV数字电视直播与点播系统应用浅析

企业单位IPTV数字电视直播与点播系统-中国卫通怀来地球站IPTV数字电视直播与点播系统应用浅析 由北京海特伟业科技有限公司任洪卓发布于2024年4月19日 一、运营商光猫接入企业/单位IPTV数字电视直播与点播系统建设概述 中国卫通怀来地球站,位于怀来县土木镇&#xf…

小球反弹(蓝桥杯)

文章目录 小球反弹【问题描述】答案:1100325199.77解题思路模拟 小球反弹 【问题描述】 有一长方形,长为 343720 单位长度,宽为 233333 单位长度。在其内部左上角顶点有一小球(无视其体积),其初速度如图所…

CentOS 7静默安装Oracle 11g(记一次最小化CentOS 7安装Oracle 11g的经历)

# [pdf在线免费转word文档](https://orcc.online/pdf) https://orcc.online/pdf 1.最小化安装CentOS 7后首先设置一下固定IP 可以先查询一下自己的网卡设备的名称,是ens33,所以网卡配置文件名称就是ifcfg-ens33(前面的ifcfg-不用管&#xf…