Este codelab fue creado para explorar el mundo del almacenamiento de datos y programas en Sistemas Embebidos. Para esto es importante revisar las diferentes tecnologías de memoria y la forma como se pueden almacenar la información. Con este recurso se espera que usted al finalizar esté en capacidad de:
Identificar los diferentes tipos de memoria que tiene un Sistema Embebido y hacer una estimación del tamaño de cada tipo.
Fecha de Creación:
2024/03/01
Última Actualización:
2024/03/01
Requisitos Previos:
Adaptado de:
Referencias:
Escrito por:
Fredy Segura-Quijano
El almacenamiento de datos y programas es importante en el diseño y la funcionalidad de Sistemas Embebidos e IoT, sirviendo como la base para la ejecución de software y el manejo de la información recopilada por sensores o generada durante operaciones. La memoria en estos sistemas se clasifica generalmente en dos tipos: memoria volátil y no volátil, cada una con sus propias características y aplicaciones.
La memoria volátil, como la RAM (Memoria de Acceso Aleatorio), requiere energía para mantener la información almacenada. Su principal ventaja es la velocidad de acceso, lo que permite una lectura y escritura de datos rápida, crucial para el procesamiento en tiempo real. Sin embargo, una vez que el dispositivo se apaga, los datos almacenados en la memoria volátil se pierden. Esto la hace ideal para almacenar datos temporales, como variables de programa y datos caché de procesamiento.
Por otro lado, la memoria no volátil, como EEPROM (Electrically Erasable Programmable Read-Only Memory) o flash, retiene la información almacenada incluso cuando se corta la fuente de alimentación. Esto la hace adecuada para almacenar firmware, configuraciones de dispositivo y datos que deben persistir entre reinicios. Aunque generalmente más lenta que la memoria volátil, la memoria no volátil es indispensable para la persistencia de datos críticos y el arranque de sistemas.
La selección adecuada del tipo y capacidad de memoria en un dispositivo IoT o Sistema Embebido es fundamental para garantizar un rendimiento óptimo, eficiencia energética y confiabilidad. Los diseñadores deben considerar las necesidades específicas de su aplicación, incluido el tamaño del software a ejecutar, la cantidad de datos generados y el balance entre velocidad de acceso y persistencia de datos.
¿Qué características tiene la memoria en un Sistemas Embebido?
La memoria en sistemas embebidos posee características específicas que la diferencian de la memoria utilizada en computadoras personales u otros dispositivos electrónicos de propósito general. Estas características están diseñadas para satisfacer las necesidades particulares de los Sistemas Embebidos, que a menudo operan en entornos con recursos limitados o condiciones operativas especiales. Algunas de las características clave incluyen:
No Volatilidad: muchos sistemas embebidos requieren que su memoria retenga datos incluso cuando el dispositivo está apagado. La memoria no volátil, como EEPROM y Flash, es crucial para almacenar el firmware, configuraciones del sistema y datos que no deben perderse.
Tamaño y Escalabilidad: dado que los sistemas embebidos a menudo tienen limitaciones de espacio físico y energético, su memoria debe ser compacta y eficiente en el uso de la energía. Además, debe ser escalable para adaptarse a diferentes niveles de necesidades de almacenamiento, desde unos pocos kilobytes en dispositivos muy simples hasta gigabytes en sistemas más complejos.
Velocidad y Eficiencia: la velocidad de acceso y la eficiencia de la memoria son críticas para el rendimiento general del Sistema Embebido. Esto incluye tiempos rápidos de lectura y escritura, así como una gestión eficiente del consumo de energía, especialmente en aplicaciones donde la respuesta en tiempo real es esencial.
Robustez y fiabilidad: los Sistemas Embebidos frecuentemente operan en entornos exigentes, por lo que la memoria debe ser robusta y fiable. Esto significa resistencia a factores físicos como temperatura, humedad, y vibraciones, así como a variaciones en la alimentación eléctrica.
Seguridad: la seguridad de los datos almacenados es una consideración crecientemente importante, especialmente en aplicaciones críticas como dispositivos médicos, sistemas de control industrial, y dispositivos IoT. Las características de seguridad pueden incluir cifrado de datos, protección contra escritura y mecanismos de autenticación.
Ciclos de Escritura y Longevidad: algunos tipos de memoria tienen un número limitado de ciclos de escritura/lectura antes de que comiencen a fallar. Elegir el tipo adecuado de memoria teniendo en cuenta la frecuencia de actualizaciones de datos es crucial para asegurar la longevidad del dispositivo.
¿Qué tamaños de memoria son típicos en un Sistema Embebido?
Los tamaños de memoria en Sistemas Embebidos pueden variar ampliamente dependiendo de la aplicación y la complejidad del sistema. Los dispositivos embebidos van desde simples microcontroladores en dispositivos de baja potencia hasta sistemas complejos en aplicaciones avanzadas. Aquí hay una visión general de los tamaños de memoria típicos en sistemas embebidos:
Memoria Flash/ROM:
Microcontroladores de baja potencia: a menudo tienen de 4 KB a 256 KB de memoria Flash. Esta memoria se utiliza principalmente para almacenar el firmware que se ejecuta en el dispositivo.
Sistemas embebidos más avanzados: pueden tener de 512 KB a varios MB de memoria Flash. Los dispositivos con sistemas operativos más complejos o que necesitan almacenar más datos o programas pueden llegar a tener hasta 1 GB de Flash.
Memoria RAM:
Dispositivos de muy baja potencia: pueden tener tan solo 512 bytes a 8 KB de RAM, suficiente para tareas de procesamiento muy básicas y manipulación de datos.
Microcontroladores más comunes: suelen contar con 16 KB a 256 KB de RAM para la ejecución de programas y almacenamiento temporal de datos.
Sistemas más potentes: pueden tener de 1 MB a 512 MB de RAM, permitiendo aplicaciones más complejas y multitarea.
Memoria EEPROM:
Utilizada para almacenamiento de datos no volátil que necesita ser actualizado ocasionalmente, como configuraciones o datos de calibración. Los tamaños típicos van desde unos pocos bytes hasta 512 KB, aunque los tamaños más comunes son de 4 KB a 64 KB.
Almacenamiento externo:
Para aplicaciones que requieren almacenar grandes cantidades de datos, como registros o archivos multimedia, se pueden utilizar memorias SD o unidades de estado sólido (SSD) externas, las cuales pueden ir desde unos pocos GB hasta terabytes de capacidad.
Es importante destacar que la selección del tamaño de memoria adecuado debe basarse en las necesidades específicas de la aplicación, considerando el balance entre costo, consumo de energía, y requerimientos de almacenamiento de datos y programas.
Y si uso librerías existentes: ¿Qué cantidad de memoria se puede necesitar?
Dado que requerimos implementar sistemas algo más complejos que simplemente basados en pocas funciones o métodos; se hace necesario el uso de librerías o frameworks dependiendo la necesidad. En el caso de mejorar una implementación basada en múltiples funciones, podemos recurrir al uso de Sistemas Operativos donde a cada función la llamaremos una tarea. El uso de múltiples tareas requiere poder comunicarlas, sincronizarlas y hacer que su ejecución sea eficiente buscando incluso emular concurrencia o paralelismo entre ellas. Para ello podemos usar por ejemplo FreeRTOS que es un sistema operativo en tiempo real (RTOS) diseñado para aplicaciones embebidas. Su huella de memoria es relativamente pequeña. En el caso de memoria RAM, la configuración mínima puede empezar en unos pocos kilobytes de RAM (aproximadamente 2 KB a 10 KB), dependiendo de la cantidad de tareas, funciones y uso de características como colas, semáforos, etc. En el caso de memoria Flash, el tamaño de código (memoria flash) necesario puede comenzar desde alrededor de 5 KB a 10 KB, dependiendo de las características del sistema operativo que se utilicen.
En el caso del uso de frameworks para ejecutar modelos de aprendizaje automático tenemos opciones como TensorFlow Lite para microcontroladores (TFLite Micro), que está diseñado para ejecutar modelos de aprendizaje automático en microcontroladores y otros dispositivos con recursos limitados. En el caso de memoria RAM, el uso puede variar desde decenas de kilobytes hasta varios cientos de kilobytes, dependiendo del modelo y la optimización. Para la memoria Flash, la huella de código para el runtime de TFLite Micro puede ser tan pequeña como 16 KB a 64 KB, con modelos adicionales y datos que requieren memoria adicional.
Los sistemas embebidos utilizan diversos tipos de memoria, cada una con características y aplicaciones específicas. Estas memorias se dividen principalmente en dos categorías: volátil y no volátil.
Memoria Volátil: la memoria volátil es aquella que necesita energía para mantener la información almacenada. Cuando el dispositivo se apaga, los datos se pierden. Existen diferentes tipos de memoria volátil:
RAM: Memoria de Acceso Aleatorio: la RAM (Random Access Memory) es el tipo más común de memoria volátil. Permite el acceso rápido y en cualquier orden a las celdas de memoria para leer y escribir datos. Es esencial para el funcionamiento de sistemas embebidos, ya que almacena temporalmente los datos que el procesador necesita rápidamente, incluyendo el código del programa mientras se ejecuta.
SRAM (Static RAM): No necesita ser refrescada constantemente, lo que la hace más rápida y menos consumidora de energía que la DRAM. Sin embargo, es más cara y se utiliza en cantidades menores, por ejemplo, como caché del procesador.
DRAM (Dynamic RAM): Requiere ser refrescada periódicamente para mantener la información. Aunque es más lenta y consume más energía que la SRAM, su costo más bajo y mayor densidad de almacenamiento la hacen ideal para el uso como memoria principal en muchos sistemas.
Memoria No Volátil: La memoria no volátil conserva la información almacenada incluso después de apagar el dispositivo. Existen diferentes tipos de memoria no volátil:
ROM: Memoria de Solo Lectura: la ROM (Read-Only Memory) es una memoria no volátil utilizada principalmente para almacenar firmware o software que no necesita cambios. Los datos en ROM están permanentemente grabados durante la fabricación o mediante programación posterior.
EEPROM: Memoria Programable y Borrable Eléctricamente: la EEPROM (Electrically Erasable Programmable Read-Only Memory) permite la reescritura de datos con un proceso eléctrico. A diferencia de la ROM, la EEPROM puede ser borrada y reprogramada en pequeñas secciones, lo que la hace útil para almacenar configuraciones o datos que pueden necesitar actualizaciones periódicas. La memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) y la memoria Flash son dos tipos de almacenamiento no volátil ampliamente utilizados en el mundo de los Sistemas Embebidos e IoT. Ambas permiten almacenar datos que no se pierden al apagar el dispositivo, pero tienen diferencias significativas en su estructura, modo de operación y aplicaciones. La memoria EEPROM se caracteriza por su capacidad para borrar y reprogramar bytes individuales de datos, lo que la hace altamente flexible para aplicaciones que requieren modificaciones frecuentes de configuraciones o datos almacenados a nivel de bits o bytes. Sin embargo, esta flexibilidad viene con una velocidad de escritura más lenta y un número limitado de ciclos de escritura/lectura comparado con la memoria Flash. La EEPROM se utiliza comúnmente para almacenar configuraciones de firmware o parámetros de dispositivo que necesitan ser actualizados ocasionalmente, como la calibración de sensores o configuraciones de red.
Flash Memory: la memoria Flash es un tipo de EEPROM que se puede borrar y programar en bloques. Ofrece un equilibrio entre la densidad de almacenamiento, el costo y la velocidad, lo que la convierte en la opción preferida para una amplia gama de aplicaciones, desde el almacenamiento de programas y datos en sistemas embebidos hasta unidades de almacenamiento masivo como tarjetas SD y unidades USB. La memoria Flash se ha popularizado debido a su mayor densidad de almacenamiento y velocidad de operación en comparación con la EEPROM. La memoria Flash permite borrar y escribir datos en bloques más grandes en lugar de bytes individuales, lo que facilita una programación más rápida y eficiente para grandes volúmenes de datos. Esta característica la hace ideal para almacenar el sistema operativo, aplicaciones, o datos de usuario en dispositivos móviles, cámaras digitales y, cada vez más, en sistemas IoT. Además, la memoria Flash suele tener una mayor resistencia y puede soportar más ciclos de borrado/escritura que la EEPROM, lo que contribuye a su popularidad en aplicaciones que requieren una mayor longevidad del almacenamiento.
La elección entre EEPROM y memoria Flash depende de las necesidades específicas del proyecto, incluyendo consideraciones como la cantidad de datos a almacenar, la frecuencia de actualización de los datos y los requisitos de rendimiento del sistema. Con el avance de la tecnología, se han desarrollado variantes y mejoras en estas memorias, ofreciendo opciones aún más eficientes y de mayor capacidad para enfrentar los desafíos de almacenamiento en aplicaciones modernas de IoT.
PREGUNTA DE COMPRENSIÓN. ¿Qué tipo de memoria es esencial para el almacenamiento de firmware en Sistemas Embebidos e IoT?
RAM.EEPROM.DRAM.SRAM.
A continuación tienes realimentación a las preguntas de comprensión. Tus respuestas no quedan almacenadas, solo se busca hacer una reflexión sobre la lectura.
PREGUNTA DE COMPRENSIÓN. ¿Qué tipo de memoria es esencial para el almacenamiento de firmware en Sistemas Embebidos e IoT?
Correcta: EEPROM. Correcta. La EEPROM es crucial para almacenar firmware y configuraciones del sistema que deben persistir entre reinicios.