OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16410|回复: 25

FLASH擦除失败

[复制链接]

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2017-12-4
在线时间
64 小时
发表于 2018-7-24 23:36:55 | 显示全部楼层 |阅读模式
1金钱
原子哥,我flash操作用的也是你的历程代码,然后写入某个区域时,写入一般都是十个字节以内,但是有的时候写入了读取出来还是前一次的数值,仿真调试时发现是擦除失败,什么原因会导致擦除失败?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-7-25 01:51:10 | 显示全部楼层
回复

使用道具 举报

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2017-12-4
在线时间
64 小时
 楼主| 发表于 2018-7-25 21:54:49 | 显示全部楼层

比如某个地址有时能写入有时写入失败,导致结果不可预知,芯片可以确定没坏
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-7-26 01:33:23 | 显示全部楼层
516182660 发表于 2018-7-25 21:54
比如某个地址有时能写入有时写入失败,导致结果不可预知,芯片可以确定没坏

我们例程运行良好啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-7-26 09:19:23 | 显示全部楼层
正点原子 发表于 2018-7-26 01:33
我们例程运行良好啊

我也是用的原子哥的FLAHS操作代码,在103C8上操作时也会出现这样的问题,重复写入某个位置时有时候就是写不进去,单纯换个地址又能写入了,做IAP升级时在103RC上一切正常,然后下载到C8上时,所用的FLASH空间均是小于64K的地址,但是C8上升级标志位十次可能有一次更新成功,程序只改了FLASH中定义的SIZE大小,其他都没改,真是郁闷
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7375
金钱
7375
注册时间
2016-11-30
在线时间
633 小时
发表于 2018-7-26 09:22:01 | 显示全部楼层
哆啦A萌 发表于 2018-7-26 09:19
我也是用的原子哥的FLAHS操作代码,在103C8上操作时也会出现这样的问题,重复写入某个位置时有时候就是写 ...

擦除什么的正常嘛?
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-7-26 09:48:46 | 显示全部楼层
本帖最后由 哆啦A萌 于 2018-7-26 10:30 编辑
lvkanger 发表于 2018-7-26 09:22
擦除什么的正常嘛?

擦除不了,擦除了读出来不是0xFFFF
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7375
金钱
7375
注册时间
2016-11-30
在线时间
633 小时
发表于 2018-7-26 09:56:48 | 显示全部楼层
哆啦A萌 发表于 2018-7-26 09:48
擦除不了,擦除了读出来不是0xFFFF

擦除失败当然写不进去,这个函数看着好复杂,建议精简一下
回复

使用道具 举报

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2017-12-4
在线时间
64 小时
 楼主| 发表于 2018-7-26 10:22:53 | 显示全部楼层
即使更换了地址,还是有时写不进,这种不可预知的结果是非常严重
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-7-26 10:32:13 | 显示全部楼层
lvkanger 发表于 2018-7-26 09:56
擦除失败当然写不进去,这个函数看着好复杂,建议精简一下

用的就是原子哥的代码,错误原因是因为写入的时候返回了FLASH_ERROR_PG这个错误,在IAP升级大量写入数据时中途发生了这个错误
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-7-26 10:33:27 | 显示全部楼层
516182660 发表于 2018-7-26 10:22
即使更换了地址,还是有时写不进,这种不可预知的结果是非常严重

你看看你是不是因为FLASH_GetBank1Status()返回了错误
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-7-26 11:06:08 | 显示全部楼层
正点原子 发表于 2018-7-26 01:33
我们例程运行良好啊

原子哥,我在使用你的FLASH历程代码时(没有修改函数中的内容时),调试的时候发现写入的时候有的时候会触发FLASH_FLAG_PGERR错误,我做IAP时进行的是分包写入,每次调用写入函数时写入的大小是2K,如果在写入某个扇区前先清标志位FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);则不会再发生错误,但是我不是很清楚如果每步操作都没有错误为什么寄存器还会标记出这个错误呢?
回复

使用道具 举报

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2017-12-4
在线时间
64 小时
 楼主| 发表于 2018-7-26 15:16:11 | 显示全部楼层
哆啦A萌 发表于 2018-7-26 11:06
原子哥,我在使用你的FLASH历程代码时(没有修改函数中的内容时),调试的时候发现写入的时候有的时候会 ...

