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

时间:2014-07-25 08:51:59

标签: c flash microcontroller eeprom

我正在使用带有jn5148 MCU的m25p40闪存。在这个闪存的数据表中,写道:

擦除功能:

  • 扇区擦除:0.6 s内的512Kb(TYP)
  • 批量擦除:4.5秒内的4Mb(TYP)

我在覆盖存储在一页扇区中的数据时遇到问题。那么,如何擦除一个页面,并在该页面中写入新数据?是否有任何解决方案可以擦除一页扇区,而不删除同一扇区的其他页面?

3 个答案:

答案 0 :(得分:1)

根据the datasheet

  

使用PAGE一次可以将存储器编程为1到256个字节   PROGRAM命令。它被组织为8个扇区,每个扇区包含256个扇区   页面。每页的宽度为256字节。

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

答案 1 :(得分:0)

以下是m24p40

文档中引用的扇区擦除程序
  

SECTOR ERASE命令将所选位内的所有位设置为1(FFh)   部门。在接受SECTOR ERASE命令之前,写一个WRITE   必须先前已执行ENABLE命令。写完之后   ENABLE命令已解码,器件设置写使能   锁存(WEL)位。通过驱动芯片进入SECTOR ERASE命令   选择(S#)LOW,然后是命令代码和三个地址字节   关于串行数据输入(DQ0)。该部门内的任何地址都是有效的   SECTOR ERASE命令的地址。 S#必须被驱动为低电平   整个序列的持续时间。在#之后必须将S#驱动为高电平   最后一个地址字节的第8位已被锁存。否则为   不执行SECTOR ERASE命令。一旦S#被驱动为高电平,   启动自定时SECTOR ERASE循环;周期的持续时间   是SE。当SECTOR ERASE循环正在进行时,状态   可以读取寄存器以检查正在写入的值(WIP)   位。在自定时SECTOR ERASE循环期间WIP位为1,并且是   循环完成时为0。在某些未指定的时间之前   循环完成后,WEL位复位。 SECTOR ERASE命令是   如果它适用于硬件或软件的扇区,则不执行   保护。

enter image description here

答案 2 :(得分:0)

您无法重写一页。你必须至少重写一个部门。 因此,如果您想要更改a.k.a在选择的扇区中的任何页面中重写至少一个字节,您可以执行以下操作:

  1. 将所有扇区读入RAM。
  2. 删除此部门。
  3. 在RAM中更改所需数据。
  4. 将更改的数据写回闪存扇区。
  5. 你必须阅读这篇文章:Five things you never knew about flash drives