数据存储在非易失性存储器中

时间:2023-03-07

尽管闪存和其他非易失性存储器技术被广泛用于实现嵌入式文件系统,但这对于某些嵌入式应用程序来说可能过于复杂。在许多情况下,内存可能有效地用作已预初始化的数据结构。这种方法需要对数据完整性进行一些管理。本文介绍了挑战并提供了一些使用 NVRAM 的简单解决方案。

NVRAM简介 
在现代计算机系统中,有大量的内存。其中大部分是名称不合时宜的随机存取存储器 (RAM)。这个名字没什么意义,因为现在所有的内存都是随机访问的。当工程师谈论 RAM 时,他们指的是易失性半导体存储器,只要通电,就可以无限期地写入和读取。它并不总是这样。在计算机的早期,常见的程序/数据存储形式是“内存”。按照现代标准,这是笨重的(更不用说昂贵了!),但有一个有用的特性:它是非易失性的。读取或写入数据需要电源,但不需要电源来保留数据。在内存断电的情况下,数据将无限期保持不变。有趣的是,跌落或振动内存可能会破坏其内容,

尽管现代计算机和大多数嵌入式系统的工作内存主要是 RAM,但拥有一定数量的非易失性 RAM (NVRAM) 仍然很有用。这可以使用闪存或其他一些具有非易失性(如 MRAM)的存储技术来实现,或者它可以是具有受保护电源(即电池)的常规 RAM。NVRAM 在嵌入式系统中有多种可能的用途:

NVRAM管理

从广义上讲,可以通过以下两种方式之一使用 NVRAM:

许多供应商提供专为在 NVRAM 中使用而设计的现成文件系统软件。除非需要某些专门的功能,否则开发人员自己设计在经济上是有问题的。数据结构的存储更特定于应用程序,因此将进一步解决。

适应非易失性 
使用普通的易失性 RAM 很简单。它必须在加电时初始化为已知值,然后可以根据需要写入和读取。使用 NVRAM 有两个新的挑战:


NVRAM 初始化 
当 NVRAM 次上电时,与普通 RAM 一样,它包含不确定的数据,需要进行初始化。在随后的情况下,软件需要识别 NVRAM 已初始化并且不会覆盖此保存的数据。

实现这种识别的简单方法是使用签名,它只是一个可以快速识别的字节序列,不能随机出现。当然,这种理想是不可能的,因为任何字节序列,无论多长,都可能随机出现。这只是将这种可能性降到的问题,同时仍然使检查变得快速和容易。如果签名只有 4 个字节,则它随机出现的几率为 40 亿比 1。这对于几乎任何可以想象的应用程序来说已经足够了。并且可以快速检查 32 位值。

通过仔细选择签名值,可以减少意外发生的机会。直觉上,一系列连续的数字(例如 1、2、3、4)感觉比“随机”集合更不可能。毕竟,彩票产生连续的数字序列是什么时候?当然,这样的序列与任何其他序列一样有可能或不太可能。然而,通过思考记忆是如何工作的,可能会增加特定序列的可能性。内存在首次通电时可能具有哪些值?大致有四种可能:

  1. 完全随机
  2. 全为零
  3. 所有的
  4. 反映芯片架构的一些规则模式(如交替的 1 和 0)

如果是 (1),那么任何签名都会给我们 40 亿比 1 的机会。任何其他人都可以通过使用正确的签名来检测。一种可能性如下:0x00、0xff、0xaa、0x55。这应该涵盖所有 (2)、(3) 和 (4),并且仍然只有 32 位。

需要注意初始化序列。必须设置有效数据,然后将签名初始化为过程中的一件事。

NVRAM 完整性 
当然,使用签名并不能保证数据的完整性。明智的做法是使用校验和或 CRC 进行错误检查,甚至是数据自校正机制。

使用 NVRAM 启动系统 
当使用 NVRAM 时,启动逻辑需要同时支持签名验证和数据完整性检查:

结论 
在嵌入式设计中使用 NVRAM 很简单,但需要仔细考虑其功能,如此处所述。使用全局签名和错误检查的方法适用于许多应用程序。对于非常大的数据库,对每个数据块进行单独检查可能会更有效。也可能值得使用 C++ 向应用程序代码开发人员隐藏 NVRAM 管理,从而限度地减少程序员错误的可能性。

上一篇:了解内存故障模型
下一篇:电源设计的PWM 和PFM

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料