Por qué y cómo empezar con los microcontroladores multinúcleo para dispositivos de IoT en el borde

Por Jacob Beningo

Colaboración de Editores de DigiKey de América del Norte

Se está pidiendo a los desarrolladores de dispositivos de Internet de las cosas (IoT) que se encuentran en el límite que incorporen una gama de funciones cada vez más diversa y de procesamiento intensivo, desde comunicaciones y sensores de muestreo hasta la ejecución de inferencias de aprendizaje automático (ML). Al mismo tiempo, se pide a los desarrolladores que mantengan o reduzcan el consumo de energía. Lo que se necesita es un enfoque arquitectónico más flexible para un elemento central de su diseño -el microcontrolador- que permita a los desarrolladores añadir características mientras logran el equilibrio óptimo de rendimiento, funcionalidad y consumo de energía.

Este enfoque arquitectónico viene en forma de microcontroladores multinúcleo. Estos tienen, como su nombre lo sugiere, múltiples núcleos de procesamiento en un solo paquete. Sin embargo, solo tirar más núcleos al problema no resolverá los problemas. Los desarrolladores necesitan entender las diferencias entre los procesadores multinúcleo simétricos y asimétricos, cómo enfocar la partición funcional y cómo programarlos de manera efectiva.

En este artículo se introducirá el concepto de microcontroladores multinúcleo antes de analizar cómo los desarrolladores pueden aprovechar los microcontroladores multinúcleo para equilibrar el rendimiento y las limitaciones de energía. A modo de ejemplo, se introducirán varios microcontroladores multinúcleo de la línea STM32H7 de STMicroelectronics. En el artículo también se examinarán varios casos de uso en los que los desarrolladores pueden aprovechar el procesamiento de múltiples núcleos y dividir la carga de trabajo entre varios núcleos.

Introducción a los microcontroladores multinúcleo

Como se ha mencionado, los microcontroladores multinúcleo tienen más de un núcleo de procesamiento. Hay dos tipos de configuraciones que se utilizan a menudo, el procesamiento simétrico y el asimétrico. Las configuraciones simétricas de los núcleos contienen dos o más de los mismos núcleos de procesamiento. Por ejemplo, ambos podrían ser procesadores Arm® Cortex®-M4. Los núcleos asimétricos, por otro lado, pueden contener un procesador Arm Cortex-M7 y un procesador Arm Cortex-M4. También podrían contener un procesador Arm Cortex-M4 y un procesador Arm Cortex-M0+. Las combinaciones son muchas y dependen de la aplicación y los requisitos de diseño.

Los desarrolladores de IoT están interesados en los microcontroladores multinúcleo porque les permiten separar su aplicación en múltiples dominios de ejecución. Los dominios de ejecución separados permiten un control preciso del rendimiento, las características y las necesidades de potencia de la aplicación. Por ejemplo, un núcleo puede utilizarse para interactuar con un usuario a través de una pantalla de alta resolución y un panel táctil, mientras que el segundo núcleo se utiliza para gestionar los requisitos del sistema en tiempo real, como el control de un motor, relés y sensores de muestreo.

Hay muchas maneras en que un desarrollador puede dividir su aplicación, pero los dos mayores paradigmas son separar la aplicación en:

  • Característica rica/en tiempo real
  • En tiempo real/seguro

En el primer paradigma, de características ricas/en tiempo real, el sistema es exactamente como el descrito en el párrafo anterior. Los componentes de la aplicación, como la pantalla, las inferencias de ML, la reproducción de audio y el almacenamiento de memoria, entre otros, son manejados por un solo núcleo. El segundo núcleo se encarga entonces de las funciones en tiempo real, como el control motor, la detección y las pilas de comunicación (Figura 1).

Diagrama del paradigma de características ricas/en tiempo realFigura 1: Un paradigma para el diseño de aplicaciones con microcontroladores multinúcleo es colocar los componentes de aplicación ricos en características en un núcleo y los componentes en tiempo real en el segundo núcleo. (Fuente de la imagen: STMicroelectronics)

El segundo paradigma separa la aplicación en tiempo real y la funcionalidad segura. En el primer núcleo, la aplicación puede manejar cosas como la pantalla, el acceso a la memoria y la reproducción de audio en tiempo real. El segundo núcleo, por otra parte, no puede hacer nada más que actuar como procesador de seguridad. Como tal, el segundo núcleo se encargaría del almacenamiento de datos críticos como las claves de dispositivos y de red, manejaría la encriptación, el cargador de arranque seguro y cualquier otra característica que se considere que entra dentro de la categoría de software seguro (Figura 2).

Diagrama de colocación de los componentes de la aplicación en tiempo real en un núcleoFigura 2: Otro paradigma para el diseño de aplicaciones con microcontroladores multinúcleo es colocar los componentes de la aplicación en tiempo real en un núcleo y todos los componentes de seguridad en un segundo núcleo. (Fuente de la imagen: STMicroelectronics)

