FPGA的IO用于做外部的MCU的复位功能,导致MCU内部复位失效
问题详细描述
为了方便在板卡板卡复位,我们的硬件工程师在做单板设计时,把MCU的复位IO 连接了到FPGA,可以通过FPGA来复位板卡的MCU。但是测试时发现,如果是单板状态,可以顺利下载固件,但是如果是集成情况下无法正常下载固件,且看门狗复位也受影响。
问题具体分析
出现这个问题后,首先想到的是可能是芯片复位信号受影响了,因为使用调试器通过SWD接口下载固件时需要硬件复位或者软件复位的方式复位MCU。 而这个信号又受FPGA控制(强制拉高),在下载的场景可能会复位失败。
因此查看了STM32 Reference manual RM0008 Page 91 Power Reset 章节,仔细看了内部复位框图后找到了答案。从下图可以看到 STM32 MCU 的NRST 是一个双向接口,在内部复位电路产生复位动作时,会输出一个低电平的信号;如果这个时候FPGA输出的是高电平,则信号会发生冲突
问题解决方案
因为FPGA的IO 无法配置为Open-Drain输出,只能配置为Push-pull推挽输出,导致当需要主动复位时,无法将NRST信号拉低,因此只能把FPGA 复位MCU的功能去掉,即把MCU外部复位控制信号断开(R112电阻 空贴)。
总结和建议
外部IC 连接NRST 信号导致MCU 内部复位信号失效的问题是由于STM32 MCU 的NRST 引脚结构引起的,如果设计使用外部复位的方式,最好使用Open-Drain输出,否则容易出现我遇设计中遇到的问题。