La memoria Flash externa tiene ventajas cuando se usan tablas de búsqueda en puntos finales de IoT de alto rendimiento.

Por Bill Giovino

Colaboración de Editores de Digi-Key de América del Norte

A medida que las redes de Internet de las cosas (IoT) se vuelven más complicadas, los puntos finales de IoT realizan un procesamiento más complejo en el borde. Esto puede requerir la actualización de un punto final existente con un sistema que tenga un microcontrolador con una velocidad de reloj más rápida, más memoria y un núcleo de procesador más potente.

Esto también puede exigir sensores y convertidores de analógico a digital (ADC) que tengan un alto nivel de precisión y que pueden requerir una calibración periódica. Los errores lineales se pueden compensar fácilmente con una fórmula. Sin embargo, los errores no lineales no siguen un patrón establecido de desviación de la lectura del sensor y, por lo tanto, no se pueden compensar matemáticamente con facilidad. A menudo, la forma más sencilla de compensar los errores no lineales en el firmware es almacenar los datos de corrección necesarios en la memoria con una tabla de búsqueda de datos.

Este artículo cubrirá brevemente los errores de sensores y de ADC y discutirá las ventajas de usar tablas de búsqueda de datos para corregir tales errores. Luego, se explicará cómo implementar una tabla de búsqueda Flash de datos práctica y rentable en un sistema basado en microcontrolador STMicroelectronics STM32L496VG usando un chip de memoria flash de interfaz periférica serial (SPI) ON Semiconductor LE25S161PCTXG externo.

Errores de sensores

Los sensores que detectan condiciones analógicas como la temperatura, la presión y el voltaje pueden tener errores no lineales. Es importante probar los sensores comparándolos con una referencia precisa durante la fase de desarrollo de un proyecto, y comparar el valor de referencia con la salida digital del sensor. Esto le permite al desarrollador determinar la naturaleza de cualquier desviación del sensor de los valores de referencia de manera anticipada y si las desviaciones son aceptables dados los requisitos de la aplicación. El desarrollador puede entonces decidir si es necesario compensar alguna desviación y, en caso afirmativo, si las desviaciones deben compensarse en hardware o firmware.

Algunos errores del sensor pueden ser errores lineales predecibles. Compensar estos errores puede ser tan simple como sumar o restar un valor constante a la salida del sensor. A veces, estos errores pueden variar en la escala del sensor. Por ejemplo, de cero a un tercio de la escala completa, podría ser necesario agregar una constante; de un tercio a la mitad de la escala, puede que se necesite una constante diferente.

Estos errores son predecibles y, obviamente, fáciles de corregir. Sin embargo, la desviación de una lectura precisa podría cambiar con el tiempo. Además, más adelante pueden desarrollarse nuevos errores en los sensores debido a razones como la exposición a temperaturas extremas, una humedad ambiental alta o el envejecimiento de los sensores. Si estos errores deben corregirse o no depende siempre de la aplicación. Puede que sea necesario probar el sistema en condiciones extremas de temperatura, presión y humedad para determinar el comportamiento del sensor. Estas pruebas ambientales son necesarias para algunas aplicaciones, como sistemas automotrices, militares y algunos sistemas industriales. Sin embargo, muchos nuevos puntos finales de IoT van a donde ningún sensor ha ido antes, por lo que la prueba de sensores puede ser un requisito nuevo.

Los periféricos analógicos de microcontroladores comunes, como los ADC, también pueden requerir una calibración periódica en el sistema, como cualquier sensor analógico. Los errores de ADC no siempre son predecibles, e incluso si el error inicial se puede corregir con un algoritmo, el error puede cambiar con el tiempo, potencialmente de una manera que no se pueda corregir de manera fácil con un algoritmo. Esto puede resultar en un sistema que ya no sea capaz de funcionar con la precisión requerida, lo que llevaría a altos costos de reemplazo.

Ventajas de utilizar una tabla de búsqueda de datos para la corrección de errores de sensor analógico

