Elegir y usar la tecnología de memoria flash adecuada para aplicaciones de memoria de programa de IoT
Colaboración de Editores de DigiKey de América del Norte
2018-05-23
A medida que los nodos de IoT se han vuelto más poderosos, los requisitos de procesamiento pueden aumentar a un nivel que requiere un sistema operativo (SO) integrado completo, como Linux, para administrar adecuadamente la complejidad de todas las tareas en ejecución. Si bien es conveniente almacenar este código en una tarjeta flash microSDHC, la mayoría de las tarjetas flash microSDHC están diseñadas solo para el almacenamiento de datos y no para el almacenamiento del sistema operativo, aunque los proveedores han presentado algunas soluciones innovadoras.
Este artículo describe el papel de un sistema operativo integrado y por qué a menudo es conveniente incluir el sistema operativo y el código de aplicación de una tarjeta flash microSDHC en un nodo de IoT. A continuación, explica el modo de deterioro de las tarjetas flash y cómo los sistemas operativos pueden verse especialmente afectados por este fenómeno de deterioro. A continuación, muestra cómo los diseñadores pueden usar nuevas implementaciones de memoria flash para superar este deterioro para implementaciones de nodos de IoT confiables y eficientes.
Por qué usar un sistema operativo integrado
Para algunas aplicaciones de IoT, mientras más preprocesamiento se pueda realizar en el nodo de IoT remoto, menos datos necesitará transmitir el nodo de IoT al concentrador central, lo que liberará el ancho de banda de la red. Un sistema operativo integrado probado previamente puede admitir el procesamiento previo complejo mediante el manejo de muchas tareas individuales de manera eficiente, y puede realizar múltiples tareas de una manera predecible (determinista). Esto, por supuesto, exigirá más al microcontrolador, lo que requerirá una velocidad de reloj más rápida y, lo que es más importante, más memoria de programa.
Un sistema operativo integrado listo para el uso comercial o de código abierto también puede tener la ventaja de un código sólido y previamente probado que rara vez necesita actualización. Por ejemplo, los sistemas operativos Linux integrados disponibles solo se pueden actualizar trimestralmente o solo para parches de seguridad de emergencia. Un sistema operativo integrado y el código de aplicación requerido pueden necesitar 8 Gbytes o más, y como el sistema operativo rara vez se actualiza, puede ser más conveniente almacenar el sistema operativo en una tarjeta de memoria flash microSDHC que un técnico actualiza manualmente (físicamente). Esto también se amplía para una futura expansión de la memoria, ya que una tarjeta flash de 4 Gbytes existente puede reemplazarse fácilmente por una tarjeta de 8 Gbytes o más si es necesario la próxima vez que visite el técnico (Figura 1).

