跳转至内容
  • 30 主题
    42 帖子
    FrankieF

    欢迎使用3.1.0YT Config Tool(YCT), 下面是本次版本的更新内容,希望您在使用过程中有更好的体验。一些主要的更新内部包括:

    Highlight AI FAE 功能

    b4f2230b-6c1b-41b6-8ba4-cde26f481ee7-image.png

    需要登陆才能使用

    YCT_CLI 集成

    YCT_CLI 集成在安装目录的bin文件夹下面,可以通过 -h 查看如何使用

    Details [feat]:add yct_cli to yt_config_tool [bug]:fix api edit loss bug [feat]:add ai-fae feature, need login [opt]:allow copy in YCT-Agent chat
  • 2k 主题
    9k 帖子
    D
    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
  • Blog posts from individual members

    55 主题
    192 帖子
    DigaD

    更新了 RSA Padding 方式

    RSAES-OAEP RSAES-PKCS1-v1_5 RSASSA-PSS RSASSA-PKCS1-v1_5

    这些 Padding 算法涉及到的软件流程比较多,暂不支持异步计算,需同步等待 RSA Padding 加解密完成。

    YTM32B1MD2x_HCU_Demo.zip

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

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

  • Online Users