从 RP2040 看 MCU 上电:上电状态机如何按序唤醒硬件模块
上电状态机
上电状态机可以理解为芯片上电 / 复位后的自动启动向导, 它是一个纯硬件的自动程序,负责按固定顺序 “唤醒” 芯片里的各个硬件模块(比如时钟、存储、处理器)。就像电脑开机时要先启动电源、再启动主板、硬盘、显卡,最后启动 CPU,芯片的硬件也得按顺序启动才不会出问题,上电状态机就是干这个 “按序唤醒” 活儿的,全程自动,不用软件插手。
开机状态机按特定的顺序从各种硬件块中去除重置 Reset 状态。每个在上电状态机中的外围设备由由内部 rst_n/复位信号控制,并产生内部 rst_done 高电平有效复位完成信号。上电状态机对每个外设取消 reset 复位,等待该外设产生 rst_done 信号后对下一个外设取消 reset 复位。
当芯片的复位子系统确认数字核心电源(DVDD)供电稳定,且 RUN 高电平时,上电状态机自身退出复位。
上电状态机通过 rst_n_run 输出退出许多其他块。这通常用于需要在初始化启动时重启但是不能在上电状态机重启时重置的应用(即需要持续运行的模块),例如:
环形振荡器和晶体振荡器中的逻辑通电
在上电状态机重启期间必须继续运行的时钟分频器(clk_ref 和 clk_sys)
看门狗定时器
这些模块在状态机重启时不会被重置,保证基础功能一直工作。
上电状态机重启顺序如下:
图 2.36 芯片上电状态机启动流程框图
我们可以看到,它的唤醒顺序是从 “最基础的硬件” 到 “核心部件”,流程如下:
- 先启动环形振荡器(提供最基础的初始时钟,相当于先有 “心跳”);
- 再启动晶体振荡器(提供更精准的时钟,替换基础时钟);
- 接着启动时钟发生器(把时钟分配给各个模块);
- 然后是复位控制器(管理后续模块的复位状态);
- 之后启动总线结构(各个模块之间传输数据的 “通道”);
- 再唤醒ROM/SRAM(存储程序和数据的地方);
- 然后是XIP(外部 Flash 的访问功能,让芯片能读外部存储);
- 接着是芯片级复位和电压调节器寄存器(管理电源和复位的配置);
- 最后唤醒处理器核心(CPU,芯片的 “大脑”)。
上电状态机是一个完全自动化的硬件部件。它不需要来自用户的输入就可以工作。有一些寄存器控件,可用于覆盖和查看开机状态机的状态。这允许在必要时通过软件重置开机状态机中的硬件块。
上电状态机的 PSM 寄存器的基本地址为 0x40010000。
图 2.37 RP2040 芯片时钟系统架构图