Hay otras maneras potenciales de analizar el espacio de aplicación de un microcontrolador multinúcleo, pero estos dos paradigmas parecen ser los más populares entre los desarrolladores de IoT.

Seleccionando una placa de desarrollo de microcontroladores multinúcleo

Aunque los microcontroladores multinúcleo se están volviendo muy populares, todavía no son muy comunes y seleccionar uno puede ser difícil. Para un desarrollador que busca trabajar con microcontroladores multinúcleo, lo mejor es seleccionar un tablero de desarrollo que tenga las siguientes características:

  • Incluye una pantalla LCD para la exploración de aplicaciones con muchas funciones
  • E/S de expansión
  • Es de bajo costo
  • Tiene un ecosistema bien probado detrás, incluyendo un código de ejemplo, foros comunitarios y acceso a FAE bien informados

Veamos varios ejemplos de STMicroelectronics, empezando por el STM32H745I-DISCO (Figura 3). Esta placa se basa en el microcontrolador de doble núcleo STM32H745ZIT6 que comprende un núcleo Arm Cortex-M7 que funciona a 480 megahercios (MHz) y un segundo procesador Arm Cortex-M4 que funciona a 240 MHz. La pieza incluye una unidad de punto flotante de doble precisión y un caché L1 con 16 kilobytes (Kbytes) de datos y 16 Kbytes de caché de instrucciones. El tablero de descubrimiento es particularmente interesante porque incluye capacidades adicionales como:

  • Un códec de audio SAI
  • Un micrófono de sistemas microelectromecánicos (MEMS)
  • Flash del QUAD SPI a bordo
  • 4 gigabytes (Gbyte) eMMC
  • Expansión de la placa madre
  • Ethernet
  • Cabezales para audio y auriculares

El tablero de desarrollo tiene muchas capacidades incorporadas que hacen extremadamente fácil comenzar a experimentar con microcontroladores multinúcleo y realmente ampliar una aplicación.

Imagen de la placa STM32H745I-DISCO de STMicroelectronicsFigura 3: La placa STM32H745I-DISCO integra una amplia gama de sensores a bordo y capacidades de memoria que permiten a los desarrolladores probar los microcontroladores de doble núcleo que funcionan a 480 MHz y 240 MHz. (Fuente de la imagen: STMicroelectronics)

Para los desarrolladores que buscan una placa de desarrollo que tenga capacidades adicionales y mucha más expansión de E/S, el STM32H757I-EVAL puede ser un mejor ajuste (Figura 4). El STM32H757I-EVAL incluye capacidades adicionales sobre el tablero de evaluación como:

  • SRAM 8 M x 32-bit
  • Flash SPI NOR doble cuádruple de 1 Gbit
  • Macrocélula de rastreo incorporada (ETM) para el rastreo de instrucciones
  • Potenciómetro
  • LED
  • Botones (tamper, joystick, despertador)

Estas capacidades adicionales, especialmente la expansión de E/S, pueden ser extremadamente útiles para los desarrolladores que buscan empezar.

Imagen de la placa de STM32H757I-EVAL STMicroelectronicsFigura 4: La placa STM32H757I-EVAL proporciona a los desarrolladores mucho espacio de expansión, fácil acceso a los periféricos y una pantalla LCD para iniciarse en las aplicaciones multinúcleo. (Fuente de la imagen: STMicroelectronics)

Después de haber mirado varios tableros de desarrollo, el siguiente paso es esbozar algunas recomendaciones para empezar con una aplicación de microcontrolador multinúcleo.

Cómo iniciar esa primera aplicación multinúcleo

Independientemente de cuál de las dos placas de desarrollo de STM32H7 se seleccione, hay dos herramientas principales que se necesitan para empezar. El primero es STM32CubeIDE de STMicroelectronics, un entorno de desarrollo integrado (IDE) libre que permite a los desarrolladores compilar el código de su aplicación y desplegarlo en la placa de desarrollo. STM32CubeIDE también proporciona los recursos necesarios para pasar y depurar una aplicación, y está disponible para los principales sistemas operativos, incluyendo Windows, Linux y MacOS.

La segunda herramienta es el paquete de firmware STM32H7 de STMicroelectronics. Esto incluye ejemplos de las placas de desarrollo STM32H7 para:

  • Procesamiento multinúcleo
  • Usando FreeRTOS
  • Controladores periféricos
  • FatFS (sistema de archivos)

Los desarrolladores querrán descargar el paquete de aplicaciones de firmware y familiarizarse con los ejemplos que apoya la junta de desarrollo elegida. Específicamente, hay dos carpetas a las que los desarrolladores querrán prestar atención. La primera es la carpeta de aplicaciones que tiene dos ejemplos que muestran cómo usar OpenAMP (Figura 5). Estos ejemplos muestran cómo transmitir datos de ida y vuelta entre los núcleos del microcontrolador, donde un núcleo envía datos al otro núcleo, que a su vez los retransmite al primer núcleo. Ambos ejemplos realizan esto de una manera diferente. Uno es baremetal, sin sistema operativo, mientras que el otro es con FreeRTOS.

