0

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

擦除能力:

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

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

4

3 回答 3

1

根据数据表

可以使用 PAGE PROGRAM 命令一次对存储器进行 1 到 256 个字节的编程。它由 8 个扇区组成,每个扇区包含 256 页。每页宽 256 字节。

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

于 2014-07-25T09:26:25.220 回答
0

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

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

你必须阅读这篇文章:关于闪存驱动器你不知道的五件事

于 2015-01-21T16:09:28.830 回答
0

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

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

在此处输入图像描述

于 2014-07-27T00:52:08.437 回答