赞
踩
发现已经擦除的Sector内(比如我用的2KperSector)一次写操作之后可以追加进行第二次写,向后顺延写一直是可行的。这样比写之前先读已有到缓冲,追加new content到缓冲再擦除,写缓冲方式即节省缓冲也节省了好多次擦除。
目前参照pdf写操作只有一种方式Bit16写也就是2Byte写,必须保证Address是偶数(Shoud内部有对齐)否则奇数地址导致HardFault impreciserr总线错误。
由于上面的原因,加了个中间判断,保证每次写的长度是偶数,这样也就确保了下层的Program2Byte都是偶数地址。
我读取使用时如果原来的一段数据是奇数个,但读回来会多个填充的内容,偶数不影响。我在用时对填充的内容不敏感,比如数据都是Ascii,填充‘\0’,’\r’都没啥影响。 如果是像文件这样追加的话,不是独立成段成帧显然不合适了。
这样做一定要检查好代码稳定可靠,可以在写入之前assert参数合法,不然直接HartFault就挂了。
想想ST设计的时候能提供Flash Byte写就好了。
我的实际使用是模拟一个Stack在Flash上每次push pop 都以Record为单位的,Record不定长,内容Ascii 所以强行填充成偶数没影响,还没移植过文件系统后面准备用,这样会消耗些Heap,对file来说一会append,一会删一部分,操作都sync。这样段擦处频率应该是不是很高,有知情人士解答一下吗。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。