Una tabla de búsqueda de datos puede ser un método práctico y eficiente para realizar de manera rápida algunos cálculos comunes tan complicados como las funciones trigonométricas, o tan simples como la reversión de bytes a bits o la conversión de un byte a un código de Gray. El uso de una tabla de búsqueda de 256 bytes para la reversión de bytes a bits es significativamente más rápido que la reversión de bits en el firmware. Es seguro almacenar esta tabla de búsqueda en el programa o en la memoria flash de los datos, ya que ocupa poco espacio y nunca necesita cambiarse.

Una tabla de búsqueda de datos también es un método muy práctico para almacenar datos de calibración de sensores. Un periférico analógico de un microcontrolador, como un ADC incorporado, puede requerir una calibración periódica con el mismo método exacto que un sensor analógico. Los ADC que se encuentran en la mayoría de los microcontroladores pueden tener una precisión de ±2 o ±3 bits menos significativos (LSB). Si bien estos pueden ser adecuados para la mayoría de las aplicaciones, para los sistemas que requieren alta precisión tiene sentido calibrar periódicamente los ADC.

Una tabla de consulta de calibración parcial para corregir datos de 24 bits puede verse similar a la Tabla 1.

Lectura del sensor   Valor corregido del sensor
:   :
01 AB 24 h   00 01 AB 2 h
01 AB 25 h   00 01 AB 22 h
01 AB 26 h   00 01 AB 24 h
:   :

Tabla 1: Un extracto de un ejemplo de una tabla de búsqueda de datos para datos de calibración de 24 bits. El valor de entrada sin procesar es la lectura de origen que debe corregirse para detectar errores. Este valor en bruto se usa luego como una dirección de 24 bits para buscar un valor corregido de 32 bits correspondiente, donde el byte más significativo es siempre 00 h. (Fuente de los datos de la tabla: Digi-Key Electronics)

En este ejemplo, el valor de entrada sin procesar es la lectura de origen que debe corregirse para detectar errores. Este valor en bruto se usa luego como una dirección de 24 bits para buscar un valor corregido de 32 bits correspondiente, donde el byte más significativo es siempre 00 h. Se puede agregar una desviación al valor de entrada sin procesar si la tabla de búsqueda no comienza en la dirección cero.

Antes de decidir dónde almacenar la tabla de búsqueda, es importante decidir qué tan grande debe ser la tabla de búsqueda y si se debe volver a escribir. Ambos aspectos son importantes. Una tabla de búsqueda que se ajuste al Flash en el chip disponible del microcontrolador tiene sentido si nunca necesita reescribirse. Pero si el sensor requiere una recalibración periódica, esto significa volver a escribir el Flash interno, lo que implica que todo el sector del Flash con la tabla se borre y reprograme.

Si el sector del Flash comparte espacio con la memoria del programa, puede requerir la recompilación del código. Incluso si la tabla de búsqueda está en su propio sector dedicado, los requisitos de memoria pueden cambiar o expandirse a una fecha posterior, lo que resultará en la reutilización de parte del espacio del sector de la tabla de búsqueda para obtener código adicional. Esto complica la calibración del sensor en el campo y puede evitar la autocalibración independiente del punto final del IoT al requerir que el código recompilado se descargue a través de la red. El problema se complica aún más si hay varios sensores involucrados.

Las tablas de búsqueda grandes, como una tabla de entrada de 16,777,216 para la calibración de datos digitales de 24 bits, no son prácticas o son imposibles para la memoria de programas Flash en chip. El tamaño de la tabla de búsqueda se puede reducir a la mitad si solo se almacenan las entradas de manera alternada y los resultados de las entradas faltantes se interpolan según los datos de la tabla existente. Esto da como resultado un pequeño impacto en el rendimiento y una posible pérdida de precisión de ±1 LSB. Sin embargo, incluso esta tabla de búsqueda de 8,388,608 entradas puede ser poco práctica para almacenar en Flash interno.

La mejor solución para estas tablas de búsqueda de datos grandes en un sistema basado en microcontrolador es la memoria Flash externa. Esto proporciona una manera fácil de agregar múltiples megabytes de tablas de búsqueda sin sacrificar la memoria interna del programa Flash. Esto también permite que el sistema reescriba fácilmente la tabla de búsqueda sin interferir con la memoria Flash interna del microcontrolador.

