【问题标题】:how to erase single page of m25p40 flash without erasing other pages?如何在不擦除其他页面的情况下擦除 m25p40 闪存的单页?
【发布时间】:2014-09-17 01:45:18
【问题描述】:

我正在使用 m25p40 闪存和 jn5148 MCU。在这个闪存的数据表中,它是这样写的:

擦除能力:

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

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

【问题讨论】:

  • 如果你只能擦除一个扇区,而不是一个页面,那么你必须复制整个扇区,擦除它,然后将扇区写回(修改后的页面)。如果可以擦除单个页面,那么它应该在数据表中,请仔细阅读!
  • 但在这种情况下会增加不必要的延迟。修改一页内容至少需要 2 秒!!!我想用这个闪存进行实时数据存储。

标签: c flash microcontroller eeprom


【解决方案1】:

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

  1. 将所有扇区读取到 RAM。
  2. 擦除该扇区。
  3. 在 RAM 中更改所需数据。
  4. 将更改的数据写回闪存的扇区。

您必须阅读这篇文章:Five things you never knew about flash drives

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      根据the datasheet

      可以使用 PAGE 一次将存储器编程为 1 到 256 个字节 程序命令。它分为 8 个扇区,每个扇区包含 256 个 页。每页宽 256 字节。

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

      【讨论】:

      • 能否给我“example write(address,word)”的链接?
      • 已经在我的回答中,但这里是avrfreaks.net/…
      • 我不明白这是如何回答这个问题的。页面程序与擦除页面不同。我不相信页面可以单独删除。
      • 最终他不想擦除一个页面,他想向它写入新数据。
      猜你喜欢
      • 1970-01-01
      • 2021-09-28
      • 2016-10-17
      • 2021-03-15
      • 2017-08-05
      • 1970-01-01
      • 2021-02-12
      • 2011-05-17
      • 2021-07-21
      相关资源
      最近更新 更多