跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. BootSwap A/B面切换时间差异

BootSwap A/B面切换时间差异

已定时 已固定 已锁定 已移动 未解决 YT SDK
1 帖子 1 发布者 26 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • D 离线
    D 离线
    Derrick YunTu
    编写于 最后由 编辑
    #1

    1. 前言

    • BootSwap 是一种 A/B 双区启动切换机制,用于在 MCU 的两个 Flash 启动块之间进行切换。
    • 云途芯片 M 系列、H 系列均支持 BootSwap。
    • BootSwap 的操作本质是对 BOOT_NVR 扇区进行擦写操作。A -> B 和 B -> A 的擦写操作不同,导致 A/B 面切换时间不同,在一些应用中可能带来超时,如诊断超时、看门狗超时等。
    • 本文以 HA01 芯片为例,介绍 BootSwap 的原理、A/B 面切换的时间差异,以及 ABSwap 操作不支持异步的原因。

    2. BootSwap原理

    • YTM32B1HA0 片上集成了 2 片容量为 1M 的 flash,称为 pflash0 和 pflash1,总计 2MB,上电从 Rom Boot启动,按照BVT解析出地址跳转;默认是跳转到到pflash0 起始地址 0x200_0000 启动。
    • 默认情况下,pflash0 被映射在 0x200_0000 开始的地址空间,pflash1 拼接在 pflash0 之后。
    • 当执行了 BootSwap 命令后复位,pflash1 的物理存储被映射到 0x200_0000 开始的地址空间,pflash0 拼接在 pflash1 之后。
      86e2b2bb-e4c5-4cbe-af9a-5b887af65885-image.png

    2.1 EFM命令和BOOT_INFO

    • 执行 BootSwap 命令的具体操作,就是向 EFM 模块的 CMD 寄存器写入 BootSwap 的命令码 0x30,如下图所示。
      8737189b-ead3-4d7b-b01a-6bc6e205f665-image.png
    • 在 EFM 模块的 STS 状态寄存器中,可以通过 BOOT_INFO 标志判断当前 0x200_0000 开始的区域映射在哪块 pflash 上,如下图所示。
      07b0d895-2b47-4f1a-b0fe-b276afbc5c72-image.png
    tips:只有当芯片复位之后,新的设置才能生效。通常在软件中,执行 BootSwap 命令后,再调用NVIC_SystemReset()函数复位生效。
    

    3. 核心一:A/B 面切换时间差异

    3.1 原理:写入 vs 擦除

    • HA01 的 BOOT_NVR 区域视图如下(BOOT_NVR 在 Block0):
      49ca1c01-58cc-4266-adc2-47a6735c08d9-image.png
    • A面 -> B面:EFM 在 STS[BOOT_INFO]=0 的状态下(A面)接收到 BOOT_SWAP 命令时,会向 BOOT_NVR 扇区的前三个地址依次写入 SWAP_TAG(0x5A5A5A5A5A5A5A5A)。
      5e9a479e-e3d7-42bb-97a2-48bd05d0c4f1-image.png
    • B面 -> A面:EFM 在 STS[BOOT_INFO]=1 时(B面)收到 BOOT_SWAP 命令,EFM 会擦除 BOOT_NVR 扇区。
      ce673841-60e3-49ac-bea7-ea50b1694b62-image.png
    • MCU 复位后的 EFM 硬件初始化过程会读 BOOT_NVR 扇区的前三个地址:如果读回的数据有至少两个等于 SWAP_TAG(0x5A5A5A5A5A5A5A5A),硬件会将 STS[BOOT_INFO] 置 1(0x200_0000 映射到 B 面),表明进入 PFlash 逻辑地址重映射模式;否则 STS[BOOT_INFO] 保持复位值 0(0x200_0000 映射到 A 面)。

    3.2 时间数据

    • STS[BOOT_INFO]=0 的状态下,A面 -> B面 时,EFM 会对 BOOT_NVR 扇区进行写入操作(Program),耗时很短(约82us)。
    • STS[BOOT_INFO]=1 的状态下,B面 -> A面 时,EFM 会对 BOOT_NVR 扇区进行擦除操作(Erase),耗时较长,擦除一个扇区需要 20ms。
      c5515a45-e8fe-44e0-ad40-e4151447ab90-image.png
    • 实测配置如下:
      d73d87a6-8146-4a8a-8baa-ceef86e9ac6d-image.png
    • A面 -> B面,耗时78us:
      8544a8a0-fbc0-47e4-b33f-0742ffaf48b8-image.png
    • B面 -> A面,耗时约19ms:
      3d5d205e-5918-4499-aeac-c32feb148922-image.png

    4. 核心二:ABSwap 操作不支持异步

    • 因为 BOOT_NVR 区域和 PFlash0(A面)同在一个 Block0 上,所以从理论上来讲,A面 -> B面 时 EFM 对 BOOT_NVR 区域只能进行同步操作,即对 BOOT_SWAP 区域写入 TAG 需要关闭全局中断,等待写入完成。
    • 而 B面 -> A面 时,程序在 B面(Block1)上运行,对 BOOT_NVR 区域(Block0)是可以异步操作的,即在对 BOOT_NVR 擦除的 19ms 内,CPU 可以异步继续执行别的代码。
    • SDK 的 ABSwap 操作是统一同步操作:
      1a3b27d8-dd23-47de-b0b3-12486cd36bde-image.png
    因为 A面 -> B面 只能同步,B面 -> A面 可同步可异步,为了操作统一,SDK 的 ABSwap 只支持同步操作,不支持异步。
    

    5. 小结

    • A/B 面切换的时间差异源于操作类型不同:A面 -> B面 是向 BOOT_NVR 写入 SWAP_TAG(约 80us),而 B面 -> A面 是擦除 BOOT_NVR 扇区(约 19ms),两者相差两个数量级。
    • 由于 BOOT_NVR 与 A面(PFlash0)同处 Block0,A面 -> B面 只能同步操作;SDK 为统一行为,ABSwap 仅提供同步接口,不支持异步。
      bfc29439-02e4-446e-b540-108cd77e2041-image.png
    tips:在一些对时序要求较高的场景中,要特别注意 A/B Swap 时间差异带来的时序影响。例如诊断帧超时和看门狗超时。
    其他系列芯片原理一样(MD1是操作CUS_NVR),BOOT_NVR(CUS_NVR)所属Block和Sector擦除时间不同,都可参考本文进行评估。
    

    6. 测试验证

    6.1 环境

    Config Tool Version:3.1.0
    HA01 SDK version:1.4.1
    EVB version: YTM32B1HA0-EVB-LQFP176

    6.2 下载说明

    • 在运行用例时,需要进行两次下载:第一次下载程序,下载到从 0x200_0000 开始的 pflash0 中,运行程序后,0x200_0000 地址切换到 pflash1 上,此时还需要再下载一次程序,程序会覆盖到 pflash1 上。
    • 注意,第一次下载程序后运行,从 pflash1 开始启动,pflash1 此时没有可执行的程序,可能会出现“卡死”的状态,此时需要再次下载,无需修改 link 文件将程序地址映射到 pflash1。
      Flash_Demo_ABSwap.zip
    1 条回复 最后回复
    0

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

  • can
    28
    demo
    26
    uds
    14
    lin stack
    13
    fbl
    6
    md14
    6
    yt-link
    6
    adc模块
    4
    Online Users
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门