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