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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1MD14 MCAL A/B SWAP Demo及操作流程演示

YTM32B1MD14 MCAL A/B SWAP Demo及操作流程演示

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

    1、例程将PFlash0作为A面,PFlash1作为B面,实现AB SWAP。
    Demo参考例程:MD14_A_B_SWAP_Demo.zip

    2、Demo功能介绍
    AB_Swap驱动:通过内部闪存命令(0x30)执行SWAP操作,该命令在Fls_NvrLoadCommandSync()函数执行。

    FLS_FUNC Fls_Lld_ReturnType Fls_WriteSwap(void)
    {
        Fls_Lld_ReturnType RetVal = FLASH_E_OK;
        /*Clear command*/
        EFM->CMD = 0U;
        /*Clear all error flags*/
        EFM->STS =  FLS_ERR_FLAGS_MASK | EFM_STS_DONE_MASK;
    #if (FLS_WEBIT_AVAILABLE==STD_ON)
        Fls_NvrWriteEnable();
    #endif
        /*Write data and select the writing address*/
        // *((volatile uint32 *)(FLS_BOOT_SWAP_BASE_ADDR)) = 0;
    #if (FLS_WEBIT_AVAILABLE==STD_ON)
        Fls_NvrWriteDisable();
        if(TRUE==Fls_NvrAddrSelJudge(0x1000U))
        {
            RetVal = FLASH_E_OK;
        }
    #endif
        if(FLASH_E_OK==RetVal)
        {
    #if (FLS_SCHM_SUPPORT==STD_ON)
            SchM_Enter_Fls_FLS_EXCLUSIVE_AREA_00();
    #endif
    #if (FLS_TIMEOUT_SUPERVISION_ENABLED==STD_ON)
            RetVal = Fls_NvrLoadCommandSync(FLS_BOOT_SWAP_CMD,FLS_SYNC_WRITE_TIMEOUT);
    #else
            RetVal = Fls_NvrLoadCommandSync(FLS_BOOT_SWAP_CMD,0);
    #endif
    #if (FLS_SCHM_SUPPORT==STD_ON)
            SchM_Exit_Fls_FLS_EXCLUSIVE_AREA_00();
    #endif
        }
        return RetVal;
    }
    

    测试主逻辑:上电后通过Fls_ReadSwap()函数读取标志位,通过info标志判断当前代码运行在哪个PFflash中,程序运行在PFlash0时点亮LED_B,运行在PFlash1时点亮LED_G。

    if (info == 0u) {
            Fls_WriteSwap();
            Dio_WriteChannel(DioConf_DioChannel_LED_B, STD_OFF);
            delay();
            Mcu_Lld_SystemReset();
        }
        else 
        {
            Fls_WriteSwap();
            Dio_WriteChannel(DioConf_DioChannel_LED_G, STD_OFF);
            delay();
            Mcu_Lld_SystemReset();
        }
    

    3、测试验证
    (1)查看手册看到 PFlash0的起始地址0x00000000 PFlash1的起始地址0x000040000
    81fdd9ae-6cad-4067-8b74-630455b619a2-image.png
    (2)选择对应芯片
    80d3f7a4-8422-4ce5-8709-0ad2bf817c34-image.png
    (3)建立连接后擦除芯片
    2dcdc005-f4a5-4d3d-b3ae-fb426e41f60e-image.png
    (4)点击 file->open data file选择.elf文件
    c185e5f8-85f9-428c-9b34-a5fa5de6b405-image.png
    (4)将程序烧写进PFlash0
    1cd941aa-6cac-486a-8224-7c6e51f0956f-image.png
    (5)对PFlash1 进行程序烧录,在Edit->Relocate界面将烧录地址偏移到PFlash1中,然后烧录程序。
    090df11b-3867-4472-82d9-2d00d3df3dfe-image.png

    4、重新上电运行程序
    程序会在蓝灯和绿灯之间来回切换(蓝灯代表运行在PFLASH0里,绿灯代表运行在PFLASH1里)
    a3e0e865-84e0-46b5-be49-a791970ae5ab-d9275933cc03b972ddd3b963df2d36c2.jpg
    2367af56-5fed-4d7c-8f2d-1cde3f4262b5-672f0097a1c791fe13a00807fe515ce3.jpg

    1 条回复 最后回复
    0
    • xianghanX xianghan 被引用 于这个主题

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

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

  • can
    19
    demo
    19
    uds
    11
    lin stack
    7
    fbl
    5
    yt-link
    5
    adc模块
    4
    md14
    4
    Online Users
    nrx11N
    nrx11
    houjun_xiaoH
    houjun_xiao
    zhangbo1Z
    zhangbo1
    runR
    run
    ZoneZ
    Zone
    LCZOUYIWENL
    LCZOUYIWEN
    Tiger987T
    Tiger987
    majorM
    major
    • 登录

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