Figura 1: Una tarjeta de memoria Swissbit clase 10 microSDHC S-140u que admite velocidades de hasta 104 MBytes/s, lo suficientemente rápido como para acceder a la memoria de programas de alta velocidad. (Fuente de la imagen: Swissbit)
El almacenamiento de gigabytes de un sistema operativo integrado en una tarjeta flash microSDHC NAND que se actualiza físicamente tiene varias ventajas sobre la memoria flash actualizada a través de una red inalámbrica. En una red inalámbrica, dependiendo del esquema de arbitraje utilizado, la actualización de un sistema operativo integrado de 4 Gbytes o más puede robar el ancho de banda inalámbrico de las comunicaciones operativas. La actualización a través de una red también requiere una tarjeta microSDHC que sea el doble del tamaño normal, ya que necesita suficiente almacenamiento para ejecutar el sistema operativo así como para acomodar la actualización entrante.
La actualización del código flash a través de la conexión inalámbrica también reduce la duración de la batería debido a la actividad de la radio, así como a los mayores voltajes de escritura flash y los requisitos de alimentación.
Un sistema operativo integrado que se ejecuta fuera de la memoria flash también impone diferentes demandas en las celdas de memoria flash en comparación con el almacenamiento de datos. La mayoría de las tarjetas comerciales flash microSDHC están diseñadas por el fabricante solo para el almacenamiento de datos. El uso comercial más común es el almacenamiento multimedia para dispositivos móviles. Si bien los errores de múltiples bits en un archivo de video, imagen o audio pueden pasar desapercibidos para el usuario final, un error de un solo bit en un archivo crítico del sistema operativo integrado puede provocar una falla total del sistema.
La memoria flash no tiene una vida útil ilimitada. Cada operación de escritura en una matriz de memoria flash disminuye la vida útil de la matriz. Cada especificación de memoria flash del semiconductor enumera una cantidad limitada de ciclos de borrado/escritura. A medida que la celda flash se acerca a ese límite especificado, la celda se vuelve más y más propensa a desgastarse y no aceptar un nuevo estado de programación.
Un enfoque común para evitar el deterioro de la matriz flash debido a las operaciones de escritura se denomina nivelación de desgaste. En lugar de escribir en la misma ubicación flash, las escrituras se distribuyen uniformemente en toda la matriz de memoria del semiconductor flash, lo que garantiza una distribución uniforme de las escrituras en la matriz de memoria flash. Con la nivelación de desgaste, como el microcontrolador escribe en una sola ubicación en la memoria física, el controlador flash puede asignar esa misma ubicación a diferentes ubicaciones en la matriz de memoria flash.
Cómo se producen los errores de lectura
Se accede a los archivos del sistema operativo con mucha más frecuencia que los archivos de datos, por lo que pueden ser implacables cuando se trata de errores de bits de archivos. En algunos casos, los archivos del sistema operativo central pueden leerse constantemente, y esto puede introducir errores de bits en la matriz flash.
La memoria flash está organizada en bloques, y cada bloque contiene varias páginas. Los bloques son las partes más pequeñas de la memoria que se pueden borrar, mientras que las páginas son las partes más pequeñas de la memoria que se pueden leer o programar. Un tamaño común para un bloque flash es 256 Kbytes, que pueden contener 64 páginas de 4 Kbytes cada una. Cada página también incluye 64 bytes adicionales utilizados para el código de corrección de errores (ECC), conteos de borrado e información de traducción lógica a física.
Durante una operación de lectura rápida de una página de datos, se aplica un pequeño voltaje de lectura a todo el bloque al que pertenece la página, incluso si solo se necesita leer un byte en la página. Debido a la tecnología de celda de proceso flash, esto también induce un voltaje más pequeño en las páginas circundantes en el bloque. Esto puede inyectar electrones en las capas de aislamiento de la celda, similar a la programación de la celda, por lo que se conoce como "programación flexible". Aplicar repetidamente el pequeño voltaje de lectura en el mismo bloque puede alterar la programación de las páginas flash que no se leen. Con el tiempo, esto puede dar como resultado el cambio del estado de las celdas adyacentes a un valor diferente.
Aunque la mayoría de las tarjetas microSDHC flash NAND tienen alguna forma de corrección de errores para corregir errores de celda, la cantidad de errores causados por la programación flexible puede ser tan alta que es posible que alcance un nivel crítico que no pueda corregirse, lo que hace que el microcontrolador lea un valor diferente de la ubicación del bit, lo que resulta en un error de corrupción de archivos. Estos errores de bits se denominan errores de lectura.
Una tarjeta flash microSDHC NAND utilizada para el almacenamiento de datos rara vez ve errores de lectura. Debido a las operaciones de escritura realizadas en la matriz flash, después de una operación de nivelación de desgaste, las ubicaciones flash se reprograman, lo que elimina cualquier efecto de programación flexible. Sin embargo, una matriz flash utilizada para un sistema operativo integrado rara vez se programa para que un error de lectura pueda hacerse realidad.
Las tarjetas flash de celda de nivel individual (SLC) tienen una clasificación de un millón de lecturas, y las tarjetas flash de celda de nivel múltiple (MLC) tienen una capacidad nominal de 100.000 lecturas antes de que se produzca un error de lectura. Para el flash de datos, un error de lectura se considera tan raro que estas cifras a menudo no se especifican en las hojas de datos.
Utilizar RDM para evitar errores de lectura
Para evitar errores de lectura, Swissbit desarrolló una característica llamada Read Disturb Management (Gestión de Problemas de Lectura, RDM). En RDM de Swissbit, el controlador de la tarjeta flash realiza un seguimiento del número de operaciones de lectura para cada bloque flash individual. Cuando un bloque alcanza un número definido internamente de operaciones de lectura, el controlador mueve los datos a un nuevo bloque, similar a la nivelación de desgaste utilizada para las operaciones de escritura. Si es necesario, durante la operación de escritura en un nuevo bloque, el código de corrección de errores (ECC) del controlador SD corrige los datos dañados.
RDM se ha implementado en la tarjeta flash microSDHC clase 10 UHS-I S-450u de 8 Gbytes SFSD8192N1BM1MT-I-QG-221-STD de Swissbit. Diseñada específicamente para aplicaciones industriales que utilizan sistemas operativos integrados, la S-450u tiene suficiente espacio para un sistema operativo Linux integrado y un código de aplicación para muchos nodos de IoT complejos. En modo SDR104, la S-104u puede admitir hasta 104 Mbytes/s de acceso a datos.
Uso de una tarjeta microSDHC para ejecutar la memoria del programa
Como se explicó anteriormente, las tarjetas microSDHC generalmente se utilizan solo para la memoria de datos, por lo que los periféricos en la mayoría de los microcontroladores de arquitectura de Harvard solo admiten el acceso a tarjetas microSDHC como memoria de datos. Esto limita las opciones disponibles.
Las soluciones existentes leen la tarjeta microSDHC y cargan la memoria del programa en la RAM, y luego ejecutan la RAM. El chip RAM no solo agrega un costo adicional a la placa, sino que la expansión del programa está limitada a la cantidad de RAM integrada disponible en la placa de CI.
Las tarjetas microSDHC pueden interactuar en modo SD o modo SPI.
Para conectar el microcontrolador a la tarjeta microSDHC S-450u como memoria de programa, el microcontrolador seleccionado necesitaría admitir uno de los dos protocolos de bus de microSDHC:
- Un microcontrolador periférico en modo SD de tarjeta SDHC asociado a la memoria del programa (Figura 2). Esto puede ser un periférico externo o un microcontrolador periférico interno. La interfaz consta de seis señales: cuatro bits de datos (DAT [0-3]), un reloj (CLK) y una señal bidireccional de comando/respuesta (CMD). Los datos se transfieren cuatro bits a la vez y proporcionan la velocidad de ejecución del programa más rápida. El controlador de host o el microcontrolador proporcionan el reloj a la tarjeta microSDHC.
- Una interfaz SPI configurable con soporte eXecute In Place (XIP). Esto puede ejecutar el código de la tarjeta accediendo a la tarjeta microSDHC en modo SPI, proporcionando una transferencia rápida de datos, pero no tan rápida como en el modo de tarjeta SDHC. La memoria XIP asigna la memoria de la tarjeta en el espacio de memoria del programa del microcontrolador, lo que hace que el acceso a la tarjeta microSDHC sea transparente para el firmware del host.

