我再用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 也写不上了。
这是什么情况呢?
更多回帖