Imagen de OpenAMP STM32Cube_FW_H7Figura 5: El STM32Cube_FW_H7 proporciona varios ejemplos que demuestran cómo comenzar con el procesamiento de múltiples núcleos utilizando OpenAMP. (Fuente de la imagen: Beningo Embedded Group)

El segundo conjunto de ejemplos demuestra cómo configurar ambos núcleos con y sin un RTOS (Figura 6). Un ejemplo muestra cómo ejecutar FreeRTOS en cada núcleo, mientras que el otro muestra cómo usar un RTOS en un núcleo y ejecutar el baremetal del segundo núcleo. Hay varios otros ejemplos a lo largo del paquete de firmware que demuestran otras capacidades, pero estas son buenas opciones para empezar.

La imagen del STM32Cube_FW_H7 proporciona varios ejemplosFigura 6: El STM32Cube_FW_H7 proporciona varios ejemplos que demuestran cómo configurar un sistema operativo con procesadores multinúcleo. (Fuente de la imagen: Beningo Embedded Group)

Al cargar un proyecto de ejemplo, el promotor verá un diseño de proyecto similar al que se muestra en la figura 7. Como se ilustra, el proyecto se divide en código de aplicación para cada núcleo. La configuración de construcción también puede ser configurada de tal manera que un desarrollador trabaje con un solo núcleo a la vez. Esto puede verse en la figura 7, a través de los archivos en gris.

Imagen del ejemplo del proyecto de ping-pong de OpenAMPFigura 7: Un ejemplo de proyecto de ping-pong de OpenAMP demuestra a los desarrolladores cómo crear un canal de comunicación entre los dos núcleos de la CPU. (Fuente de la imagen: Beningo Embedded Group)

Una descripción completa del código de ejemplo está fuera del alcance de este artículo, pero el lector puede examinar el archivo readme.txt que está asociado con cualquiera de los ejemplos para obtener una descripción detallada de cómo funciona, y luego examinar el código fuente para ver cómo se realiza realmente la comunicación entre procesadores (IPC).

Consejos y trucos para trabajar con microcontroladores multinúcleo

Iniciarse en el uso de microcontroladores multinúcleo no es difícil, pero requiere que los desarrolladores empiecen a pensar en el diseño de su aplicación de manera un poco diferente. Aquí hay algunos "consejos y trucos" para empezar con los microcontroladores multinúcleo:

  • Evaluar cuidadosamente la aplicación para determinar qué separación de dominio de aplicación tiene más sentido. Es posible mezclar dominios en un solo procesador, pero el rendimiento puede verse afectado si no se hace con cuidado.
  • Tómese el tiempo necesario para explorar las capacidades que están incorporadas en el marco de OpenAMP y cómo esas capacidades pueden ser aprovechadas por la aplicación.
  • Descargue los ejemplos de aplicación para los procesadores STM32H7 y ejecute los ejemplos de aplicación multinúcleo para la junta de desarrollo seleccionada. El H747 incluye dos: uno para FreeRTOS y otro para OpenAMP.
  • Cuando depure una aplicación, no olvide que ahora hay dos núcleos funcionando. Asegúrese de seleccionar el hilo correcto dentro del entorno de depuración para examinar su historial de llamadas.
  • Aprovechar los recursos de hardware internos, como un semáforo de hardware, para sincronizar la ejecución de la aplicación en los núcleos.

Los desarrolladores que empiezan con un tablero de desarrollo bien apoyado y luego siguen estos "consejos y trucos" encontrarán que ahorran bastante tiempo y dolor al trabajar con microcontroladores multinúcleo por primera vez.

Conclusión

Para los desarrolladores de sistemas de IoT en el borde de la red, los microcontroladores multinúcleo proporcionan la capacidad de ajustar y equilibrar mejor la funcionalidad, el rendimiento y el consumo de energía según los requisitos de la aplicación. Esos microcontroladores permiten a un desarrollador dividir su aplicación en dominios como el procesamiento de características ricas/en tiempo real o en tiempo real/seguro. Esta capacidad de separar una aplicación en diferentes dominios permite a un desarrollador deshabilitar un núcleo para conservar la energía cuando el dominio de procesamiento ya no es necesario o encenderlo para mejorar el rendimiento de la aplicación.

Como se muestra, hay varias tarjetas de desarrollo diferentes que pueden utilizarse para empezar a explorar el diseño de aplicaciones de microcontroladores multinúcleo y tomar el control total de su rendimiento y perfil de energía.

DigiKey logo

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.

Acerca de este autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo es un consultor de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente sus negocios mejorando la calidad del producto, el costo y el tiempo de comercialización. Ha publicado más de 200 artículos sobre técnicas de desarrollo de software embebido, es un conferenciante y entrenador técnico muy solicitado y tiene tres títulos que incluyen una Maestría en Ingeniería de la Universidad de Michigan. No dude en ponerse en contacto con él en jacob@beningo.com, en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes Newsletter.

Acerca de este editor

Editores de DigiKey de América del Norte