Dispositivos de almacenamiento de datos SPI: ¿tarjeta (micro) SD, DataFlash o EEPROM serie?

8

Estoy revisando algunos de mis hábitos de diseño, y uno de ellos está bajo un escrutinio serio: el dispositivo de almacenamiento basado en SPI es (micro) tarjetas SD, por su relación precio-capacidad y, en general, velocidades más altas.

Entre los tres tipos principales de dispositivos de almacenamiento basados ​​en SPI: tarjeta (micro) SD, DataFlash y 25CxxEEPROM serie SPI más simple (y también tiene EEPROM incorporada en microcontroladores y 24CxxEEPROM I2C en consideración), que es el medio apropiado para los casos de uso dados ¿abajo? Tenga en cuenta que uso todos los medios como dispositivos de bloques sin formato, por lo que el argumento "Las tarjetas SD necesitan un sistema de archivos" no es válido.

Casos de uso:

  • Configuración del sistema y datos de calibración. Ejemplos: dirección MAC para la interfaz Ethernet, voltaje medido de referencia de voltaje a bordo.
  • Registros Ejemplo: datos capturados de sensores.
  • Código y recursos de código (demasiado grandes para caber en la memoria del programa o deben transportarse de forma portátil). Ejemplo: actualizaciones del sistema, cadenas de internacionalización y localización, recursos de interfaz de usuario, fuentes.
  • Seguridad y gestión de derechos digitales. Ejemplo: claves criptográficas (públicas y / o privadas, simétricas y / o asimétricas), firmas digitales.
Maxthon Chan
fuente
1
Respuesta en la mayoría de los casos: Depende.
Turbo J
1
los chips flash SPI pueden ser mucho más pequeños y más baratos que las tarjetas SD, he visto algunas piezas BGA de 2Mbytes por $ 2 más o menos y tienen un tamaño de grano de arroz de 1.8x2.5mm
Sam

Respuestas:

11

Básicamente, la elección depende principalmente de dos criterios: si los datos a almacenar son grandes o pequeños, y si se reescriben con frecuencia o no:

  • EEPROM es ideal para datos pequeños que cambian con frecuencia. La razón es que se vende solo para tamaños pequeños, pero generalmente se pueden borrar de un solo byte. Además, la resistencia EEPROM es muy alta (millones de ciclos).
  • Flash es ideal para grandes datos que no cambian a menudo. Está disponible a bajo costo para tamaños grandes, pero cuando necesita sobrescribir datos, puede hacerlo solo para una página completa, que puede ser de unos pocos KB. Y la resistencia está más en el rango de 100.000 ciclos.

No entraré en más detalles sobre la diferencia entre ambos, ya se ha cubierto:

Con respecto a las tarjetas SD: la tarjeta SD es un tipo de flash extraíble y, como tal, sigue las mismas restricciones que un flash normal. Sin embargo, normalmente usa flash NAND, mientras que, por lo general, los chips flash serie usan flash NOR. El flash NAND es más conveniente para escribir (páginas más pequeñas, borrado más rápido) pero es menos confiable. Puede obtener bloques defectuosos después de un tiempo, si hace muchas escrituras. La nivelación de desgaste puede mitigar esto, pero no siempre se implementa en tarjetas SD baratas ( ¿Es cierto que una tarjeta SD / MMC se nivela con su propio controlador? ). Puede implementarlo en software, pero no es trivial.

Sin embargo, la elección de la interfaz (I2C o SPI) no tiene ninguna relación. I2C es más lento pero usa menos pines. La EEPROM de I2C también suele ser más barata que la SPI, pero por lo general decide utilizar uno u otro según la forma en que atribuyó los pines MCU en su aplicación.

Ahora, ha dado casos de uso específicos, así que veámoslos uno por uno:

Configuración del sistema y datos de calibración

