一、特性概述Tiny OTA 工具1. 支持i.MXRT117x 2. 支持i.MXRT118x 3. 支持NOR Flash一般读写擦操作 4. 支持UARTUSB blhost协议与MCU ROM通信 5. 支持bootloader程序加头(slot0,1 app start, Magic)与下载 6. 支持application程序加头(Len, CRC32, Version, Magic)与下载Tiny OTA 固件1. 支持i.MXRT117x 2. 支持i.MXRT118x 4. 支持主核示例程序对于双核MCU而言 4. BL: 仅支持FlexSPI1 XIP application程序管理 (永远从slot 0位置启动) 5. BL: 支持CRC32-MPEG2校验以判断application完整性 6. BL: 复用软件可靠升级流程(来自于Kinetis Bootloader) 7. BL: 5秒超时内通过UARTUSB blhost与上位机通信否则跳转进application执行二、MCU端固件固件地址 https://github.com/JayHeng/imxrt-tiny-ota-fw/archive/refs/tags/v1.0.zip IDE版本IAR EWARM v9.70.12.1 tota_app使用 IAR 打开 \imxrt-tiny-ota-fw\targets\imxrt1180\apps\tota_app\cm33 工程基于SDK hello world XIP 工程切换到 flex_nor_debug target工程选项里已经设置了 XIP_BOOT_HEADER_ENABLE0即生成的 binary 就是裸的 ARM 程序当前在其链接文件里设定 ARM 程序起始地址在 FlexSPI1 Flash 的 0x28080000 处编译生成 tota_app_cm33.binbin 起始地址就是 0x28080000用户可根据需要修改 tota_app 工程链接文件里的 app_image_offset 值。define symbol m_flash_start 0x28000000; define symbol app_image_offset 0x00080000; define symbol m_text_start m_flash_start app_image_offset;有了 tota_app_cm33.bin 之后后续再通过 MCU-TinyOtaUtility 工具加上 OTA 头包含 Length、CRC32、Version、Magic并将其烧写到 Flash Slot0 或者 Slot1 位置注意 Slot 0 对应偏移应与 app_image_offset 一致OTA 信息位置复用了 ARM Vector Table 里保留的如下几个 Vector。2.2 tota_sbl使用 IAR 打开 \imxrt-tiny-ota-fw\targets\imxrt1180\apps\tota_sbl\cm33 工程基于SDK flashloader 工程但是对工程做了一些改动增加了 ROM boot header链接文件也从 RAM target 改成了标准 XIP target此外还使能了黑科技即利用 IDE 特性将除了 init_data_bss 代码之外的 RO 段全部搬移到 RAM 执行这样方便运行后续因 application 搬移需要的 Flash 擦写操作当前在其链接文件里设定 ARM 程序起始地址在 FlexSPI1 Flash 的 0x2800B000 处编译生成 tota_sbl_cm33.bin注意 bin 起始地址是 0x28000400因为包含 fcb 等启动头一般来说我们无需修改 tota_sbl 工程链接文件。define symbol m_flash_start 0x28000000; define symbol app_image_offset 0x0000B000; define symbol m_text_start m_flash_start app_image_offset; define symbol m_fcb_offset 0x400; define symbol m_fcb_start m_flash_start m_fcb_offset; define symbol m_interrupts_ram_start 0x304A0000;因为 RT1180 独特的 TRDC 权限管理在 tota_sbl 工程配套的 container 里的 image_entry.size 长度需要覆盖从 Flash 起始地址一直覆盖到 Slot 0 全部空间否则会影响 ROM 跳转至 tota_sbl 以及 tota_sbl 跳转到 tota_app 执行。这一点后续可改进为在 tota_sbl 里设置 TRDC 权限来解决 tota_app 跳转权限问题这样可以减小 container 里的 image_entry.size 长度仅需覆盖 tota_sbl 空间即可。有了 tota_sbl_cm33.bin 之后后续再通过 MCU-TinyOtaUtility 工具加上 OTA 头包含 slot0,1 app start, Magic并将其烧写到 Flash 起始位置从 fcb 位置开始OTA 信息位置依然复用了 ARM Vector Table 里保留的如下几个 Vector。这里的 app load addr 参数功能暂时还未实现后续可用于拓展支持灵活的 application 加载地址配置。当 Flash Slot 0,1 处分别有了可用的 application为了调试方便我们也可以直接手动修改 tota_sbl 工程的 startup 文件里的如下参数值这样可以直接在线下载调试 tota_sbl 工程无需通过上位机工具来添加 OTA 头以及烧写。2.3 SBL里Reliable Update流程当 SBL 里 OTA 头 Magic 校验通过且 slot 0,1 地址有效时SBL 会执行 Reliable Update 流程。1. 如果 slot 0,1 程序均无效无 Magic 或者 CRC 校验失败直接进入 ISP 模式等待上位机下载 2. 如果 slot 0 程序有效slot 1 程序无效5s 超时后跳转至 slot 0 程序执行 3. 如果 slot 0 程序无效slot 1 程序有效将 slot 1 程序拷贝至 slot 0 位置5s 超时后跳转至 slot 0 程序执行 4. 如果 slot 0,1 程序均有效判断两者的程序版本 - 如果 slot 0 版本不低于 slot 1 版本5s 超时后跳转至 slot 0 程序执行 - 如果 slot 0 版本低于 slot 1 版本将 slot 1 程序拷贝至 slot 0 位置5s 超时后跳转至 slot 0 程序执行三、PC端GUI工具工具地址 https://github.com/JayHeng/MCU-TinyOtaUtility/archive/refs/tags/v1.0.zip3.1 建立连接双击 \MCU-TinyOtaUtility\bin\MCU-TinyOtaUtility.exe 打开工具根据目标板 Flash 连接情况做相应设置将 RT1180-EVK 开发板启动模式设置为 ISP 模式然后连接上 UART 或者 USB cable点击 Connect 按钮可在左下角信息框里看到连接信息。3.2 OTA下载准备好了 tota_sbl_cm33.bin 以及 tota_app_cm33.bin 之后可先点击界面篮圈指示里 Stage1 BL File, Slot0/1 App File 按钮分别指向对应的路径这里 Slot0/1 可用同一个 application binary 文件。然后设置红框里的 start 以及 version 参数这里 Stage1 BL 对应的偏移 0x400以及 Slot0 App 对应的偏移 0x80000 应与对应工程链接文件设置匹配而 Slot1 App 对应的偏移位置可自由设置至于 Version 设置目前最大支持 V255.255 即 2bytes 存储。设置好了之后最后点击 All In One 按钮即可完成三个文件的 OTA 头添加以及下载也可分步操作。