【项目笔记_rp552d】Partition write error! Flash device(onchip_flash) write error!

问题描述

在使用 easy_falsh 的是时候出现问题,这个问题是发现在 触发 gc 的时候突然断电就出现了错误,一旦出现这个问题无论怎样都无法恢复,除非重新擦除数据区
在这里插入图片描述
需要擦除才能恢复,这个问题是不可接受的


问题分析

估计是触发在STM32上面触发GC机制的问题在备份在转移数据的时候突然断电会导致状态异常,这个异常的状态是写入在FLASH中的,导致即使上电数据也不能恢复,于是查找数据出错的地方:

int stm32_flash_write(rt_uint32_t addr, const rt_uint8_t *buf, size_t size)
{
   
    rt_err_t result        = RT_EOK;
    rt_uint32_t end_addr   = addr + size;

    if (addr % 4 != 0)
    {
   
        LOG_E("write addr must be 4-byte alignment");
        return -RT_EINVAL;
    }

    if ((end_addr) > STM32_FLASH_END_ADDRESS)
    {
   
        LOG_E("write outrange flash size! addr is (0x%p)", (void *)(addr + size));
        return -RT_EINVAL;
    }

    HAL_FLASH_Unlock();

    while (addr < end_addr)
    {
   
+       /* 写数据之前会进行错误检查,如果之前操作有错误积累,则之后无法操作成功,需要清除一下 */
+       __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR |
+               FLASH_FLAG_BSY | FLASH_FLAG_EOP);
        if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值