打印
[技术问答]

HC32F460的内部FLASH读写问题

[复制链接]
2150|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zdy149|  楼主 | 2023-5-18 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:在使用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标志位会卡死(一句一句断点偶尔是正常的)

使用特权

评论回复
沙发
WT418995874| | 2023-5-23 15:27 | 只看该作者
印象中,对460内部flash连续编程操作,需要把操作的代码放到ram去执行。不知是否与之有关。具体查看用户手册中“连续编程操作”

使用特权

评论回复
板凳
wubangmi| | 2023-5-23 15:59 | 只看该作者
1、EFM相关的寄存器是否已经解锁?
2、EFM是否设置成正确的擦除模式?
3、在擦除期间是否关了总中断?(如果有中断打断了擦的过程,很可能就擦写失败了)


综上:最好是直接跑例程,看是否成功

使用特权

评论回复
地板
ddxx| | 2023-6-6 14:33 | 只看该作者
要先使能写:EFM_FWMC_Cmd(ENABLE);

使用特权

评论回复
5
zdy149|  楼主 | 2023-12-4 17:04 | 只看该作者
问题已解决,感谢各位大佬的回复

使用特权

评论回复
6
只是个新人-| | 2023-12-5 09:23 | 只看该作者

使用特权

评论回复
7
610u| | 2024-4-30 09:54 | 只看该作者
怎么解决的?是擦除的问题吗

使用特权

评论回复
8
lvuu| | 2024-4-30 16:06 | 只看该作者
中断问题的嘛?

使用特权

评论回复
9
caigang13| | 2024-5-4 11:37 | 只看该作者
你怎么擦写FLAH的?用的JFLASH还是开发环境。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