我有一个应用程序,我必须将数据 block 保存到闪存中。使用的闪存: https://datasheet.datasheetarchive.com/originals/dk/DKDS-24/460477.pdf
在数据表中,提到我无法写入已写入的页面(即使它是半空的)。我想要一些关于管理内存写入的最佳方法的建议?
- 我正在写入 25 个字节的 block 。
- 页面总大小为 256 字节
- 总页数 16,384
- 最小删除扇区:4KB(16页)
我的问题:
- 我能想到的管理内存的唯一方法是有一个 4KB 缓冲区,每次我想写入一些数据时,读取最后 16 页数据并将其保存在缓冲区中。然后我可以删除该扇区并重写以前的数据以及新的 block 。这是最常见的做法吗?还有其他更好的方法吗?
我能想到的唯一其他方法是简单地每页写入 1 block 数据,这听起来完全是浪费内存。但考虑到我有 16384 个可用页面,保存 16384 block 数据对于我的应用程序来说可能绰绰有余。
- 使用某些 asci 字符来表示 block 的结束是正常做法吗? 例如,使用十进制 13(回车符)作为分隔符:
页面
[ block 1] 13 [ block 2] 13 [ block 3] ........
页尾
感谢所有帮助。
最佳答案
根据第 8.2.13 章,您可以写入以前未写入的字节。因此,您不必读取目标页即可写入几个字节。只需使用正确的地址并写入 block 即可。
如果 block 的大小固定,则不需要分隔符,特别是如果每个 block 的内容是二进制的。 ASCII 分隔符是流式数据的解决方案。这将为您提供每页 10 个 block 。
以防万一您想使用所有空间,您可以编写一个知道如何拆分块以将其写入两个相邻页面的函数。考虑某种 HAL,硬件抽象层。
关于c - 将小块数据写入闪存页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69835156/