Resumen

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:

¿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:

  1. Memoria Flash/ROM:
  1. Memoria RAM:
  1. Memoria EEPROM:
  1. Almacenamiento externo:

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:

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:

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?