Para sistemas de alto rendimiento, ha sido común agregar memoria Flash paralela externa tanto para la expansión de memoria de datos como de programas. Sin embargo, esto requiere un microcontrolador con un bus de datos externo. La dirección y los buses de datos adicionales y las señales de control requeridas pueden usar 36 pines del microcontrolador o más. Este requisito limita los microcontroladores disponibles para la aplicación. Estos buses externos también ocupan espacio adicional en la placa de CI y pueden aumentar la interferencia electromagnética (EMI) del sistema.

Para la mayoría de los sistemas, la mejor solución es utilizar una memoria Flash de datos en serie externa que use una interfaz periférica serial (SPI) para la transferencia de datos. Esto puede requerir hasta tan solo cuatro pines en el microcontrolador.

Un buen ejemplo de este tipo de dispositivo de memoria Flash es el LE25S161PCTXG de ON Semiconductor. Este es un dispositivo de memoria Flash en serie de 16 megabits (Mbit) que admite un reloj SPI de 70 megahercios (MHz). Sin embargo, también admite el modo SPI dual, que le permite transferir datos a una velocidad máxima de 140 Mbits/s. Los registros de estado internos se utilizan para configurar los modos de lectura, escritura y bajo consumo del dispositivo.

El LE25S161PCTXG tiene las señales SPI habituales para la selección de reloj, datos y chip (Figura 1). También tiene dos pines adicionales. WP \ es una señal de protección contra escritura activa-baja que evita la escritura en los registros de estado del dispositivo. Esto se puede usar para evitar tareas de firmware de baja prioridad de una reescritura no autorizada del dispositivo. HOLD\  pausa una transferencia de datos en curso. Esto es útil si el microcontrolador tiene que atender una interrupción mientras hay en curso una transferencia de datos. La transferencia de datos se puede pausar hasta que se repare la interrupción, y luego reanudarse donde se detuvo.

Diagrama de memoria Flash en serie de ON Semiconductor LE25S161PCTXG

Figura 1: La memoria Flash serial del ON Semiconductor LE25S161PCTXG está disponible en un paquete UDFN de 8 pines con un espacio ultra pequeño de 3 x 4 milímetros (mm) y tiene las señales SPI habituales para la selección de reloj, datos y chip. (Fuente de la imagen: ON Semiconductor)

La forma más fácil de leer una tabla de búsqueda de dos columnas simple almacenada en este dispositivo es tomar la lectura del sensor, agregar una compensación de memoria y luego leer el contenido de la memoria en esa ubicación de la dirección. El contenido de la memoria en esa dirección representa la lectura corregida del sensor.

Un punto final de IoT de alto rendimiento requiere una velocidad de reloj rápida, un procesador de alto rendimiento y un SPI flexible. Para estas aplicaciones, STMicroelectronics proporciona la familia de microcontroladores STM32L4 de alto rendimiento. Por ejemplo, el microcontrolador STM32L496VG es un miembro de la familia de productos STM32L4 que funciona a 80 MHz y tiene un núcleo Arm® Cortex®-M4 con una unidad de punto flotante (FPU). Tiene hasta 8 Mbytes de Flash y 320 kilobytes (Kbytes) de SRAM. Admite una tensión de funcionamiento de 1.71 a 3,6 voltios, superpuesta a la de la tensión de funcionamiento del ON Semiconductor LE25S161PCTXG de 1.65 a 1.95 voltios.

El STM32L496VG tiene una gama completa de periféricos para un punto final de IoT de alto rendimiento que incluye un reloj de tiempo real (RTC) con calendario, tres ADC de 5 megasamples por segundo (MSPS), un convertidor de digital a analógico de dos canales (DAC), dos interfaces de red de área del controlador (CAN) y cuatro interfaces I2C (Figura 2). También tiene tres interfaces SPI estándar y una interfaz SPI cuádruple.

Diagrama del microcontrolador STMicroelectronics STM32L496 basado en un Arm Cortex-M4 de 80 MHz (haga clic para ampliar)