Figura 2: La interconexión con una tarjeta microSDHC utilizando el Modo SD usa una interfaz de seis señales simples para proporcionar el acceso de memoria más rápido. (Fuente de la imagen: DigiKey)
Una tarjeta microSDHC se enciende en modo tarjeta SD. Para seleccionar el modo SPI de un solo bit, en los primeros seis relojes después del encendido, la señal DAT3 debe elevarse a VDD, mientras al mismo tiempo se envía un comando RESTABLECER (000000b) a la tarjeta bajando el CMD a VSS. Después de esto, la tarjeta permanece en modo SPI hasta que se apaga.
El microcontrolador MAX32652 Arm® Cortex®-M4F de Maxim Integrated es un microcontrolador de baja potencia diseñado para nodos de IoT. Cuenta con una interfaz QSPI XIP en chip que, si está configurada correctamente, es capaz de ejecutar un código desde una tarjeta microSDHC.
El MAX32652 también presenta una interfaz SDHC completa principalmente para el almacenamiento de memoria de datos.
Es importante tener en cuenta que estas interfaces para el microcontrolador deben ser interfaces de memoria de programa. Independientemente del protocolo de bus o la interfaz utilizada, el microcontrolador debería contener algún código de arranque flash en chip para inicializar la interfaz a la tarjeta microSDHC.
Seguridad con zócalo
El zócalo para una tarjeta microSDHC de aplicación industrial a menudo se pasa por alto. Para aplicaciones resistentes, el estaño o materiales de contacto similares pueden empañar o perder su resistencia a la tracción con el tiempo. Los contactos dorados, aunque cuestan unos pocos centavos más, valen el costo al proporcionar una conexión de contacto sólida que mantiene su resistencia a la tracción con el tiempo.
El conector/zócalo de la tarjeta de almacenamiento flash universal (UFS) y microSDHC 10101704J6#2A de Amphenol ICC proporciona una conexión sólida para cualquier tarjeta compatible con microSDHC (Figura 3). Este zócalo tiene contactos antideslizamiento que evitan que las tarjetas de memoria se atasquen durante las inserciones y extracciones.

