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

YunTu Forum

YTMicro.com
  1. 主页
  2. Blogs
  3. MC03_ABSwap FEE数据可保持

MC03_ABSwap FEE数据可保持

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

    版本:

    Config Tool Version:2.7.6
    MC03 SDK version:1.3.1

    前言:

    有硬件ABswap后FEE历史数据保持的需求。由于YTM32B1MC系列MCU⽆内置EEPROM,故对需要使⽤EERPOM的应⽤场景可通过DFlash及软件模拟实现EEPROM功能。
    本⽂简述云途YTM32B1MCx系列的硬件ABSwap原理和FEE历史数据保持实现过程和使用方法。

    1. BOOT_INFO寄存器

    不同型号的芯片描述不一样,MC03描述如下:
    32fe0b96-559f-48f5-b014-01b478142442-image.png
    ME05描述如下:
    6ace7f21-b914-457e-a9fb-ee8325e64733-image.png
    简单来说,BOOT_INFO寄存器可以用来判断程序是从PFLASH0还是PFLASH1启动。

    2. MC03_AB_Swap-地址重映射

    如下图为MC的AB_Swap地址重映射流程说明。
    当STS[BOOT_INFO]=O时执行BOOT_SWAP命令,然后复位EFM,STS[BOOT_INFO]将置为1,地址将重新映射:
    1.P_Flash0的Soc地址重映射到P_Flash1时,D_Flash0的Soc地址重映射到D_Flash1。
    2.P_Flash1的Soc地址重映射到P_Flash0时,D_Flash1的Soc地址重映射到D_Flash0。
    当 STS[BOOT_INFO]=1时执行BOOT_SWAP 命令,然后复位EFM将切换回地址映射并清除STS[BOOT_INFO]标志。
    4c336365-6c1f-4ff5-93e2-81d0a801411a-image.png

    3. FEE数据搬运

    如下图为各个FLASH区域之间支持边读边写的关系。
    1.异步访问:因为P_Flash0,D_Flash0在同一个FLASH块,P_Flash1,D_Flash1在同一个FLASH块。所以P_Flash0对D_Flash1支持边读边写,P_Flash1对D_Flash0支持边读边写,即异步访问。
    2.当程序从P_Flash0启动时,建议将FEE数据存储在D_Flash1,这样在读写D_Flash1时CPU无需等待,实现异步操作。反之亦然。
    ee8ef5cd-f712-4175-9e76-baf64e691b44-image.png
    如下图为MC的AB_Swap流程图。
    当程序从A区(P_Flash0)切换到B区(P_Flash1)时,如果想用相同的FEE配置去读写FEE,就需要在AB_Swap之前将D_Flash1的内容copy到D_Flash0。因为D_Flash的地址也会重映射。
    4245730f-76c1-4ce5-9360-1b2698815b8c-image.png

    4. 示例程序

    • 基于MC03 Demo板,启用Ptmr(用于定时AB_Swap),FLASH,FEE,UART(便于调试)。
    • A,B区程序仅LED灯点亮部分代码不同,其他配置一样,A区亮蓝灯,B区亮绿灯。
    • 程序每1秒(Ptmr定时)进行一次AB_Swap,A,B区灯交替点亮。
    • A,B区程序都会对FEE进行写读操作,并进行读写校验。
      1.FEE配置
      配置了3个BLOCK,每个BLOCK128字节.
      34d70248-223b-4d3c-8936-a5f3dd616b45-image.png
      FEE_Task:
      ac706718-c8a3-4d37-9a6f-325f033fbd56-image.png
      写入的FEE信息和数据:
      ffb9d6dd-eeb4-4461-97d1-bea61ce52826-image.png
      2.读写校验和D_Flash copy后的数据检验
      将写入FEE和读取的数据进行检验,如果不相等程序会卡死。
      将D_Flash copy后的数据检验,不通过则设置标志位verify_nok_flag,不执行AB_Swap。
      351197d2-b93f-46f3-9efc-bd2ca94d63f4-image.png
      3.AB_Swap逻辑
      ptmr定时每1秒触发一次FEE_Task,D_Flash copy检验则执行AB_Swap。
      d7b31c34-9a9f-4a42-be0c-d124e0d9a9f4-image.png
      76777631-3f70-4552-8a51-3a10706861f7-image.png

    5. 实测验证(操作步骤)

    1. 擦除芯片
      353f24d4-6230-437a-8cdb-1930baeb8968-image.png
    2. 下载A区bin程序到地址0
      9afc8bdf-e899-4cd6-b8d7-8dd1db87ab70-image.png
    3. 下载B区bin程序到地址0x20000(A,B程序仅LED灯点亮配置不一样)
      fa7335fe-fd7c-4840-b5da-81273038ded6-image.png
      4.复位运行程序,一秒进行一次AB_Swap,同时开发板LED灯交替点亮
      4661830f-ac8b-4f92-b489-71a41326ad43-image.png

    6.压力测试

    • 定义一个AB区共享的变量,用于记录连续AC_Swap次数。
    • 因为MC03没有REGFILE寄存器(掉电保持),要实现AB区的变量共享除了retention_ram以外可以参考下面这个方法。
    • 定义一个不会重复初始化的变量ABSwapCount,用于记录AB_Swap的次数,并将这个变量作为参考值写入FEE的3个BLOCK。
    • 测试ABSwap 10000次保证程序正常运行。
    1. 配置
      在RAM段分一个POR_ONLY区,定义POR_ONLY(上电才会初始化)(AB区程序相同配置)
      864c9d01-6fae-496f-a874-4408e27e1401-image.png
      同时将其上电初始化的值由0x5A改为0:
      20c49acf-c464-43a0-8d72-ebccedb8aabe-image.png
      清除上电复位标志位,这样软件复位就不会初始化POR_ONLY段
      4708bcc7-46b1-4372-8813-938d5526b65a-image.png
      定义AB_Swap计数变量,记录Swap的次数,并在AB_Swap之前++
      5cb3d73a-5d1e-480a-9e78-a5390bcf753b-image.png
      在FEE_Task中将ABSwapCount作为参考值写入FEE的3个BLOCK,读取后打印ABSwapCount。
      2eba7ef5-faac-4c69-a0c5-038ef3478471-image.png
      6a433647-b9a6-4afd-b40a-8f832feead00-image.png
    2. 测试
      测试步骤参考上面的方法,重启复位,程序每1秒进行一次AB_Swap,LED交替点亮,串口打印:
      29721344-f0ba-4b78-9432-f5fe279dda52-image.png

    7.工程:

    AB_Swap_MC03.zip

    1 条回复 最后回复
    1
    • yt0069Y yt0069 从 Others 移动了该主题
    • YQHY YQH 被引用 于这个主题

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YCT离线License申请流程

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

  • YT CONFIG TOOL调查问卷

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

  • can
    16
    demo
    15
    uds
    7
    lin stack
    6
    fbl
    5
    yt-link
    5
    md14
    4
    adc模块
    3
    Online Users
    • 登录

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