murphyzhao 发表于 2018-8-30 15:46:51

STM32L4 内部 Flash 写操作 ECCD 错误

STM32L4 内部 Flash 写操作 ECCD 错误


使用的芯片型号 STM32L475VE,使用 HAL 库 `HAL_FLASH_Program` API 对 内部 Flash 进行编程,出现 ECCD 错误。

返回错误的代码摘要如下:(在 __HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD) 时返回错误)
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
{

   if ((__HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD)))
{
    /*Save the error code*/
    FLASH_SetErrorCode();
   
    return HAL_ERROR;
}
}求助相关经验的开发者,请问如何失能 ECCD 检查,或者出现 ECCD 错误如何处理让程序继续运行?(在不注释上面代码的情况下)

非常感谢

feixiang20 发表于 2018-8-31 01:11:21

找了很多帖子,不解,不知异常捕捉处理,只能给你2个帖子参考参考。另外要说,你也可以先简化代码,从中找到可能性问题。
stm32l476 内部flash HAL库操作方法
http://blog.csdn.net/nicholaszao/article/details/79734480
STM32CubeMX Hal库的一些坑
http://blog.csdn.net/u010217338/article/details/70139672

murphyzhao 发表于 2018-8-30 15:51:01

在 ST 论坛找到相似问题,但未能解决 ECCD 问题。请教论坛内的大牛,谢谢。

引用 ST 论坛相似的问题:

ST 论坛 ECCD 问题

murphyzhao 发表于 2018-8-31 14:19:25

feixiang20 发表于 2018-8-31 01:11
找了很多帖子,不解,不知异常捕捉处理,只能给你2个帖子参考参考。另外要说,你也可以先简化代码,从中找 ...
感谢 feixiang20,这两个帖子给了很大的起启示。

Flash ECCD 问题已经确定,在对 flash 连续写的过程,ECC 纠错检查会开启,如果这个时候,你往已经写过的区块更新数据(不擦除,再次写),就会触发ECC错误。

我是这么理解的,因为 ECC 想帮你纠错,但这又是你主观上的操作,且ECC 监测到错误超过了2个,无法完成纠错,就上报了异常。
要想避免 ECCD 错误,就严格遵守 先擦后写 的原则。
页: [1]
查看完整版本: STM32L4 内部 Flash 写操作 ECCD 错误