zdy149 发表于 2023-5-18 14:34

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标志位会卡死(一句一句断点偶尔是正常的)

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);

zdy149 发表于 2023-12-4 17:04

问题已解决,感谢各位大佬的回复

只是个新人- 发表于 2023-12-5 09:23

610u 发表于 2024-4-30 09:54

怎么解决的?是擦除的问题吗

lvuu 发表于 2024-4-30 16:06

中断问题的嘛?

caigang13 发表于 2024-5-4 11:37

你怎么擦写FLAH的?用的JFLASH还是开发环境。

154344621 发表于 2024-7-30 19:14

zdy149 发表于 2023-12-4 17:04
问题已解决,感谢各位大佬的回复

您好大佬怎么解决的?

suncat0504 发表于 2024-7-30 19:46

对Flash操作安全吗?不会破坏程序吧?

suncat0504 发表于 2024-7-30 19:47

虽然有不少单片机都可以在运行时写Flash。总觉着不安全。程序一旦奥菲,会不会破坏正常的程序段?

154344621 发表于 2024-7-31 10:36

zdy149 发表于 2023-12-4 17:04
问题已解决,感谢各位大佬的回复

大佬分享下经验,遇到同样的问题了
页: [1]
查看完整版本: HC32F460的内部FLASH读写问题