将小块数据写入闪存页面
Posted
技术标签:
【中文标题】将小块数据写入闪存页面【英文标题】:Writing small chunks of data to flash memory page 【发布时间】:2021-12-18 10:35:03 【问题描述】:我有一个应用程序,我必须将数据块保存到闪存中。使用的闪存: https://datasheet.datasheetarchive.com/originals/dk/DKDS-24/460477.pdf
在数据表中,提到我无法写入已经写入的页面(即使它是半空的)。我想要一些关于管理写入内存的最佳方法的建议?
我正在写入 25 个字节的块。 总页面大小为 256 字节 总页数 16,384 最小擦除扇区:4KB(16 页)我的问题:
-
我能想到的管理内存的唯一方法是拥有一个 4KB 的缓冲区,每次我想写一些数据时,读取最后 16 页的数据并将其保存在缓冲区中。然后我可以擦除该扇区并重写以前的数据以及一个新块。这是最常见的做法吗?还有其他更好的方法吗?
我能想到的唯一其他方法是每页简单地写入 1 块数据,这听起来完全浪费内存。但考虑到我有 16384 个页面可用,保存 16384 个数据块对于我的应用程序来说可能绰绰有余。
-
使用一些 asci 字符来表示块的结束是正常的做法吗?
例如使用 Decimal 13(回车)作为分隔符:
页面
[CHUNK1] 13 [CHUNK2] 13 [CHUNK3] ........
页尾
感谢所有帮助。
【问题讨论】:
根据第 8.2.13 章,您可以写入以前未写入的字节。是什么让你觉得自己“无法写入已经写入的页面”? 你说得对。我一定在某处读过它。还是谢谢你..我想我会在每页写9块数据 如果您写入已写入的位置,它将与已写入的值进行按位逻辑与。这些位只能被清除。所以限制只是“最小的擦除扇区”。擦除将所有位重置为 1。 【参考方案1】:根据第 8.2.13 章,您可以写入以前未写入的字节。因此,您无需读取目标页面即可写入几个字节。只需使用正确的地址并写入块即可。
如果您有固定大小的块,则不需要分隔符,特别是如果每个块的内容是二进制的。 ASCII 分隔符是流式数据的解决方案。这将为您每页提供 10 个块。
以防万一您想使用所有空间,您可以编写一个知道如何拆分块以将其写入两个相邻页面的函数。想想某种 HAL,硬件抽象层。
【讨论】:
以上是关于将小块数据写入闪存页面的主要内容,如果未能解决你的问题,请参考以下文章