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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. 固件升级跳转测试(基于32B1H和MCAL)

固件升级跳转测试(基于32B1H和MCAL)

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

    Boot代码由App代码做一定删减后所得。保留必要的Gpt,Uart,Can,Fls等模块。

    假设考虑给Boot代码预留128K字节空间。使用IAR,

    Boot代码做如下设置:

    • YT-LINK不需要任何改动。

    • IAR设置下载空间
      8a29d4c7-7221-4df3-97f9-ebb98b98c897-image.png

    • 跳转代码如下:
      void JumpToApp(uint32_t addr)
      {
      // 1-关闭外设
      // Gpt_DeInit();
      // Can_DeInit();
      // CddDma_DeInit();
      // CddUart_Deinit();

      // 2-关闭中断
      __disable_irq();

      // 3-开始跳转
      uint32_t sp = *((volatile uint32_t *)(addr));
      uint32_t pc = *((volatile uint32_t *)(addr + 4));

      typedef void (*Func_void_void)(void);
      Func_void_void ResetHandler = (Func_void_void)pc;

      SCB->VTOR = addr;

      __set_MSP(sp);
      __set_PSP(sp);

      ResetHandler();

      while(1) Wdg_180_Inst0_Service();
      }

    App代码作如下设置

    • 偏移Code地址,增加一个BOOT占位空间,大小为0x20000
      617639e6-366c-4fa2-8336-ce339766c582-image.png

    • IAR设置下载空间, code起始地址为0x2020000;

    测试现象:
    1- Boot和App之间跳转正常,如果后续完善Boot代码,可以方便地实现Boot代码的加密以及App代码的固件升级。仅对Boot代码加密应该就可以了。

    2- Boot代码和App代码对时钟的设置是一样的,App代码一定不要重复初始化MCU和时钟,不然会有意想不到的问题。

    3- Boot代码在跳转前是否需要关闭已注册的外设,感觉这个不是必须的,一方面已经关闭全局中断了,另外,有些MCAL外设也没有对应的DeInit函数,不知道这样理解对不对。

    4- 关闭中断后,看门狗仍然是有效的,不至于造成Boot代码成为mcu软件中的不安全因素。

    1 条回复 最后回复
    1
    • yxydoctorY 离线
      yxydoctorY 离线
      yxydoctor
      写于 最后由 编辑
      #2

      串口升级完美解决,展示一下:
      下载.png

      波特率固定为230400,165K的BIN文件,下载时间=10s。文件被分割为同pflash扇区大小的子包(2048字节),顺序发送。每一个子包尾缀CRC校验;上位机在收到成功接收应答信号后,才会发送编号连续的下一帧子包,保证下载过程的有序性。

      下位机BOOT代码会涉及到串口收发和Fls的读写擦操作。有几个坑点一定需要注意:

      • 坑点1:BOOT跳转代码不支持OS,OS线程中做跳转的话,就不知道跳那儿了;裸机跳转正常;

      • 坑点2:fls扇区擦除/写操作不能使能异步模式。
        fls.png

      • 坑点3:上位机在发送2048字节子包时,发送buff一定要先赋值0xff,之后再赋新值。这点是考虑最后一帧不满2048字节时,要以0xff填充;不然也会有问题。

      • 坑点4:几个关键地址
        1 - APP代码偏移地址=0x020000;
        2 - BOOT跳转地址=0x02020800;即跳转到APP的IVT;
        3 - 固件BIN文件需要拷贝到Pflash的物理地址=0x020000;
        4 - fls设置地址序号 = Pflash-S64开始;
        5 - IAR下的烧录地址=0x02020000

      注意以上坑点后,APP固件即支持串口烧录,也支持IAR在线仿真。

      1 条回复 最后回复
      0

    • 云途论坛规则/Yuntu Forum Rules

      发帖前请查看

    • YCT离线License申请流程

      帮助没办法联网的电脑使用YCT

    • YT CONFIG TOOL调查问卷

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

    • demo
      12
      can
      9
      lin stack
      6
      yt-link
      5
      vscode
      3
      adc模块
      2
      i2c
      2
      uuid
      2
      Online Users
      • 登录

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