2. MCX芯片启动模式与引脚配置
MCX系列MCU在上电复位后并不会直接跳转到用户应用程序,而是先执行芯片内部固化的Boot ROM。Boot ROM会根据一组启动配置引脚(Boot Configuration Pins)的电平状态,决定从哪个存储介质加载并执行代码。理解这套引脚配置机制,是设计MCX硬件电路、规划ISP量产流程以及实现固件升级方案的基础。本节围绕BOOT_MODE、ISP模式、内部/外部启动选择三个核心概念展开,并给出可直接参考的硬件设计要点。
一、启动配置引脚的基本作用
MCX芯片在复位释放的瞬间会对特定引脚进行采样,采样结果被锁存到Boot ROM的启动配置寄存器中。这些引脚通常复用为普通GPIO,但在复位期间具有特殊功能。以MCX A系列和MCX N系列为例,常见的启动配置引脚包括BOOT_MODE、BOOT_CFG、ISP_EN等,不同封装和型号的引脚名称可能略有差异,但功能逻辑一致。
采样发生在复位信号释放后的若干个时钟周期内,因此这些引脚在复位期间必须保持稳定的电平。如果外部电路在复位期间对这些引脚产生干扰,或者引脚上存在悬空、缓慢上升的RC充电过程,Boot ROM可能采样到错误值,导致启动介质选择错误。这是硬件设计中最常见的启动失败原因之一。
二、BOOT_MODE与启动介质选择
BOOT_MODE通常是一个多位配置字段,用于选择启动介质。以典型的MCX配置为例,BOOT_MODE可以取以下值:
- 内部Flash启动:从芯片内部非易失性存储器(Internal Flash)加载向量表和应用程序,这是量产产品最常用的模式。
- 外部串行NOR Flash启动:通过FlexSPI接口从外部QSPI/OSPI Flash加载代码,适用于需要大容量存储的应用。
- ISP/串行下载模式:进入Boot ROM内置的串行下载协议,通过UART、USB或I2C等接口接收主机下发的固件。
- 内部ROM启动:执行Boot ROM中的特定例程,通常用于恢复或测试。
BOOT_MODE的每一位通常对应一个物理引脚,硬件上通过上拉或下拉电阻设定。例如,BOOT_MODE[1:0]=00选择内部Flash,01选择外部FlexSPI Flash,10选择ISP模式。具体编码需查阅对应型号的参考手册,不同系列可能存在差异。
三、ISP模式与固件下载
ISP(In-System Programming)模式是MCX芯片出厂时Boot ROM内置的串行下载功能。进入ISP模式后,芯片不再从Flash启动,而是等待主机通过指定接口发送固件数据。MCX常见的ISP接口包括UART、USB CDC、I2C和SPI,具体支持哪些接口取决于型号。
ISP模式的进入方式有两种:一种是通过BOOT_MODE引脚在复位时选择ISP;另一种是在应用程序中通过软件触发,写入特定寄存器后执行复位,Boot ROM检测到该标志后进入ISP。软件触发方式适合产品已经部署到现场后,通过通信接口远程触发升级。
ISP下载过程通常包括:主机发送同步字符、芯片回应ACK、主机发送命令包(如写Flash、擦除、跳转)、芯片执行并返回状态。整个协议由Boot ROM固化实现,开发者只需按照NXP提供的ISP协议文档或使用MCUBootUtility等工具即可完成。
四、内部启动与外部启动的硬件设计要点
内部Flash启动的硬件设计相对简单,只需确保BOOT_MODE引脚在复位期间为正确电平即可。但需要注意:如果内部Flash为空或校验失败,Boot ROM可能会自动回退到ISP模式或外部启动,具体行为取决于芯片的启动回退策略。
外部FlexSPI启动的设计要点更多。首先,FlexSPI接口的引脚(SCLK、SS、IO0~IO3或IO0~IO7)需要正确连接外部Flash,并注意信号完整性。其次,外部Flash的复位引脚、写保护引脚需要根据启动需求配置。第三,Boot ROM会读取外部Flash的特定偏移地址(通常是0x400)获取FlexSPI配置参数(FDCB),因此外部Flash中必须预先烧录正确的FDCB和启动头。
五、启动配置的典型电路与参数示例
以下给出一个典型的MCX启动配置电路示例。假设使用MCX A系列,BOOT_MODE[1:0]由两个引脚PIO0_1和PIO0_2控制,ISP_EN由PIO0_3控制。设计目标为:默认从内部Flash启动,保留外部Flash启动和ISP模式作为可选路径。
BOOT_MODE[1:0] PIO0_1 PIO0_2 启动介质
00 下拉 下拉 内部Flash
01 上拉 下拉 外部FlexSPI Flash
10 下拉 上拉 ISP模式
11 上拉 上拉 保留/测试
ISP_EN PIO0_3 功能
0 下拉 禁止ISP
1 上拉 使能ISP(与BOOT_MODE配合)
硬件上,PIO0_1和PIO0_2各接一个10kΩ电阻到VDD或GND,通过跳线或0Ω电阻选择。PIO0_3接10kΩ下拉,同时预留一个测试点或排针,便于量产时拉高进入ISP。复位引脚需要接100nF电容到地,确保复位期间引脚电平稳定。
需要注意的是,这些引脚在复位后可能被应用程序重新配置为其他功能。因此,在应用程序初始化阶段,应尽快将这些引脚切换为所需功能,避免悬空或冲突。如果应用程序中需要将这些引脚用作普通GPIO,必须确保外部电路不会在复位期间产生错误电平。
六、启动流程与状态判断
MCX的启动流程可以概括为:复位释放→Boot ROM采样启动引脚→根据BOOT_MODE选择启动介质→从对应介质加载启动头→验证并跳转到应用程序。如果加载失败,Boot ROM会根据配置进入ISP模式或触发复位循环。
在实际调试中,可以通过以下方式判断启动状态:观察复位后特定GPIO的输出(部分型号Boot ROM会输出启动状态指示);通过调试器读取Boot ROM的状态寄存器;或者使用示波器抓取FlexSPI接口的波形,确认Boot ROM是否发起了外部Flash读取。如果外部Flash启动失败,常见原因包括FDCB错误、Flash未供电、FlexSPI引脚虚焊或启动头校验失败。
七、量产与升级场景下的配置策略
在量产阶段,通常需要一种既能自动进入ISP下载、又能在下载完成后自动切换到内部Flash启动的配置方式。常见做法是:将BOOT_MODE默认设为内部Flash启动,同时保留ISP_EN测试点。产线工装通过拉高ISP_EN并复位芯片,使芯片进入ISP模式完成固件烧录;烧录完成后释放ISP_EN,再次复位,芯片从内部Flash启动。
对于现场固件升级,如果产品已经部署且无法物理接触,则需要在应用程序中实现软件触发ISP。具体做法是:应用程序接收到升级命令后,将升级标志写入备份寄存器或特定RAM区域,然后执行系统复位。Boot ROM在复位后会检查该标志,如果有效则进入ISP模式,等待主机通过通信接口发送新固件。升级完成后,Boot ROM或应用程序清除标志,恢复正常启动。
无论采用哪种方式,都需要注意启动配置引脚在复位期间的电平稳定性。建议在PCB布局时将这些引脚的上拉/下拉电阻靠近芯片放置,避免长走线引入噪声。如果引脚同时连接了其他外设,需要确认外设在复位期间不会驱动这些引脚到错误电平。
总结来说,MCX的启动模式配置围绕BOOT_MODE和ISP_EN等引脚展开,硬件设计需要保证复位期间电平稳定,软件设计需要合理利用ISP模式实现量产烧录和现场升级。理解Boot ROM的采样时机和启动回退策略,能够帮助开发者在启动失败时快速定位问题,并设计出可靠的固件升级方案。