一、 引言
FLASH SWAP 是 NXP MCX A 系列微控制器中的一项核心功能,目的在支持安全可靠的Image管理。通过在内部 Flash 空间中分配两个分区来存储两个Image映像 (Image A 和 Image B),在升级过程中,新版本的 Image 可以写入未使用的区块,然后通过交换操作使新版本的Image生效,达到线上即时更新的效果。
此功能主要提供以下优势:
1. 安全的 Image 更新:允许用户在运行系统的同时更新 Image,保留原有的 Image。
2. 可靠的回退机制 :如果更新后的新版本 Image 无法正常启动,系统会自动切回原来版本的 Image。
3. 完整性校验 :每次启动的 Image 均经过验证,防止因损坏的数据导致系统故障。
本文旨在介绍如何启动 MCX A 微控制器的 Flash SWAP 功能,这是一项有助于 Image 升级和存储管理的功能。Flash SWAP 允许系统在执行应用程序的同时进行 Image 的更新,从而实现无缝升级,避免了因更新而让系统中断的情况。
二、Flash SWAP原理介绍
Flash SWAP 的运作原理基于交替使用 Flash 的两个区块(区块 0 和区块 1)。当系统运行于一个区块(例如区块 0)时,另一个区块(区块 1)处于闲置的状态,可以用来写入新的 Image。
以下是 Flash SWAP 的Image更新流程:

1. 系统首先从预设的区块(例如区块 0)启动并运行。此时,区块 1 处于闲置的状态。
2. 当需要进行 Image 升级时,新版本的 Image 写入原本闲置的区块(区块 1)。在写入过程中,区块 0 保留正常运行应用程序。
3. 在新的 Image 写入并验证成功后,MCU 通过设置 SWAP 控制寄存器进行交换操作,使区块 1 成为新的运行区块。
4. 系统重启后,MCU 将从区块 1 启动并运行新的 Image,原先的区块 0 则成为闲置状态,等待下一次更新。
这种交替使用 Flash 区块的机制,确保了系统在升级过程中始终有一个稳定的 Image 版本可供运行,从而最大限度地降低了升级失败导致系统无法运行的风险。
三、MCX A 的 Flash SWAP

上图为 MCX A 系列 Flash SWAP 功能的流程图,描述了 Image 更新和交换(Swap)的操作逻辑,以下是流程介绍 :
1. Enter Flash Swap
系统进入 Flash SWAP 模式,此步骤通常是由用户应用程序或 Bootloader 启动,用于执行Image交换操作。
2. Swap Enabled on IFR0 ?
检查 IFR0(Information Flash Region 0) 中是否启用了 Flash SWAP 功能。如果有启用,进一步进行 Image 交换检查。反之,则流程结束。
3. Get Swap Image Offset & Size
提取 Swap Image 的起始偏移地址和大小,此步骤确保系统能知道 Swap Image 的位置以及存储区域的配置。
4. Swap Image Has Version ?
检查 Swap Image 是否包含版本信息(通常存储于 Flash Configuration Block,FCB)。如果有版本信息,下一步会与当前 Image 比较,反之,则禁用 Flash SWAP,退出流程。
5. Newer Version
检查 Swap Image 的版本号是否高于当前运行的 Image 版本,如果 Swap Image 较新,下一步会检查程式完整性。反之,则禁用 Flash SWAP,退出流程。
6. Integrity Check Swap Image
验证 Swap Image 的完整性,通常会计算并校验 Swap Image的校验码 (Checksum) 或 Hash 值。如果验证成功,进一步配置硬体,反之,则禁用 Flash SWAP,退出流程。
7. Program Corresponding Registers
配置相关的硬体寄存器以准备执行 SWAP 操作,此步骤通常会进行 Flash 控制寄存器配置,设置系统将 Swap Image 作为下一次启动的有效 Image。
8. Enable Swap
启用 SWAP 功能,硬体执行 Flash 区域的交换(例如:Swap Image 替代当前运行 Image)。
9. Exit Flash Swap with Status
根据执行结果退出 Flash SWAP 流程,此时可能会返回执行状态(成功或失败)供用户应用程序记录或处理。
接着,我们进行 Flash SWAP 功能实作。
四、Flash SWAP 功能实作
我们利用 FRDM-MCXA153 开发板,搭配 SDK 中 led_blinky 范例,透过读取 Image Version (0x24h) 信息,改变 LED 的颜色输出,借此验证 Flash Swap 功能。
以下是验证环境
1. FRDM-MCXA153 开发板

