<delect id="jxvjd"></delect>

<p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p><p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>
<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>
<p id="jxvjd"><output id="jxvjd"></output></p>
<p id="jxvjd"><output id="jxvjd"></output></p>

<pre id="jxvjd"></pre><pre id="jxvjd"></pre>
<noframes id="jxvjd">

<noframes id="jxvjd">
<pre id="jxvjd"></pre>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p><pre id="jxvjd"></pre>

<pre id="jxvjd"></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p>

<pre id="jxvjd"></pre><pre id="jxvjd"></pre><p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p>

<p id="jxvjd"></p>

<p id="jxvjd"></p>

<pre id="jxvjd"><delect id="jxvjd"></delect></pre>
<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>

<p id="jxvjd"></p>
<pre id="jxvjd"><pre id="jxvjd"></pre></pre>

<output id="jxvjd"></output>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p> <pre id="jxvjd"></pre>
<output id="jxvjd"><delect id="jxvjd"><menuitem id="jxvjd"></menuitem></delect></output>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><delect id="jxvjd"></delect></pre>

<pre id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></pre>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<pre id="jxvjd"></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p><p id="jxvjd"></p>

<noframes id="jxvjd"><pre id="jxvjd"><p id="jxvjd"></p></pre><p id="jxvjd"></p>
<noframes id="jxvjd"><p id="jxvjd"><output id="jxvjd"></output></p>

<p id="jxvjd"><delect id="jxvjd"></delect></p>

<noframes id="jxvjd"><output id="jxvjd"></output>

<pre id="jxvjd"></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><output id="jxvjd"></output></pre>

<noframes id="jxvjd"><p id="jxvjd"></p>
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre><p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p>
<pre id="jxvjd"><p id="jxvjd"></p></pre>

<p id="jxvjd"></p>
<p id="jxvjd"></p>
<p id="jxvjd"></p>

<pre id="jxvjd"><p id="jxvjd"></p></pre><pre id="jxvjd"><p id="jxvjd"></p></pre><p id="jxvjd"><output id="jxvjd"></output></p>
<p id="jxvjd"></p>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>

<output id="jxvjd"><delect id="jxvjd"></delect></output>
<pre id="jxvjd"><p id="jxvjd"></p></pre>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"></p>

<pre id="jxvjd"><p id="jxvjd"><menuitem id="jxvjd"></menuitem></p></pre>

<pre id="jxvjd"></pre>

<pre id="jxvjd"><p id="jxvjd"></p></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p>
<noframes id="jxvjd"><pre id="jxvjd"><p id="jxvjd"></p></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><p id="jxvjd"></p></pre>
<p id="jxvjd"></p>

<noframes id="jxvjd">
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre><pre id="jxvjd"><p id="jxvjd"><menuitem id="jxvjd"></menuitem></p></pre>

<noframes id="jxvjd">

<p id="jxvjd"></p>

<p id="jxvjd"><menuitem id="jxvjd"></menuitem></p>

<pre id="jxvjd"><p id="jxvjd"><delect id="jxvjd"></delect></p></pre>

打印

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

[复制链接]
154|6
跳转到指定楼层
楼主
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

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

使用特权

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

使用特权

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

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

使用特权

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

使用特权

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

使用特权

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

使用特权

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】|