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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. MD14_AB_SWAP+FEE

MD14_AB_SWAP+FEE

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

    1. 引言

    基于MD这类没有独立Dflash的MCU,且同时具有硬件AB swap需求和FEE历史数据保持的需求,优先建议客户选择外挂的eeprom,硬件方案实在无法外挂eeprom再参考该文档实现,本文档是基于MD14开发板设计的。

    2.FLASH分区划分

    d3d3046e-3140-461d-8cc9-9ab07d7a1786-image.png
    FLASH的分区主要分为两种:一种是将程序和fee各自存放在一个BANK上,另一种是将程序和fee存放在同一个BANK上。由于在同一个bank下flash在写一个区域的同时不能读取另外一个区域的特性,所以如果将程序与fee存放在同一个bank下,当对fee进行操作时就不能运行其他的进程,所以默认情况下是将程序与fee存放在不同的bank,这样就引出了fee的“数据同步”和“异步操步”。

    3. 核心要点

    3.1 FEE异步操作

    在不同的物理 BLOCK 上的 FLASH 程序和数据可支持异步操作不产生阻塞;在相同的物理 BLOCK 上的 FLASH 程序和数据只支持同步操作会产生阻塞。所以我们一般将fee地址设置在另一个block上,勾选"Async Access"代表使能异步操作
    555bf04b-7914-4356-ab76-8554074ab65b-image.png

    3.2 AB SWAP原理

    在执行AB swap操作前PFLASH0的地址是0x00000 ~ 0x3FFFF,PFLASH1的地址是0x40000 ~ 0x7FFFF。在执行AB swap操作后,PFLASH0和PFLASH1的地址会进行交换,此时PFLASH0的地址是0x40000 ~ 0x7FFFF,PFLASH1的地址是0x00000 ~ 0x40000。但与此同时原先定义在另一个bank里的fee区域,由于执行了boot_swap命令,定义的fee地址发生了改变,这是就引出了fee的“数据同步”
    fbf61dc9-5884-4fbc-a77b-99f8a756f1fa-image.png

    3.3 fee数据同步的原理及操作方式

    在实际的应用中,我们存储在fee区域的数据是要经常调用使用的,如果不进行数据同步,在执行完swap命令后,我们再去调用fee数据就会导致读出的数据为空,所以数据同步是在执行boot swap命令前要将fee数据搬运到新的fee地址上去。
    d5552a13-f9ee-441c-a411-c1eb90ac378a-image.png

    3.4 AB SWAP操作方式

    通过内部闪存命令(0x30)执行swap操作。该命令由FLASH_DRV_BootSwap函数来调用。
    56f41337-90fa-49be-ae8f-aae8d1daccbc-image.png

    3.5 MCU当前运行位置

    boot_swap是在pFlash0 和 pFlash1 之间进行翻转,通过查看EFM->STS的寄存器判断现在运行在哪个pFlash上
    f2331418-b1ae-4251-a9ec-6a5bb295679d-image.png

    4. 代码讲解

    4.1 读取swap的标志位

    读取swap标志位,从而判断代码运行在哪个PFLASH里
    42c0a859-d355-4013-a917-1beb71532349-image.png

    4.2 读写fee模块

    读取REGFILE->DR[0]的值,写入到fee并反读(REGFILE 位于始终处于供电状态的电源域中,可在掉电模式下保留某些关键信息的值。)
    e6250638-b10a-4a63-a804-211aa8a62edd-image.png
    验证写入和读取是否相同,如果不同则进入死循环
    383102f6-45bf-48a2-9e1b-f3e796465b99-image.png

    4.3 boot_swap的过程操作

    在进行swap操作前将fee数据搬移到新的fee地址里去
    cf7f5a80-b4f4-4041-9428-d087e8e8dfab-image.png

    5. 测试验证

    5.1 将工程程序编译的文件加载到JFLASH

    2b97bb14-8d22-4380-980c-35b308f136df-image.png

    5.2 擦除芯片,烧录程序(快捷键盘F4,F6),完成PFLASH0面烧录

    8983da7f-109c-4a9e-bec8-7d4f678dd226-image.png
    47b8b895-437d-4891-9151-c49714c4f03c-image.png

    5.3 偏移地址映射PFLASH1面烧录

    5.3.1 PFLASH1地址偏移0x0040000

    36f6dccf-ad62-435d-b2d2-29d499d52fad-image.png

    5.3.2 设置地址偏移

    74506f56-98ef-4176-902d-1f90b0649e69-image.png
    792dc419-3535-4f90-a7f4-5c01f9a41b58-image.png

    5.3.3 烧录PFLASH1

    f02d0e99-8cb9-496d-a0e6-16fb6052b1b0-image.png

    5.3.4 重新上电运行程序

    • PFLAH0里的程序会使绿灯亮红灯灭,PFLASH1里的程序会使绿灯灭红灯亮
    • 程序会在红灯和绿灯之间来回切换(绿灯代表运行在PFLASH0里,红灯代表运行在PFLASH1里)
    • 红灯和绿灯切换的频率800ms切换一次
    • 串口会在打印程序运行在哪个位置
      508539c7-eec9-4a0a-9be4-59bfb1335afd.jpg fc41ac20-56c1-466b-8d65-7b36561ceadc.jpg
      串口打印的数据
      fbf6d032-520c-4d60-9e81-7d99d772bff1-image.png

    4.4 压测10000次数据

    fee_data.txt

    5. 代码

    AB_SWAP_FEE.zip

    1 条回复 最后回复
    0

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YCT离线License申请流程

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

  • YT CONFIG TOOL调查问卷

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

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

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