如果我避开已经写入的区域,我可以写入之前写入的页面吗?
如果我理解 p。数据表的第 16 条正确地说:使用此特定芯片,即使您避开已写入的区域,也不得写入先前写入的页面。
细节
SST25VF064C 闪存芯片数据表在第10 页。16 表示“page-Program 指令在内存中最多编程 256 个字节的数据。在启动 Page-Program 操作之前,选定的页面地址必须处于擦除状态 (FFH)。”
因此,我假设“在启动页面编程操作之前,整个选定页面必须处于擦除状态(页面 FFh 上的每个字节)。” SST 或 Microchip 是否发布了任何文件来澄清这个令人发狂的模棱两可的句子?
根据我的经验,所有 MLC 闪存芯片和一些较新的 SLC 闪存芯片的制造商都规定,一旦页面被写入,必须在再次写入该页面之前擦除该页面,即使您只想将一些 1 位更改为0 位。(这在YAFFS 文章中称为“一次写入规则”。)
根据我的经验,所有较旧的闪存芯片都允许您在没有擦除周期的情况下将任何 1 位更改为 0 位,即使该位位于页面中,甚至是已经将其他位编程为零的字节中——闪存页可以在擦除之间多次编程。(这在 YAFFS 文章中称为“多次写入”)。
制造商的数据表是制造商向您做出的有条件承诺。只要您遵循所有数据表建议,制造商就承诺该芯片将按规定运行。我怀疑如果您对先前写入的页面进行编程,避开已经写入的区域,那么立即回读很有可能会给出您期望的数据——新写入的字节是您刚刚写入的值,其他字节可能没有变化。但是,由于这不符合数据表的建议,您不能再依赖数据表中的所有承诺。我听说这种未经批准的活动会导致数据保留时间和耐久性受到影响,因为程序干扰、过度编程、电荷陷阱、类似于DRAM 行锤的影响等。
“内存使用方案会影响误码率。部分页面编程、块内的非连续页面编程、每个块的过度读取而不擦除以及单个块内的读取操作次数不相等都会增加读取次数干扰错误。” ——米哈尔·杰德拉克。
“嵌入式系统中的 NAND 闪存”。
“当在页编程事件期间无意地将位从“1”编程为“0”时,会发生编程干扰。该位错误可能发生在正在编程的页上或块中的另一页上。偏置电压条件页面编程期间的块会导致少量电流隧道进入附近的存储单元。重复的部分页面编程尝试将继续加剧这种情况。——道格拉斯·谢尔顿和迈克尔·弗莱。
“闪存中的干扰测试”。页。8、9。
“当在编程操作期间无意地对某个位进行编程(1 到 0)时,就会发生编程干扰。......通过块中的随机编程和对页面应用多次部分写入,这种情况会变得更糟。”
“Yaffs NAND 闪存故障缓解”