我写入某个扇区前先清标志位FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR),写入的时候有的同样会触发FLASH_FLAG_PGERR错误
回复

使用道具 举报

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2017-12-4
在线时间
64 小时
 楼主| 发表于 2018-7-26 20:36:59 | 显示全部楼层
哆啦A萌 发表于 2018-7-26 10:33
你看看你是不是因为FLASH_GetBank1Status()返回了错误

调试发现是返回了FLASH_ERROR_PG编程错误,就是不知道怎么解决,如果返回错误一直擦除或者写入直到成功,如果一直返回错误会不会擦坏FLASH
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-7-27 01:34:11 | 显示全部楼层
我们的FLASH擦除例程一直没问题啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

62

主题

902

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3559
金钱
3559
注册时间
2016-1-8
在线时间
543 小时
发表于 2018-7-27 09:34:05 | 显示全部楼层
按页擦除,按半字,字,双字写
回复

使用道具 举报

14

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2017-12-4
在线时间
64 小时
 楼主| 发表于 2018-7-27 16:58:34 | 显示全部楼层
Sun_Fly 发表于 2018-7-27 09:34
按页擦除,按半字,字,双字写

还是不行
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2018-8-21 12:26:03 | 显示全部楼层
哆啦A萌 发表于 2018-7-26 11:06
原子哥,我在使用你的FLASH历程代码时(没有修改函数中的内容时),调试的时候发现写入的时候有的时候会 ...

我在做iap的时候,也遇到了flashstatus = FLASH_ERROR_RD;//错误 ,我也是2k一包,第一次升级代码没问题,然后跳转到bootloader里面,在进行升级的时候,擦除flash就报错了FLASH_ERROR_RD,不知怎么解决? 我Q 778575669
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-8-21 18:01:11 | 显示全部楼层
hi我歌月徘徊 发表于 2018-8-21 12:26
我在做iap的时候,也遇到了flashstatus = FLASH_ERROR_RD;//错误 ,我也是2k一包,第一次升级代码没问题 ...

我用C8T61K每页会遇到FLASH擦擦不掉问题,用64脚及以上的因为是2K每页,就不存在问题了。。。
回复

使用道具 举报

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
发表于 2018-11-14 16:27:54 | 显示全部楼层
各位解决问题没有,我也遇到这个情况了,单纯的换个地址就能好,也是跟c8t6一个系列的cbt6
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4026
金钱
4026
注册时间
2015-11-14
在线时间
544 小时
发表于 2018-11-14 17:38:09 | 显示全部楼层
注意Flash的容量,和每一页的大小,C8T6应该是1K,RCT6是2K。C8T6注意Flash地址要在64K之前的地址,之后的地址可能可以用,但不一定稳定
回复

使用道具 举报

50

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1126
金钱
1126
注册时间
2014-8-24
在线时间
146 小时
发表于 2018-11-14 22:22:05 | 显示全部楼层
恩,是mid容量的,是按1k来擦的,cbt6也算过了容量,128k之内的
找一份喜欢的工作,这样每天工作的8个小时是快乐的。 找一个喜欢的人,这样每天工作之外的16个小时也是快乐的。
回复

使用道具 举报

3

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2016-9-19
在线时间
54 小时
发表于 2019-6-11 16:58:08 | 显示全部楼层
请问楼主问题解决了吗  我也遇到同样的错误了
回复

使用道具 举报

3

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2016-9-19
在线时间
54 小时
发表于 2019-6-12 10:54:07 | 显示全部楼层
我找到问题了  写入之前不要判断需不需要擦除  直接擦除试试
回复

使用道具 举报

0

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2016-6-23
在线时间
66 小时
发表于 2020-12-15 08:38:53 | 显示全部楼层
我也碰到,擦除不了。我看了就是要加一个等号if(i<=page_remain)         
                {
                  FLASH_ErasePage(page*STM_SECTOR_SIZE+FLASH_BASE);// 擦除这些页面
                  for(i=0;i<page_remain;i++)
                        {
                          STMFLASH_BUF[page_offset+i]=pBuffer;
                       
                        }
                  FLASH_Write_NoCheck(page*STM_SECTOR_SIZE+FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);
               
                }    //擦除后入数据
我这样试的就可以的,不知道你是不是这问题
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2021-10-3
在线时间
22 小时
发表于 2022-4-2 13:29:11 | 显示全部楼层
是不是没解锁
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表