嵌入式技术william hill官网
直播中

hsdou月半

8年用户 486经验值
擅长:MEMS/传感技术
私信 关注
[问答]

为什么我无法调用SFUD的擦除操作呢?

我再用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 也写不上了。

这是什么情况呢?

回帖(3)

王英

2023-1-16 16:21:48
在shell中使用fal命令测试下读写是否正常
举报

hsdou月半

2023-1-16 16:21:59
在shell中用sf和fal都进行了测试,测试结果一样,都是一样的问题:
1.写入长度只能是7个字节;
2.写入的数据如果是字母,则写进去的都是0;
3.如果使用erase操作,擦除5个字节,10个字节都没了。然后读取其他地址的数据,发现所有的地址都被擦除了。

举报

王英

2023-1-16 16:22:13
擦除5个字节,10个字节都没了。这是正确的,flash擦除是按页为单位进行的。你确认下flash的页大小,然后再两个页中写入数据,再擦除其中一个页,查看另一个页中内容是否还在。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分