Figura 2: El microcontrolador STM32L496 se basa en un Arm Cortex-M4 de 80 MHz con FPU y tiene una gama completa de periféricos, incluida una interfaz SPI cuádruple de 40 MHz. (Fuente de la imagen: STMicroelectronics)

El desarrollo para el STM32L496VG es compatible con el tablero de descubrimiento STM32L496G-DISCO (Figura 3). Es una placa de desarrollo con todas las funciones para un punto final de IoT e incluye micrófonos de sistemas microelectromecánicos estéreo (MEMS), un conector para cámara de 8 bits, ocho LED, un joystick de cuatro direcciones y una pantalla LCD a color de 240 x 240 píxeles. Las entradas ADC, los pines SPI cuádruples y la mayoría de las E/S están disponibles en los pines del conector.

Imagen de la placa de descubrimiento STMicroelectronics STM32L496G-DISCO

Figura 3: El tablero de descubrimiento STM32L496G-DISCO es un entorno de evaluación completo para el desarrollo de hardware y firmware para el ST32L496VG. (Fuente de la imagen: STMicroelectronics)

El SPI cuádruple en el STM32L496VG admite un reloj de SPI máximo de 40 MHz y admite los modos SPI estándar y asignados en memoria. El SPI cuádruple admite el modo SPI doble, lo que permite transferencias de datos a un máximo de 80 Mbits/s.

El SPI cuádruple de STMicroelectronics proporciona una interfaz rápida para los dispositivos de memoria Flash de datos en serie. En el modo SPI estándar, todas las operaciones se realizan utilizando los registros SPI. Los datos se transfieren leyendo y escribiendo el registro de datos SPI. Cuando se reciben los datos, se genera una interrupción. Este es el mismo modo de operación de los tres SPI estándar en el STM32L496VG. El modo SPI estándar admite transferencias de datos simples, dobles y cuádruples. El ON Semiconductor LE25S161 admite modos SPI simples y dobles y puede interactuar fácilmente con el STM32L496VG en modo SPI dual (Figura 4).

Diagrama del puerto serial SPI cuádruple de STMicroelectronics STM32L496VG

Figura 4: El puerto serial SPI cuádruple STM32L496VG de STMicroelectronics puede interactuar con el ON Semiconductor LE25S161 en modo SPI dual, permitiendo transferencias bidireccionales de datos a lo largo de SIO0 y SIO1 con un SCLK de 40 MHz a 80 Mbits/s. (Fuente de la imagen: Digi-Key Electronics)

La implementación de una tabla de búsqueda de datos en esta situación se simplifica debido a la elección de los componentes del ON Semiconductor y STMicroelectronics, lo que resulta en una implementación directa. El SPI cuádruple también tiene un FIFO que es útil para las transferencias de datos en grandes volúmenes. Sin embargo, para una tabla de búsqueda donde solo se necesita acceder a una ubicación de memoria a la vez, se recomienda deshabilitar el FIFO, ya que no es necesario y puede agregar incluso un retraso innecesario.

Quad-SPI con modo mapeado en memoria

El SPI cuádruple también admite un modo mapeado de memoria. Esto mapea el Flash externo en serie ya sea en el espacio del programa del microcontrolador o de la memoria de datos. Esto permite que el firmware del microcontrolador acceda al Flash SPI externo como si fuera parte de la propia memoria del microcontrolador, lo que resulta en la operación del SPI cuádruple que es transparente para el firmware.

Si los accesos a la tabla de búsqueda se realizan con poca frecuencia, la implementación de una tabla de búsqueda con el modo de mapeo en memoria puede no tener ninguna ventaja significativa en comparación con el modo SPI estándar, más que simplificar el firmware de la aplicación. Sin embargo, si la aplicación es un entorno de interrupción frecuente, las transferencias SPI se pueden pausar repetidamente para encargarse de esto. Esto puede complicarse aún más si se interrumpe una operación de búsqueda de SPI cuádruple por otra.