Figura 3: El conector/zócalo de la tarjeta UFS y microSDHC 10101704J6#2A admite tanto el microSDHC existente como las tarjetas de UFS de última generación con velocidades de transferencia de datos de hasta 6 Gbytes/s. (Fuente de la imagen: Amphenol)
Este zócalo de Amphenol también admite la expansión futura al ser compatible con el nuevo formato de almacenamiento flash universal (UFS), que tiene un factor de forma similar al microSDHC pero tiene un espacio de contacto diferente (Figura 4). La tarjeta UFS admite el doble de velocidad que una microSDHC con transferencia de datos bidireccional diferencial.

Figura 4: Una tarjeta microSDHC a la izquierda y la nueva tarjeta UFS a la derecha. La tarjeta UFS admite el doble de velocidad que una microSDHC con transferencia de datos bidireccional diferencial. (Fuente de la imagen: DigiKey)
Algunos nodos de IoT en red pueden estar en ubicaciones remotas donde el Wi-Fi no está disponible o no es práctico. Para estas situaciones, la conexión de red podría realizarse a través de una conexión de datos móviles inalámbricos. Esto requiere el uso de una tarjeta SIM de suscriptor, que también debe estar en un zócalo.
Una forma sencilla de ahorrar espacio en el tablero sería usar una combinación de zócalo para tarjeta microSDHC y SIM, como el zócalo para tarjeta SIM dual y tarjeta microSDHC 1041681620 de Molex (Figura 5). Este zócalo también cuenta con contactos dorados para una conexión sólida en entornos hostiles y contactos antideslizante.

Figura 5: La combinación del zócalo para tarjeta SIM y tarjeta microSDHC 1041681620 reduce significativamente el espacio de la placa y proporciona contactos antideslizantes para evitar errores de inserción y extracción. (Fuente de la imagen: Molex)
Conclusión
Si bien las tarjetas flash microSDHC se han utilizado para el almacenamiento de datos, ahora están mejorando para admitir las necesidades únicas de la ejecución de la memoria del programa en lugar de los sistemas operativos integrados. Parte de esa evolución incluye el desarrollo de memorias flash más rápidas que pueden admitir solicitudes de lectura constantes. Además, los microcontroladores están evolucionando para admitir nuevas interfaces de memoria que pueden ejecutar códigos de forma confiable desde una tarjeta microSDHC externa, al mismo tiempo que reducen o eliminan los errores flash.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




