查看: 1683|回复: 2

i.MX RT1010 OTA存储结构小记

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32003
    最后登录
    2024-4-9
    发表于 2021-11-1 11:07:35 | 显示全部楼层 |阅读模式
    i.MX RT1010 OTA存储结构小记



    最近恩智浦在Github发布了一套基于MCU的OTA工程,该工程支持i.MX RT系列,且支持security的相关功能,得到了用户的广泛关注。


    这套工程是基于恩智浦的EVK开发板,板载Flash的容量也就决定了整个OTA工程的存储结构。但是不同容量的flash,OTA的存储结构也不尽相同。
    本文将最近支持客户时的一些经验予以总结,当大家更换flash的时候,可以更快的完成OTA工程配置。
    本文介绍的方案为基于Remap功能实现OTA的方法。
    整个OTA的存储结构可以用下图进行表示,即 SBL(Secure Bootloader), OTA Flag Data,Slot1,Slot2和Customer Data区域。
    13.png
    SBL的主要功能是用于在芯片POR启动后,根据OTA flag data的信息,决定存储在Slot1或者Slot2的程序进行运行。除此之外,还支持程序的验签,回滚等功能。
    14.png
    OTA Flag Data区域主要是用于存储OTA升级过程中的一些标志位信息,根据相关的标志位信息SBL进行image升级,回滚和跳转到对应的slot运行程序。
    Slot1和Slot2用于存储应用程序。
    Customer Data用于存储客户的一些信息(可选项,非必须)。
    本文将就上述几个区域的存储空间分配,及中间的一些需要注意的点予以介绍。

    基本的硬件环境是i.MX RT1010-EVK开发板,客户的实际需求是使用一颗容量为512KB的Flash,且不需要使用Security相关的功能。因此在禁用Security功能后,使用IAR编译出一个大小为25KB的SBL.bin文件。
    由于OTA中使用的Remap功能需要4KB对齐,以及Flash的最小擦除容量是4KB,因此SBL分配的容量是28KB,则此时SBL的地址分配空间为:

    OTA Flag data尽管只有32Bytes的数据,但是在升级过程中这些数据需要读写擦,但Flash的擦除过程需要按照Sector的大小进行,因此也至少需要留存4KB的空间,则此时OTA Flag data的地址及空间分配为:
    15.png

    接下来就是Slot1和Slot2,Slot1和Slot2要使用Remap的功能进行切换,Remap的地址需要4K对齐,则此时用于存储应用层程序的地址空间分配为:
    16.png
    此时,细心的朋友们就会发现,完整的512K Flash空间已经被使用光了。没错,这次客户不需要用这个CustomerData区域,希望把更多的空间用于应用程序。

    在完成了OTA存储结构按功能地址分配之后,我们进行一些细部探究。

    首先看SBL,SBL区间主要包括用于Flash boot的相关信息,例如IVT, Flash Config Block等。这部分代码基本上不需要改动,可以直接使用。

    在地址空间分配上,可以将SBL区域视为一个可以从Flash XIP boot的hello word工程。
    17.png
    接着看一下OTAFlag Data区间的地址分配,OTA Flag Data共计32个字节,用于指示OTA过程中的三种状态,升级,回滚以及正常工作(没有升级和回滚发生)。
    18.png
    该32字节通常存储在Slot1的首地址之前的32字节位置。
    19.png
    最后来看Slot1和Slot2的地址空间分配。
    应用程序的首地址,即中断向量表的首地址并不是从Slot1的首地址开始的,原因有两点

    第一在image的起始地址需要增加用于OTA的ImageHeader信息,该Image Header的大小为32字节。
    其次,对于应用程序中中断向量表的起始地址,需要进行计算。其基本的计算原则是:中断向量的数量 * 4的结果,向上对齐到2的次幂整数倍。看RT1010的中断向量共计256个,但是真正可以使用的是96个。则此时的计算结果是:96 * 4 = 384。向上对齐到2次幂整数倍,则为512即0x200。
    所以,应用程序的真正起始地址需要在Slot1的基础上,向后调整0x200。

    Slot2的空间分配也需要满足这个条件。
    20.png
    最终完整的地址空间分配如下图所示:
    21.png
    当需要对OTAFlag Data以及Slot地址进行分配,可以在程序中搜索下图中的关键词进行更改,对下面的表格进行调整。

    通常需要进行关注的关键地址为:BOOT_FLASH_ACT_APP和 BOOT_FLASH_CAND_APP。其余的地址信息,与这两个地址信息存在依赖关系,程序内部可根据这两个地址信息进行计算。
    22.png
    需要注意的是,本文中涉及到的OTA方法,是基于Remap功能实现的,因此仅仅适用于除RT1050,RT1020, RT1024, RT1015以外的RT系列。

    最后,向在本次客户支持中提供大量协助的Tim, Gavin, Xiaoli表示感谢。

    差点忘了,原工程的下载地址是:
    https://github.com/NXPmicro/sbl
    https://github.com/NXPmicro/sfw

    签到签到
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    11

    帖子

    0

    注册会员

    Rank: 2

    积分
    113
    最后登录
    2023-3-21
    发表于 2022-9-2 13:20:30 | 显示全部楼层
    认真学习这个做法
    MCU里面其实是有2个img的 可以说是乒乓升级

    但是github的链接 win10起不来gui
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32003
    最后登录
    2024-4-9
     楼主| 发表于 2022-9-2 13:35:29 | 显示全部楼层
    与龙共舞 发表于 2022-9-2 13:20
    认真学习这个做法
    MCU里面其实是有2个img的 可以说是乒乓升级

    哪里原因,发个问题帖出来大家一起看看
    签到签到
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 03:23 , Processed in 0.121372 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表