C 如何在不擦除其他页面的情况下擦除m25p40闪存的单个页面?

C 如何在不擦除其他页面的情况下擦除m25p40闪存的单个页面?,c,flash,microcontroller,eeprom,C,Flash,Microcontroller,Eeprom,我使用的是带有jn5148 MCU的m25p40闪存。该闪存的数据表中写道: 擦除功能: 扇区擦除:0.6秒512Kb(典型) 大容量擦除:4Mb 4.5秒(典型) 我面临着覆盖存储在扇区一页中的数据的问题。那么,如何删除一页,并在该页中写入新数据?是否有任何解决方案可以擦除扇区的一页,而不擦除同一扇区的其他页?根据: 使用该页,可以一次编程1到256字节的内存 程序命令。它被组织为8个扇区,每个扇区包含256个 页。每一页有256字节宽 虽然我不知道它是否真的有效,我也无法测试它,但我还发

我使用的是带有jn5148 MCU的m25p40闪存。该闪存的数据表中写道:

擦除功能:

  • 扇区擦除:0.6秒512Kb(典型)
  • 大容量擦除:4Mb 4.5秒(典型)
我面临着覆盖存储在扇区一页中的数据的问题。那么,如何删除一页,并在该页中写入新数据?是否有任何解决方案可以擦除扇区的一页,而不擦除同一扇区的其他页?

根据:

使用该页,可以一次编程1到256字节的内存 程序命令。它被组织为8个扇区,每个扇区包含256个 页。每一页有256字节宽


虽然我不知道它是否真的有效,我也无法测试它,但我还发现有人已经这样做了,如果你不想阅读页面程序序列(数据表第27页),这应该给你一个示例函数
write(address,word)
然后自己编写。

这是一个从m24p40文档中引用的扇区擦除过程

扇区擦除命令将所选扇区内的所有位设置为1(FFh) 部门在接受扇区擦除命令之前,先执行写入操作 “启用”命令必须在以前执行过。写完之后 启用命令已解码,设备将设置写入启用 锁紧(WEL)钻头。扇区擦除命令由驱动芯片输入 选择(S#)LOW,然后选择命令代码和三个地址字节 在串行数据输入(DQ0)上。扇区中的任何地址都是有效的 扇区擦除命令的地址。必须将S#降至较低的位置,以备将来使用 序列的整个持续时间。赛后,必须将S#开得很高 最后一个地址字节的第八位已锁定。否则 未执行扇区擦除命令。一旦S#被推高, 启动自定时扇区擦除周期;周期的持续时间 我是t-SE。当扇区擦除周期正在进行时,状态 可以读取寄存器以检查正在写入(WIP)的值 一点在自定时扇区擦除周期中,在制品位为1,为 循环完成时为0。在事故发生前的某个未指明的时间 循环完成后,WEL位复位。可以使用扇区擦除命令 如果适用于硬件或软件扇区,则不执行 受保护


您不能重写一页。您必须至少重写一个扇区。 因此,如果您想更改或重写choosen扇区中任何页面中的至少一个字节,您可以执行以下操作:

  • 将所有扇区读取到RAM
  • 删除此扇区
  • 更改RAM中所需的数据
  • 将更改的数据写回闪存的扇区

  • 您必须阅读本文:

    如果您只能擦除一个扇区,而不能擦除一页,那么您必须复制整个扇区,擦除它,然后将扇区写回(使用修改过的页面)。如果可以删除一页,那么应该在数据表中,仔细阅读!但在这种情况下,将添加不必要的延迟。修改一页内容至少需要2秒!!!我想用这个闪存来存储实时数据。你能给我一个“示例写入(地址,单词)”的链接吗?我的答案中已经有了,但我不明白这是如何回答这个问题的。页面程序与擦除页面不同。我不相信页面可以单独擦除。最后,他不想擦除页面,他想向页面写入新数据。