关于SFUD的擦除操作

发布于 2020-11-27 00:39:12

我再用SFUD的时候遇到个奇怪的问题:

环境:

rt-thread 4.0.2
stm32f103zet6
w25q16

问题:

1.使用SFUD,初始化,读操作都正常,因此排除是初始化什么的问题。
2.在写操作就出现问题了,写之前先调用擦除,结果把整个flash都给擦除了(flash里有OTA的download区,存储的升级包都给擦没了),而且写不上,写操作代码如下:

    sfud_erase(sfud_dev, addr, buffer_len);           
    if((sfud_write(sfud_dev, addr, buffer_len, buffer)) == SFUD_SUCCESS) 
        return RT_EOK;
    else return RT_ERROR;

3.为了再进一步排除,我自己写了flash的读写操作,不用SFUD,一切正常,因此排除硬件问题。
4.最后感觉是sfud_erase 操作问题,因此把sfud_erase屏蔽,写之前不再擦除。神奇的是一切正常了。
5.查了一下sfud_write函数,说明是 no erase operate的。正常来说,flash写之前不是要先擦除么,怎么不擦除倒写上了,调用了擦除操作,结果把整片flash都给擦掉了,而且再调用sfud_write 也写不上了。
这是什么情况呢?

查看更多

关注者
0
被浏览
196
1 个回答
JQRR_7669
JQRR_7669 认证专家 2020-11-28

在shell中使用fal命令测试下读写是否正常

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览