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 25Cxx
EEPROM serie SPI más simple (y también tiene EEPROM incorporada en microcontroladores y 24Cxx
EEPROM 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.
spi
flash
eeprom
data-storage
Maxthon Chan
fuente
fuente
Respuestas:
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:
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:
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.
fuente