HC32F460的内部FLASH读写问题
问题描述:在使用HC32F460擦除内部flash的时候,会卡死,进入断点debug发现,在EFM_SectorErase(uint32_t u32Addr)函数,执行到RW_MEM32(u32Addr) = 0UL;之前正常,执行此句之后,EFM_FSR的值为0x00000130,也就是COLERR标志报错,接下来这几步操作/* Wait for ready flag. */
if (LL_ERR_TIMEOUT == EFM_WaitFlag(EFM_FLAG_RDY << u8Shift, EFM_ERASE_TIMEOUT)) {
i32Ret = LL_ERR_NOT_RDY;
}
/* Clear the operation end flag */
EFM_ClearStatus(EFM_FLAG_OPTEND << u8Shift);
/* Set read only mode. */
MODIFY_REG32(CM_EFM->FWMC, EFM_FWMC_PEMOD, EFM_MD_READONLY);
/* Recover CACHE */
MODIFY_REG32(CM_EFM->FRMC, EFM_CACHE_ALL, u32Tmp);
会卡死,偶尔是进入HardFault_Handler,此时R13(SP)的值为0x1FFF9130,R14(LR)的值为0xFFFFFFE9,R15(PC)的值为0xFBB02132;EFM_FWMC的值还为0x00000141,EFM_FSR的值还为0x00000130,说明应该是卡在
if (LL_ERR_TIMEOUT == EFM_WaitFlag(EFM_FLAG_RDY << u8Shift, EFM_ERASE_TIMEOUT)) {
i32Ret = LL_ERR_NOT_RDY;
}
求助点:
1:为何擦除失败;
2:为什么等待ready标志位会卡死(一句一句断点偶尔是正常的) 印象中,对460内部flash连续编程操作,需要把操作的代码放到ram去执行。不知是否与之有关。具体查看用户手册中“连续编程操作” 1、EFM相关的寄存器是否已经解锁?
2、EFM是否设置成正确的擦除模式?
3、在擦除期间是否关了总中断?(如果有中断打断了擦的过程,很可能就擦写失败了)
综上:最好是直接跑例程,看是否成功 要先使能写:EFM_FWMC_Cmd(ENABLE); 问题已解决,感谢各位大佬的回复 怎么解决的?是擦除的问题吗 中断问题的嘛? 你怎么擦写FLAH的?用的JFLASH还是开发环境。 zdy149 发表于 2023-12-4 17:04
问题已解决,感谢各位大佬的回复
您好大佬怎么解决的?
对Flash操作安全吗?不会破坏程序吧? 虽然有不少单片机都可以在运行时写Flash。总觉着不安全。程序一旦奥菲,会不会破坏正常的程序段? zdy149 发表于 2023-12-4 17:04
问题已解决,感谢各位大佬的回复
大佬分享下经验,遇到同样的问题了
页:
[1]