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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. HA01 Secure boot快速启动(Fastwakeup)实现

HA01 Secure boot快速启动(Fastwakeup)实现

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

    1. 前言

    参考SDK应用_Secure_Boot 模块配置及应用文档及RM手册中关于安全启动流程的描述,MCU的安全启动分为Normal Boot Mode和Fast wakeup Boot Mode两种,应用中常见的Secure boot启动方案如下:
    bef340f4-2a46-41cd-aa43-b0f699fec09b-image.png
    本文档将基于以下软、硬件环境,介绍如何实现Fast wakeup,并在最后对比Fast wakeup和Normal Mode的启动时间差异。

    • 硬件环境:YTM32B1HA01 EVB板
    • 软件包:基于YCT工具中提供的Secure_boot_demo实现,SDK版本 1_3_1
    • 软件环境:VScode+GCC

    2. Fast wakeup实现

    2.1 Fast wakeup实现原理及步骤

    此处Fast wakeup功能通过修改Secure_Boot_Demo工程实现。
    c150c265-42f4-49d5-b7b6-11a879a0c90f-image.png

    具体操作步骤:
    1.在YTLINK中划分一个retention RAM分段,用于copy IVT段中的数据。注意:

    • 分段大小:IVT段的大小为1024,retention RAM中的分段长度配置为0x400即可
    • 分段地址:
      • 该RAM段处于retention RAM段中(0x20020000~0x20027FFF)
      • 该段的起始地址需要满足1K(0x400)

    本示例中,在地址0x20020000处创建了一个名为“retentionRam”的分段
    968014c4-a823-4b08-8e0e-cec4a08e90b7-image.png
    Tips:
    若用户需要使用YCT工具对生成的hex文件进行加密处理,务必确保增加“retentionRam”分段后编译出的hex文件不包含RAM段,否则YCT工具无法对hex文件进行加密。具体实现方式——

    • GCC环境:配置分段的noload属性即可
      4a497de6-1180-4aca-801b-2cba944a9b54-image.png

    • Keil环境:YT-link中配置的noload属性对keil环境无效,使用Keil的用户可参考论坛帖解决
      https://forum.ytmicro.com/topic/607/b1md-mcal-dio例程生成的hex文件为什么有0x1fff8400地址的信息?_=1753772506639

    2.向REGFILE->DR[0]写入快速唤醒Tag,0x5A5B6E6F

    /* Set fast wakeup tag at REGFILE->DR[0] */
    REGFILE->DR[0] = 0x5A5B6E6F;
    

    3.向REGFILE->DR[1]写入预计放入IVT数据的地址,此处应当填入"retentionRam"分段的起始地址0x20020000

    /* Set address of IVT table at REGFILE->DR[1], must be retention RAM area, and must be 1K algined */
    REGFILE->DR[1] = 0x20020000;
    

    4.copy一份IVT区域的数据存放到"retentionRAM"分段区域

    #define FLASH_IVT_ADDR        0x2000800
    __attribute__((section(".retentionRam"))) uint8_t Retention_IVT[1024];
    /* Copy IVT table to the address which is set at REGFILE->DR[1] */
    const uint8_t* pflash_ivt_src = (const uint8_t*)FLASH_IVT_ADDR;
    memcpy(Retention_IVT, pflash_ivt_src, 1024);
    

    2.2 Fast wakeup功能测试

    2.2.1 测试方式

    如下图,编辑Secure_Boot_Demo工程,通过EN_FAST_WAKEUP宏控制开启fast wake up功能,通过观测PTB12电平变化确认是否成功启动。
    b474e4d3-7edf-4b6e-aa13-2915fc482f83-image.png

    2.2.2 测试步骤

    1.下载并运行Secure_Boot_Prepare的demo工程,将密钥烧录到HCU_Nvr中。
    2.编译Secure_Boot_Demo工程,将编译生成的hex文件上传到YCT配置工具中加密,将加密后生成的.bin文件烧录到MCU中,掉电,再重新上电,即可观察到PTB12在反复翻转(如下图),证明MCU可以成功启动。
    4f157c9f-c5ad-4fa6-8635-bf9aa2d86c5e-image.png
    93dc0db0-6b39-487c-8241-46a0fc651d71-image.png
    在该演示示例中,需要说明:

    • MCU上电后首次启动走的是Normal Boot Mode,之后的每次复位走的是Fast wakeup。
    • 向MCU中烧录加密后的可执行文件,是因为上电时regfile的DR[0]、DR[1]中没有数据(regfile中的数据掉电不保持),未使能fast wakeup功能

    2.3 Fast wakeup与Normal Boot启动时间比对

    通过控制EN_FAST_WAKEUP宏来切换Fast wakeup和Normal Boot两种启动模式,测量两种模式对应的启动时间。PTB12的低电平持续时间即为相邻两次调用软件复位函数SystemSoftwareReset函数的时间。
    Fast wakeup:7.75ms
    8220ceb9-67ed-4401-b507-1802fd8ff439-image.png
    Normal Boot:8.46ms
    f606ee82-2671-4d3d-a66f-d78d99071eb2-image.png
    以上,可以看出Fast wakeup与Normal Boot启动时间上的差异,二者相差0.71ms,差异不大。
    这是因为Secure_Boot_Demo工程校验的flash区域较小,若校验的范围较大,这个时间差异会更明显。

    3. 参考代码

    HA01_Secureboot__FastWakeup_demo.zip

    1 条回复 最后回复
    3

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

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

  • can
    19
    demo
    19
    uds
    13
    lin stack
    10
    md14
    6
    fbl
    5
    yt-link
    5
    adc模块
    4
    Online Users
    EkkoE
    Ekko
    galaxyG
    galaxy
    SBH_HZNS
    SBH_HZN
    LlllllL
    Llllll
    jiankang_wangJ
    jiankang_wang
    ICEWANGI
    ICEWANG
    • 登录

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