2. MCUXpresso IDE V11.10.0_3148

3. MCUXpresso Secure Provisioning V8

4. led_blinky 范例 ( 使用 FRDM-MCXA153 SDK 2.16.000 )

接着进行程式调整。
1. 利用 ConfigTools -> Pins,新增 LED_GREEN 脚位 (P3_13)


2. 在 main.c 中,定义一个 bool (此处名称为 systick_irq),让 systick 进入中断时,改变变数内容,借此改变 LED 状态

3. 在 main 函式中,初始化 LED_GREEN 脚位

4. 在 main 函式中,定义一个变数 (此处名称以 image_version 为例),保存 Image Version (位址 0x24) 的内容

5. 当 systick_irq 等于 true 时,系统会依据读取的 image_version 决定哪个 LED 会闪烁 ( Image Version = 1 时,LED 闪烁红色,Image Version = 2 时,LED 闪烁绿色 )

6. 修改完成,我们编译专案,再透过 Binary Utilities 将 axf 档案转成 bin 档

完成后,接着透过 MCUXpresso Secure Provisioning Tool 进行烧录与功能验证
7. 让 FRDM-MCUX153 进入 ISP 模式,请在断电模式下,先按住 EVB的 SW2 再上电

8. 开启 MCUXpresso Secure Provisioning Tool,依造下列步骤建立 Workspace


9. 请依下列步骤,建立第一组 Image ( Image Version = 1 ),烧录在 0x00000000 的位址

Step 1 : 选取 Led 专案转出的 bin 档案
Step 2 : Boot 栏位中,选取 Plain with CRC
Step 3 : Image Version 填 “1”
Step 4 : 点选 Dual Image Boot
Step 5 : 点选 Target dual boot image 与 Image 1 size 内容与上述内容一致
Step 6 : 完成后,选取 Build image 建立 Image Version = 1 的烧录档
10. 依下列步骤,烧录第一组 Image

Step 1 : 选取 Write Image 栏位
Step 2 : 选取 UART 栏位,确认 UART 的PORT 与您的环境一致,Baud rate 为 115200
Step 3 : 确认后,选取 Write image 开始烧录
11. 烧录完成后,重置 FRDM-MCXA153 开发板,此时可以看到开发板上的红灯持续闪烁,代表 Image Version 1 正在运行

再来,我们建立第二组 Image
12. 让 FRDM-MCUX153 进入 ISP 模式,断电模式下,先按住 EVB上的 SW2 再上电

13. 请依下列步骤,建立第二组 Image ( Image Version = 2 )

Step 1 : 选取 Build Image 栏位
Step 2 : 将 Image Version 的值修改为 2
Step 3 : 完成后,选取 Build image 建立 Image Version = 2 的烧录档,烧录在 0x00010000 的位址
14. 选取 Tools -> Flash Programmer

15. 请依下列步骤,烧录第二组 Image

Step 1、Step 2 : 载入 Image Version = 2 的 Bin 档
Step 3 : 将 Address 调整为上述内容
Step 4 : 选取 Auto erase、Auto verify
Step 5 : 选取 Write 开始烧录
16. 烧录完成后,重置 FRDM-MCXA153 开发板,此时可以看到开发板上的绿灯持续闪烁,代表 Image Version 2 正在运行,因两个 Image 的烧录位址不同,也代表着 Flash SWAP 的功能有顺利的切换

五、总结
MCX A 系列的 Flash SWAP 功能是一种强大而方便的工具,能够帮助开发者实现 Image 的无缝升级。在操作过程中,请确保严格按照步骤进行,并充分考虑数据的完整性和安全性,以达到最佳效果。
231

被折叠的 条评论
为什么被折叠?