Una combinación de accesos frecuentes a la tabla de búsqueda más un entorno de alta interrupción pueden hacer que el modo de mapeo en memoria sea más eficiente en comparación con el modo SPI estándar. Simplifica el firmware, evita problemas debidos a los accesos SPI cuádruples de diferentes prioridades simultáneos y reduce los conflictos de interrupción.

Sin embargo, una desventaja de implementar una tabla de búsqueda mapeada en memoria es la posibilidad de contaminar el caché de datos. Si bien el STM32L496 no tiene un caché de datos, algunos microcontroladores que se dirigen a aplicaciones de alto rendimiento en tiempo real sí lo tienen. El acceso a la tabla de búsqueda probablemente dará como resultado una falta de caché. Esto se debe a que para la mayoría de las aplicaciones hay una posibilidad muy baja de necesitar acceder a la misma ubicación de la tabla de búsqueda dos veces en el mismo subproceso o subrutina. Por lo tanto, los datos de la tabla de búsqueda no se almacenan inicialmente en caché, y el almacenamiento en caché de los datos puede hacer que se eliminen datos importantes de la caché de datos. Si bien esto solo es un problema en aplicaciones de rendimiento extremadamente alto, son estas aplicaciones de alto rendimiento las que requieren un caché de datos en primer lugar.

Las soluciones para la contaminación de caché de datos con una tabla de búsqueda son limitadas. Si el hardware lo permite, el área de la tabla de búsqueda se puede marcar como no almacenable en caché. Otra solución es deshabilitar y luego volver a habilitar el caché de datos antes y después de acceder a la tabla de búsqueda. Esto puede ser aceptable si el impacto de rendimiento de activar y desactivar el caché es aceptable. Algunos cachés de datos admiten instrucciones de control de caché específicas de la arquitectura que pueden brindar soporte para prevenir la contaminación de caché. Es importante comparar el rendimiento del sistema con una referencia al configurar el caché de datos para encontrar el mejor método para una aplicación específica.

El Flash en serie debe colocarse en la placa de CI de manera que ningún tramo sea de más de 120 milímetros (mm). Para evitar interferencias, la ruta de la señal del reloj SPI debe estar alejada de otras señales por una distancia de al menos tres veces el ancho de los trazados de la placa de CI. Las dos señales de datos bidireccionales deben estar a una distancia de 10 mm entre sí para evitar sesgos.

Conclusión

Un dispositivo Flash con SPI externo puede ser una solución eficiente para implementar tablas de búsqueda de datos grandes en un punto final de IoT. Es fácil de reprogramar en el sistema, es fácil de actualizar y utiliza mínimos recursos de microcontroladores.

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 Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Información sobre el autor

Bill Giovino

Bill Giovino es ingeniero electrónico con un BSEE de la universidad de Syracuse y es uno de los pocos profesionales capaz de pasar de ingeniería en diseño a ingeniería de aplicación en campo a marketing tecnológico de forma exitosa.

Durante más de 25 años, Bill ha disfrutado promocionar las nuevas tecnologías a audiencias técnicas y no técnicas por igual en muchas empresas, entre ellas STMicroelectronics, Intel y Maxim Integrated. Mientras trabajó en STMicroelectronics, Bill ayudó a dirigir los primeros éxitos de la empresa en la industria de microcontroladores. En Infineon, Bill estuvo a cargo de que el diseño del primer controlador de la empresa tuviera éxito en la industria automotriz de EE. UU. Como consultor de marketing para CPU Technologies, Bill ha ayudado a muchas empresas a convertir sus productos con bajo rendimiento en casos de éxito.

Bill fue uno de los primeros en adoptar el Internet de las cosas, incluso colocar la primera pila de TCP/IP en un microcontrolador. Bill es un ferviente creyente de "Vender a través de la educación" y de la gran importancia de contar con comunicaciones claras y bien escritas a la hora de promocionar productos en línea. Es moderador del grupo en Linkedin denominado Semiconductor Sales & Marketing (Marketing y ventas de semiconductores) y habla sobre el concepto B2E (empresa-empleado) de manera fluida.

Información sobre la editorial

Editores de Digi-Key de América del Norte