Bueno, este no tiene muchas restricciones: estos datos suelen ser muy pequeños y no cambian con frecuencia. Entonces, aquí, lo más simple es ponerlo donde cuesta menos:

  • ya sea la MCU EEPROM interna si tiene una
  • o algún flash externo si ya lo necesita para otros fines
  • o eventualmente una tarjeta SD si no tiene otro almacenamiento persistente disponible. Sin embargo, tenga en cuenta que, dado que la tarjeta SD se puede extraer y colocar en otro dispositivo, los datos de calibración ya no serán consistentes. Por lo tanto, es posible que desee evitar eso.

Si no hay otras necesidades de almacenamiento persistente en su dispositivo y no hay una EEPROM interna en la MCU, podría utilizar una página flash específica en la memoria flash de la MCU (si la MCU lo permite). De lo contrario, puede recurrir a una EEPROM externa pequeña.

Tenga en cuenta que en el caso específico de las direcciones MAC, hay EEPROM que se venden con una dirección MAC preprogramada en el interior, garantizada como única (por ejemplo, Microchip 24AAxxx). Así que ese sería el camino a seguir, a menos que IEEE le haya atribuido oficialmente un bloqueo de dirección o esté dispuesto a arriesgarse a usar direcciones atribuidas localmente.

Registros

Esto suele ser grande y cambia a menudo. Grande significa flash, no EEPROM. Por lo tanto, puede utilizar un chip flash o una tarjeta SD, pero si los registros se reescriben realmente con frecuencia, será mejor que use una tarjeta SD. De lo contrario, corre el riesgo de desgastar el chip flash y, si está soldado en la placa, será más difícil reemplazarlo que una tarjeta SD. También tenga en cuenta que, al escribir registros recorriendo las páginas flash completas, la nivelación del desgaste se vuelve realmente trivial de implementar.

En caso de que sean registros pequeños, tienes suerte, usa EEPROM (siempre y cuando la resistencia sea aceptable).

Tenga en cuenta que, si la resistencia es un problema real, existen soluciones adicionales con una resistencia prácticamente ilimitada y un tamaño relativamente grande: F-RAM y MRAM. Pero estos cuestan un brazo y una pierna, y no los mencionaste como una opción. También tenga en cuenta que estas dos tecnologías más recientes logran una velocidad de borrado / escritura mucho mejor que el flash, por lo que para el registro continuo, esto puede ser interesante.

Código y recursos de código

Generalmente grande, pero no cambia a menudo. Un chip flash externo (típicamente flash NOR) es ideal para esto.

Seguridad y gestión de derechos digitales.

Este es más complicado. Si realmente contiene datos confidenciales que nunca deberían extraerse, será mejor que use una tarjeta inteligente en formato SIM (eventualmente con algún firmware personalizado). Pero esto, por supuesto complica el diseño mucho . Una solución alternativa (más fácil y económica) puede ser un chip de seguridad dedicado como la serie Atmel AT88SC, pero los comandos disponibles en el chip deben tener sentido para su aplicación específica. Qué se puede hacer en este chip y bajo qué condición debe planificarse cuidadosamente.

Si solo necesita seguridad "básica", lo más fácil es usar la EEPROM MCU interna. No será tan seguro como una tarjeta inteligente o un chip dedicado (que contiene medidas de seguridad específicas, como protección contra ataques ligeros, contramedidas contra análisis de potencia / falla dentro del chip, etc.), pero esto es lo mejor que puede hacer.

De lo contrario, si no hay EEPROM interna, terminará con las mismas opciones que para los datos de configuración / calibración. Sin embargo, el uso de cualquier chip externo para almacenar datos seguros es un riesgo ya que las líneas de datos se pueden monitorear fácilmente con un simple analizador lógico y se pueden extraer los datos confidenciales. Por lo tanto, incluso si se dice que EEPROM es más difícil de manipular que flash, elegir uno u otro en el caso de un chip externo no hace ninguna diferencia desde el punto de vista de la seguridad.

Finalmente, la tarjeta SD es definitivamente la peor idea aquí, ya que es extraíble. Los datos confidenciales podrían leerse desde una PC, sin necesidad de ningún hardware específico.

oscuro
fuente