复位
复位就像芯片的 “紧急重启键”,当芯片程序卡死、电源电压不稳,或是需要重新启动时,“复位” 会让芯片(或部分设备)回到初始状态,重新开始工作。RP2040 的复位分两种场景:
- “芯片级别复位” 是把整个芯片都重置;
- “子系统复位” 是只单独重置某些外设,不用动整个芯片,更灵活。
1.芯片级别复位
当芯片刚通电、电源电压突然不够(比如意外掉电,也就是 “brown-out 事件”)、RUN 引脚被手动拉低(相当于按了芯片的 “重启键”),或是通过调试接口控制时,“芯片级重置子系统” 会让整个芯片回到初始状态。
图 2.34 芯片子系统复位电路逻辑图
这个子系统有两个 “复位信号”:
rst_n_psm:负责重置整个芯片,但会保留调试端口(这样调试设备不会被重置,方便后续排查问题);rst_n_dp:只专门重置 “Rescue DP(救援调试端口)”。
这两个信号会在 “刚通电、电源不稳、RUN 引脚拉低” 时自动触发。另外,救援调试端口还能单独触发rst_n_psm,让整个芯片重置,但它自己不会被重置(相当于 “救援口能重启芯片,同时保持自身工作,方便后续调试”)。等芯片重置完成后,会交给上电状态机继续启动流程。
2.子系统复位
除了 “整个芯片重启”,软件还能单独控制部分设备的复位—— 比如 USB 控制器、PIO,以及 UART、I2C、SPI 这些外设,还有 PLL、ADC 等(这些设备不是启动芯片的核心部件,重启它们不会影响整个芯片)。
这些外设在上电时默认都是 “复位状态”(相当于没启动),需要用哪个外设,软件就手动取消它的复位状态,让它开始工作。比如 UART 出故障了,不用重启整个芯片,只重置 UART 就行,其他设备能继续运行。控制这些复位的寄存器,基本地址是 0x4000c000。
图 2.35 RP2040 复位与上电状态机