打印

GD32F103在IAP时擦除失败,要怎么解决?

[复制链接]
2512|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
willok|  楼主 | 2019-5-26 08:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD32F103C8T6的芯片,低16K为Boot,剩余为APP
不开启读保护,更新正常,Boot和APP可以相互更新
开启读保护后,通过Boot更新APP正常,用APP更新Boot时擦除0x08000000时失败

相关代码
        //        循环擦除
        fmc_unlock();
        while (pErase->wEarseSize)
        {
                uint8_t                bStatus = fmc_page_erase(pErase->dwAddress);
                //        出错,返回错误码与地址
                if (bStatus != FMC_READY)
                {
                        pCmdSend->bStatus = bStatus | 0x80;
                        pEraseRet->dwAddress = pErase->dwAddress;
                        break;
                }
                pErase->dwAddress += PageSize;
                pErase->wEarseSize -= PageSize;
        }
        fmc_lock();


fmc_page_erase返回值为3=FMC_WPERR

检查选项字是没有启用页保护的
0x1FFFF800开始的数据为00 FF FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00

哪位大神帮忙解决一下,多谢

使用特权

评论回复
沙发
lvben5d| | 2019-5-26 15:33 | 只看该作者
不太理解 为什么会擦除失败, 擦写的时候  你掉电了?  我用的不多 也有1个项目用 感觉不太会把。擦写函数代码 遵守firelib里的样本

使用特权

评论回复
板凳
willok|  楼主 | 2019-5-27 09:24 | 只看该作者
lvben5d 发表于 2019-5-26 15:33
不太理解 为什么会擦除失败, 擦写的时候  你掉电了?  我用的不多 也有1个项目用 感觉不太会把。擦写函数 ...

没有掉电,更新的时候我是先更新的Boot后面的数据区,然后再更新的代码区。
最神奇的地方在于不加读保护完全正常,设置选项字后数据区更新也正常,就是更新到Flash开始位置就失败了,提示页保护错误。而选项字中只开启了读保护,没开启也保护的。

使用特权

评论回复
地板
gwsan| | 2019-5-27 10:49 | 只看该作者
请问 iap是什么模式

使用特权

评论回复
5
nawu| | 2019-5-27 11:32 | 只看该作者
那就手动关闭一下

使用特权

评论回复
6
tfqi| | 2019-5-27 12:06 | 只看该作者
是不是哪里误操作了呢

使用特权

评论回复
7
willok|  楼主 | 2019-5-27 15:01 | 只看该作者
已找到原因,文档里面说了,开启读保护后,Flash前4K会自动写保护。
只能把前面放个空壳,真正的Boot放4K以后了,要不没法更新了

使用特权

评论回复
评论
hanlei920507 2019-8-28 15:14 回复TA
楼主还有没有Flash的擦除以及烧录,我现在也想做个IAP 
8
XIF123| | 2019-7-19 12:22 | 只看该作者
我们公司有大量GD32F103C8T6的原装现货芯片价格优势 可大量供应.联系电话:13286363809微信同号 肖先生 QQ:826198903

使用特权

评论回复
9
hanlei920507| | 2019-8-26 15:00 | 只看该作者
有没有IAP的例程,分享下

使用特权

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

本版积分规则

1

主题

5

帖子

1

粉丝