SPI数据存储设备:(micro)SD卡,DataFlash或串行EEPROM?


8

我正在重新审视我的一些设计习惯,其中一个正在受到严格审查:基于SPI的存储设备是(micro)SD卡,因为它们的性价比高,而且速度通常更高。

在三种主要的基于SPI的存储设备中-(micro)SD卡,DataFlash和更简单的25Cxx系列SPI EEPROM(并24Cxx考虑了微控制器中的内置EEPROM和I2C EEPROM),这是给定用例的合适介质下面?请记住,我将所有介质都用作原始块设备,因此“ SD卡需要文件系统”参数不成立。

用例:

  • 系统配置和校准数据。示例:以太网接口的MAC地址,机载参考电压的测量电压。
  • 日志。示例:从传感器捕获的数据。
  • 代码和代码资源(太大,无法容纳在程序存储器中或必须随身携带。)示例:系统更新,国际化和本地化字符串,用户界面资源,字体。
  • 安全和数字版权管理。示例:加密密钥(公共和/或私有,对称和/或非对称)数字签名。

1
在大多数情况下回答:取决于。
Turbo J

1
裸露的SPI闪存芯片可以比SD卡更小,更便宜,我见过一些2Mbyte BGA部件的价格为2美元左右,它们的尺寸为1.8x2.5mm,米粒大小-Sam
Sam

Answers:


11

基本上,选择主要取决于两个条件:要存储的数据是大还是小,以及是否经常重写:

  • EEPROM非常适合经常更改的小数据。原因是:它仅以小尺寸出售,但是通常可以将它们擦除单字节。此外,EEPROM的耐久性非常高(数百万个周期)。
  • Flash适用于不经常更改的大数据。它可以廉价地用于大容量文件,但是当您需要覆盖数据时,您只能对整个页面(几KB)进行操作。耐久性在100.000个周期的范围内更大。

我不会再详细介绍两者之间的区别,它已经​​介绍过:

关于SD卡:SD卡是可移动闪存,因此,它遵循与常规闪存相同的约束。但是,它通常使用NAND闪存,而通常,串行闪存芯片使用NOR闪存。NAND闪存更便于写入(较小的页面,更快的擦除),但可靠性较差。如果您进行大量写操作,则一段时间后可能会遇到坏块。损耗均衡可以减轻这种情况,但是并不总是在便宜的SD卡中实现(SD / MMC卡是否确实通过自己的控制器进行损耗均衡?)。您可以在软件中实现它,但是它并不简单。

但是,接口(I2C或SPI)的选择完全无关。I2C较慢,但使用的引脚较少。I2C EEPROM通常也比SPI便宜,但是您通常根据在应用程序中为MCU引脚分配属性的方式决定使用其中一种。

现在,您已经给出了特定的用例,因此让我们一一看一下:

系统配置和校准数据

嗯,这个没有太多限制:该数据通常很小,并且不会经常更改。因此,在这里,最简单的方法是将其放在成本更低的位置:

  • 内部MCU EEPROM(如果有)
  • 或一些外部闪光灯(如果您已将其用于其他目的)
  • 如果您没有其他可用的永久性存储,则可以使用SD卡。但是请注意,由于SD卡最终可以卸下并放入另一台设备中,因此校准数据将不再是一致的。因此,您可能要避免这种情况。

如果设备中没有其他永久存储需求,并且MCU中没有内部EEPROM,则最终可以在MCU本身的闪存中使用特定的闪存页面(如果MCU允许的话)。否则,您可以使用小型外部EEPROM。

请注意,在特定的MAC地址情况下,出售的EEPROM中带有预编程的MAC地址,保证是唯一的(例如Microchip 24AAxxx)。因此,除非您已被IEEE正式分配了地址块或愿意冒险使用本地分配的地址,否则这将是必经之路。

日志

这通常很大,并且经常更改。大表示闪存,而不是EEPROM。因此,您可以使用闪存芯片或SD卡,但是如果确实经常重写日志,则最好使用SD卡。否则,您将有使闪存芯片磨损的风险,并且如果将闪存芯片焊接在板上,将比SD卡更难更换。还要注意的是,当通过循环遍历整个闪存页面来写入日志时,损耗平衡实际上变得微不足道。

如果这些都是小的日志,那么您很幸运,请选择EEPROM(只要可以接受的话)。

请注意,如果耐久性是一个真正的问题,那么还有一些具有无限耐久性和相对较大尺寸的解决方案:F-RAM和MRAM。但是这些花费了您一臂之力,您没有提到它们是一种选择。还要注意,这两种较新的技术比闪存具有更好的擦除/写入速度,因此对于连续记录,这可能很有趣。

代码和代码资源

通常较大,但不经常更改。外部闪存芯片(通常为NOR闪存)是理想的选择。

安全和数字版权管理

这个比较棘手。如果它确实包含绝不应该提取的敏感数据,则最好实际使用SIM卡形式的智能卡(最终在其中包含一些自定义固件)。但是,这当然是复杂的设计了很多。另一种(更简便,更便宜)的解决方案可能是专用的安全芯片,例如Atmel AT88SC系列,但是芯片上可用的命令必须对您的特定应用有意义。该芯片上可以执行的操作以及必须仔细计划的条件。

如果仅需要“基本”安全性,最简单的方法是使用内部MCU EEPROM。它不会像智能卡或专用芯片那样安全(它包含特定的安全措施,例如防止光攻击,针对芯片中的电源/故障分析的对策等等),但这是您能做到的最好做。

否则,如果没有内部EEPROM,您将得到与配置/校准数据相同的选项。但是,使用任何外部芯片来存储安全数据都是有风险的,因为可以使用简单的逻辑分析仪轻松监控数据线,并提取敏感数据。因此,即使据说EEPROM比闪存更难篡改,但从安全角度来看,在使用外部芯片的情况下选择一个或另一个不会有任何区别。

最后,SD卡在这里绝对是最糟糕的主意,因为它是可移动的。然后可以从PC读取敏感数据,甚至不需要任何特定的硬件。

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.