YTM32B1MD14 MCAL A/B SWAP Demo及操作流程演示
-
1、例程将PFlash0作为A面,PFlash1作为B面,实现AB SWAP。
Demo参考例程:MD14_A_B_SWAP_Demo.zip2、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
(2)选择对应芯片
(3)建立连接后擦除芯片
(4)点击 file->open data file选择.elf文件
(4)将程序烧写进PFlash0
(5)对PFlash1 进行程序烧录,在Edit->Relocate界面将烧录地址偏移到PFlash1中,然后烧录程序。
4、重新上电运行程序
程序会在蓝灯和绿灯之间来回切换(蓝灯代表运行在PFLASH0里,绿灯代表运行在PFLASH1里)
-
X xianghan 被引用 于这个主题
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...