需要具有几乎无限的读/写操作能力的非易失性存储IC


12

我需要一个内存解决方案,该解决方案将用于跟踪基于微控制器的项目中的累计计数。

通过累计计数,我的意思是说微控制器使用此存储位置来保留事件发生的计数。断电期间需要保留该计数,因此需要非易失性存储器。

另外,计数增加事件的发生是频繁的,因此将有很多写入存储器,因此我犹豫使用EEPROM。

首选的通信接口是I2C,但也欢迎使用其他替代方法。

我想到的是SRAM低功耗易失性存储器IC,可以选择在断电时由备用电池(例如纽扣电池)供电。


15
您需要F-RAM。
炉边堡,

3
...这是什么问题?
凝乳

2
如果在I2C写操作过程中电源开始出现故障,该怎么办?您如何确定您不会破坏计数?除非您可以检测到即将发生的功率损耗,否则这个问题比您想象的要困难得多,在这种情况下,您可以将基于RAM的计数器复制到典型的EEPROM中。
Elliot Alderson

5
“频繁”有多频繁?对于单个变量,即使是小型EEPROM也将具有非常高的耐久性。万一您的上次写入失败,您还将备份最后的x个计数。
hekete

我记得一些老式的非FLASH EE存储器承诺了1亿个周期。
Analogsystemsrf

Answers:


21

按照可用大小的顺序,三种非易失性存储器类型满足您的需求:

  • 磨损均衡的EEPROM / FLASH。
  • 备用电池SRAM。
  • 帧。

就成本而言,FRAM是最好的。您只需要在芯片内部,包括备用电容器即可完成写入。但是,可用尺寸很小。
备用电池SRAM庞大且材料昂贵。
耗损均衡的EEPROM需要固件来处理耗损均衡。


1
谢谢。我按照@Hearth的建议检查了FRAM,我认为它最适合我的需求。只是希望我能找到一个I2C变种。同样,累加器变量仅需为32位长。因此,大小并不是一个大问题。
Cerezo

3
@GH_engI²CFRAM 芯片。随着内存的发展,它是相当昂贵的(是一种相对较新的技术),但是对于您所需要的替代品可能会花费更多。
炉边

3
还有MRAM
DKNguyen '19

1
@GH_eng我认为TI MSP430FR *已内置FRAM。尽管您可能已经对MCU有所限制。
不错,

21

这是我对仍在量产的产品所做的工作。

  • 将所有参数和计数器保留在RAM中
  • 将中断线连接到电源电压阈值检测器
  • 中断触发时,请关闭所有消耗功率的设备(大多数外围设备,LED等),并备份所有RAM以进行刷新。

事实证明,从低压触发器到电源管理IC插入并关闭所有设备(有序关闭)的时间大约有10-20ms。是否有效取决于电源中的能量存储,但是即使是很小的电源也可以使此速度足够慢,以便可以可靠地写入小的数据集。


1
@Hilmer太聪明了!很高兴知道。可能在EEPROM和MCU的输入之前放置一个存储器CAP将进一步增加时间延迟。唯一的缺点可能是PCB上的组件更多。
Cerezo

当时,它显然是包括PCB房地产在内的最便宜的解决方案。当然,这取决于您的具体情况:我们有一个备用的GPIO线,所以这是免费的。剩下的只是几个软心豆粒(小的廉价SMD零件)
Hilmar

如果确实需要,可以在电源中放一个足够大的Elcap,而又不会太大而不会带来麻烦的副作用,则可以延长10-20ms。
桅杆

@桅杆:那可能太贵了,您可以选择其他解决方案更好
Hilmar


5

听起来您只能使用RTC时钟芯片或模块。它们具有备用电池,用于用户数据的额外SRAM,并带有I2C接口。

或者只是使用带有电池后备SRAM的MCU,因此不需要任何外部组件。


例如DS1307,DS1338。
filo

1
不幸的是,板上使用的RTCC是DS3231M。引脚配置与DS1307 RTCC相同,但没有内部备用数据寄存器。选择它是因为它具有集成的振荡器。我感觉到完整的电路审查:(!
Cerezo

5

赛普拉斯制造了他们所谓的非易失性SRAM。这是标准的SRAM,在断电时会自动备份。由于它仅在电源故障时写入非易失性存储器,因此可能具有更大的耐久性。它有串行和并行版本。这可能有点过大,因为最小的是64Kb。

在正常操作下,nvSRAM的行为类似于使用标准信号和时序的常规异步SRAM。nvSRAM执行并行随机访问读取和写入的速度最快为20 ns。

发生电源故障时,nvSRAM会自动将SRAM数据的副本保存到非易失性存储器中,该数据在其中的保护时间超过20年。SRAM和非易失性存储器之间的传输是完全并行的,从而允许在8 ms或更短的时间内完成操作,而无需任何用户干预。

上电时,nvSRAM将数据返回给SRAM,并且系统从中断处继续操作。nvSRAM还提供用户控制的软件STORE和RECALL初始化命令,以及大多数版本中的用户控制的硬件STORE命令。

NVSRAM框图



那东西很棒!
东町'19

4

对于单个4字节变量,EEPROM完全可以。

假设您每秒写入一次,并且您具有典型的32Kb EEPROM,而我们的耐用性为100,000个写入周期。

您可以写4个字节8000次,然后再进行清除。因此,即使使用保守估计,也应该可以写出8亿次。

现在一年中只有3150万秒,因此一秒钟写一次就需要25年才能达到EEPROM耐久性的低端估计。


1
当然,写入EEPROM的速度非常慢(毫秒),因此OP的“频繁写入”可能需要更快的解决方案……您假设每秒一次,但是OP在那一点上使我们陷入了黑暗。确实,“清除” EEPROM将花费非常非常长的时间(秒)。我想您可以覆盖旧值而不是擦除,但是如果计数值不是严格顺序的,则很难确定哪个值是最后写入的值。
Elliot Alderson

@ElliotAlderson您可能会假设最高值是最后一个。显然,在这种情况下每秒不算一次“频繁”是不知道的。只是指出,对于相隔1秒以上的写入频率,EEPROM仍然完全可行。
hekete

0

这里有很多选择,但是真正的问题是阻止数据损坏。写入期间断电可能会损坏数据。I2C是避免这种情况的好选择,因为例如使用SPI,您可能会发现(从存储器的角度来看)写入发生了,直到通过更新32位字的4个字节来完成一半。I2C更强大,但只有一点点。

我的建议是存储该值的4个副本。这样即使写入中断,两个也将始终匹配。

FRAM或类似产品可能是最佳选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.