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.