【发布时间】:2016-02-25 18:08:00
【问题描述】:
我的系统需要将数据存储在 EEPROM 闪存中。字节串将一次一个地写入 EEPROM,而不是一次连续写入。字符串的长度可能会有所不同。我希望从最后一个写入地址继续按顺序保存字符串,而不会浪费任何空间。例如,如果第一个字节串写入地址 0x00~0x08,那么我希望第二个字节串从地址 0x09 开始写入。
如何实现?我发现某些 EEPROM 的写入命令不需要指定地址,只需从最后写入的点继续。但我使用的 EEPROM 不支持。 (我使用的是 Spansion 的 S25FL1-K)。我考虑过分配部分内存来跟踪地址并在每次写入时存储地址,但这可能会更快地磨损闪存。处理这种情况的常用方法是什么?
谢谢。
编辑: 我要问的是如何以非易失性方式跟踪/保存地址,以便下次写入时,我知道要从哪个地址开始。
【问题讨论】:
-
您阅读数据表了吗?命令以地址开头,然后您可以有 1 到 256 个字节。所以你知道你从哪个地址开始,你知道字符串有多长,所以当你开始另一个命令时,你知道你在页面中的位置,你知道要使用哪个地址。不确定你的问题是什么。无论如何,您必须预先检查字符串长度,以确保您不超过任何限制,无论是部件/页面的限制,还是您使用的 spi 控制器可能对您可以发送的每个命令的字节数有限制等。所以你总是知道起始地址和长度。
-
您命名的设备不是 EEPROM。它是一个串行 NOR 闪存。
-
@dwelch 数据没有被一个接一个地写入。系统通过蓝牙收集数据,并在空闲时写入闪存,并确认它收集的数据可以安全写入。这可能是在上一次写入之后的一段时间。就像你说的,是的,我知道在写发生的那一刻我在页面上的位置。我要问的是如何记住该地址,以便在下次写入时可以将其用作起始地址。如果我的解释足够清楚,我不是......
-
@BrianMcFarland 两者有什么区别?在 C 中实现时,串行 NOR 闪存是否与 EEPROM 不同?
-
在字符串之后写入某种文件结束标记。写入下一个字符串时,擦除令牌并在新字符串之后重写它。复位后,在启动过程中,从头开始读取缓冲区,直到找到令牌以确定继续写入的位置。如果字符串是 ASCII,则使用 EOF 字符作为标记。如果数据是二进制的,那么设计某种转义序列来识别文件结束标记。
标签: memory embedded flash-memory eeprom