Diseño de software embebido – lo básico que debe conocer

Mire a su alrededor, es casi seguro que está rodeado por unos 3 a 6 dispositivos electrónicos, todos para su buen funcionamiento emplean por lo menos un software embebido.

No es de sorprender, según cifras de Statista, en 2022 se estimaron unos 15.960 millones de dispositivos electrónicos móviles en el mundo (sin contar aquellos que no son de fácil acarreo), todos necesitan de un software para su funcionalidad.

Y es que uno de los componentes más importantes de todo dispositivo electrónico moderno es su software, aquel que se encuentra contenido dentro del dispositivo y que recibe el nombre de firmware o software embebido.

Este debe alinearse correctamente con el diseño de hardware (electrónico, mecánico y estético) y considerarse en todo el ciclo de desarrollo del prototipo.

En esta entrega se abordan algunos de los conceptos fundamentales en el diseño del software embebido de un dispositivo electrónico, sus principales fases y los aspectos claves a tener en cuenta.

¿Sabe qué comprende el desarrollo en la electrónica?

Aquí una revisión de los fundamentos del desarrollo tecnológico en la industria electrónica

¿Qué es el software embebido?

El software embebido está presente en muchos aspectos de la vida cotidiana. Desde electrodomésticos, dispositivos móviles y juguetes; hasta vehículos y aeronaves, en todos ellos encontramos dispositivos programables que ejecutan un software, el cual, define las funcionalidades del sistema.

Thales Group define al software embebido como el software de cómputo creado específicamente para máquinas, que generalmente no consideramos computadoras, pero que usan software para poder operar.

A estas máquinas, que están diseñadas para ejecutar un conjunto de funciones específicas y orientadas a una aplicación en particular, se les conoce como sistemas embebidos.

Los ejemplos abundan en la cotidianidad: El módem o enrutador de internet de la casa, una cámara digital, unos audífonos Bluetooth, una aspiradora robot, la tarjeta controladora del motor de un vehículo, cualquier dispositivo de memoria flash o pendrive.

El reconocido fabricante de software y dispositivos de seguridad Fortinet, presenta una definición similar, al argumentar que software embebido es:

“Cualquier microcódigo o programa incrustado en dispositivos de hardware para ayudarlos a operar de manera efectiva”.

Dicho “microcódigo” se puede ejecutar sobre un microcontrolador o sobre un microprocesador. A continuación, más detalles.

¿Sobre qué hardware corre el software embebido?

El software embebido o firmware, puede ser ejecutado por un microcontrolador o por un microprocesador.

La diferencia principal entre estos dos radica en que el microcontrolador combina un microprocesador, memoria y periféricos en un solo encapsulado, por lo cual, normalmente tiene una capacidad de cómputo reducida.

El microprocesador por su parte, por lo general se conecta a bloques de memoria y periféricos externos, como sucede en el computador personal, tablet o smartphone que usamos a diario. Esto permite que pueda incorporarse mayor poder de procesamiento en su interior.

La Figura 1 presenta esta información de una manera gráfica.
Microprocesador

Figura 1. Ejemplo de diferencia entre microcontrolador y microprocesador. Fuente: Cidei.

ELE Times considera estos dos términos como “el alma y el núcleo de la electrónica programable” argumentando que el microcontrolador suele emplear un sistema más compacto y eficiente, pero con menos poder informático que el microprocesador. Por ello, la práctica estándar es encontrar a los microprocesadores en ordenadores personales y los microcontroladores en artefactos como lavadoras, aires acondicionados o enrutadores.

En una próxima entrega se revisarán más en detalle las diferencias entre estos dos tipos de dispositivos programables y se examinarán sus aplicaciones.

5 de los mejores softwares gratuitos para el diseño de placas de circuito impreso (PCB).

La Identificación de requerimientos en el diseño de software embebido

Dentro del ciclo de desarrollo y prototipado de productos electrónicos, la fase de identificación de requerimientos cubre todos los aspectos funcionales y no funcionales del dispositivo o sistema.

Los aspectos funcionales se refieren a las tareas que debe realizar el dispositivo o sistema, mientras que los no funcionales se refieren a aspectos estéticos, de seguridad, normatividad, entre otros aspectos de igual importancia pero que son independientes de las tareas o funcionalidades a ejecutar.

La identificación de requerimientos de software embebido o firmware, abarca entonces no solo la funcionalidad, sino también el flujo de los datos, las restricciones de tiempo y energía, y los aspectos de seguridad, entre otros.

Estos son algunos requerimientos y restricciones que deben tenerse presentes en todo proyecto de diseño de software embebido:

Funcionalidades del sistema

Este componente del proceso de diseño describe el comportamiento que tendrá el sistema, las funciones que ejecutará, sus entradas y salidas, casos de uso y casos de error.

Considerando que el software embebido es el responsable de la correcta operatividad del hardware o dispositivo, la firma Sirin Software recomienda tener presente los siguientes aspectos funcionales:

  1. Según las funcionalidades del hardware, ¿Qué tan complejos deben ser los algoritmos subyacentes?
  2. Definir requerimientos de arquitectura, teniendo en cuenta los propósitos, usos, tamaño y estética del dispositivo
  3. ¿Cuánto esfuerzo y capacidades técnicas especializadas tomará desarrollar el código fuente?
  4. ¿Qué tanta actualización o reemplazo serán necesarios en el futuro y en cuánto tiempo?

5. ¿A lo largo del desarrollo del dispositivo, se contará con el soporte del proveedor del firmware?

El flujo de los datos

En el diseño de sistemas embebidos el flujo de datos es un aspecto crucial. A tal punto que una buena práctica para definir las funcionalidades del sistema es a través de su flujo de datos, desde las entradas, pasando por los algoritmos que las procesan, hasta las salidas que se generan con base en las decisiones que el sistema debe tomar.

El flujo de datos se correlaciona con la complejidad o naturaleza del hardware. Con base en sus demandas, puede ir desde un firmware desnudo, pasando por un sistema operativo totalmente integrado y funcional, hasta un entorno virtual a nivel de aplicación mucho más abstracto. 

Restricciones de tiempo de funcionamiento y energía

Los sistemas embebidos se usan para aplicaciones específicas, las cuales suelen tener restricciones en cuanto al tiempo de ejecución de sus funcionalidades o tareas.

Además, con el auge del Internet de las cosas (IoT) se ha hecho común que existan restricciones de consumo de energía, particularmente cuando se trata de dispositivos alimentados por baterías.

La seguridad

Noticias como el jaqueo de monitores de bebés a través de enrutadores o módems inalámbricos, o prácticas como la ejecución de un ransomware (software extorsivo) vía dispositivos IoT (RoT), son claros recordatorios que la seguridad en el sistema embebido no es opcional.

Exhaustivamente, se deben definir requerimientos de seguridad como protecciones a la memoria del microcontrolador, conexiones seguras de red, encriptación de datos, VPN integrado, entre otras, de acuerdo con el nivel de rigurosidad de la aplicación o usos del dispositivo.

Diseño en bloques de software embebido

Similar al diseño en bloques de hardware, una vez levantados los requerimientos para el software embebido se definen los bloques e interfaces que lo componen.

Este diseño permite visualizar de mejor forma las conexiones, módulos y flujos de datos del sistema.

En la Figura 2 se presenta un ejemplo de un diagrama de bloques de software embebido.
Software embebido

Figura 2. Ejemplo básico de diagrama de bloques de software embebido. Fuente: Cidei.

En el esquema es posible apreciar que:

1) Los datos ingresan por un periférico llamado convertidor analógico/digital (ADC).

2) Se leen mediante un bloque específico para el tipo de sensor.

3) Luego se filtran y se pasan al bloque principal de procesamiento, cuya ejecución está sincronizada por un temporizador.

4) Finalmente, se genera la salida del sistema a través del periférico PWM (modulación por ancho de pulsos) que es activado por un bloque de control.

Los requerimientos funcionales y el diseño en bloques de los firmwares hacen recordar que las alianzas son una buena opción

Aquí 5 ventajas de la tercerización del diseño y prototipado de productos electrónicos

Selección del procesador en diseño de software embebido

Para hacer un símil con una situación que permita comprender un error típico de este aspecto del diseño de software embebido, pensemos en un trabajador de logística y transporte, a quien le piden enviar una carga con un contenido, del cual, no conoce aún sus características y tamaño.

Siendo cauto y teniendo en cuenta otras cargas que le han pedido gestionar, tan pronto recibe la tarea, busca un camión con capacidad de una tonelada y controles de temperatura en su espacio de carga.

Luego de que contrata el camión, se le ocurre preguntar por las características detalladas de la carga que debe enviar y resulta que es una pequeña caja con cinco pares de zapatos.

Claramente puede enviarla en el camión, pero estará sobredimensionado para la tarea, y su costo será mayor que si se hubiera transportado en un automóvil o en una moto.

En el desarrollo de un dispositivo electrónico que requiere de un software embebido, es común encontrar casos similares, en los que primero se selecciona el procesador y luego se diseña el sistema, lo que conlleva ineficiencias, costos elevados y reprocesos.

Es importante que primero se tenga claridad de los requerimientos y especificaciones, de tal modo que el desarrollo esté acorde con la necesidad que se desea resolver.

¿Microprocesador o microcontrolador? Estos son algunos puntos de atención

Entre las principales características que se deben tener en cuenta para la selección del microprocesador o microcontrolador se encuentran las siguientes:

  • Almacenamiento: memoria flash interna o almacenamiento externo.
  • Random Access Memory (RAM): prever la disponibilidad de memoria para almacenamiento temporal de datos según sea el flujo.
  • Velocidad de núcleo: según la cantidad de tareas a atender con el microcontrolador o microprocesador.
  • Periféricos: periféricos de entrada analógicos, digitales, puertos de comunicación, temporizadores, entre otros.
  • Costo: relacionado directamente con la arquitectura del dispositivo para responder a los requerimientos funcionales.
  • Requerimientos de actualización y soporte de parte del desarrollador.
  • Documentación o herramientas disponibles.

Estas características relacionadas con los requerimientos del sistema, sumadas al conocimiento y claridad sobre la etapa del ciclo de desarrollo en la cual se encuentra el producto (concepto, prototipo funciona, prototipo pre-comercial, etc.), permitirán determinar si la opción más adecuada es:

1) Un microcontrolador PIC de 8 bits o un microcontrolador ARM de 32 bits.

2) Un SoC (System on a Chip) que integre microcontrolador y comunicación inalámbrica como el ESP32.

3) Un microprocesador como el que se encuentra en una Raspberry Pi.

4) Una placa tipo Arduino para prototipado rápido.

Al respecto, Predictable Design alude que si ha sido posible crear un prototipo de prueba de concepto (PoC) para un producto con un Arduino, es muy probable que un microcontrolador sea la opción correcta para la producción.

En el caso de desarrollos PoC en Raspberry Pi, la elección no es tan simple y normalmente se termina por incorporar en el producto final la propia Raspberry o su versión tipo Compute Module. En nuestro Ebook gratuito titulado Cinco casos de éxito de productos comerciales basados en sistemas embebidos de bajo costo hablamos de este enfoque.

En prototipado electrónico, como en cualquier desarrollo, el manejo de las herramientas adecuadas es clave

Conozca 7 herramientas clave para el diseño de productos electrónicos

La selección del entorno de desarrollo

Finalmente, una vez se han analizado los requerimientos de funcionalidad, se tiene un diagrama de bloques de firmware y se ha decidido el procesador a utilizar, se debe disponer del entorno de desarrollo adecuado.

Estos entornos, también conocidos como IDE por sus siglas en inglés (Integrated Development Environment), cuentan con diversas características que pueden facilitar el proceso y reducir el tiempo de desarrollo.

Entre los entornos más conocidos se encuentran:

  • Microchip MPLAB: específico para microcontroladores del fabricante Microchip.
  • Arduino: el entorno más comúnmente usado para las tarjetas de desarrollo Arduino, independientemente de la arquitectura de su microcontrolador.
  • PlatformIO: entorno compatible con tarjetas Arduino y muchas otras tarjetas de desarrollo, al integrarlo con VS Code se consigue un entorno muy potente y fácil de usar.
  • Keil uVision: especializado en microcontroladores de núcleo ARM de diversidad de fabricantes.
  • Eclipse: entorno libre que puede integrarse con kits de desarrollo de software (SDK por sus siglas en inglés) de diversos fabricantes, apto para Windows y Linux.

Electronic Design ofrece una interesante reseña sobre 11 de los más populares entornos IDE empleados en el diseño de software embebido (información en inglés).

Lo básico en diseño de software embebido - Conclusión

El proceso de diseño de software embebido es parte importante en el ciclo de prototipado de dispositivos electrónicos digitales. En la actualidad, es casi imposible concebir un producto electrónico que no requiera de un software embebido para su funcionamiento.

Los elementos mencionados en este artículo son sólo los fundamentos y los pasos iniciales, lo que hay que resolver antes de pensar en programar.

En una próxima entrega hablaremos de metodologías y herramientas de diseño, las cuales toman como base los requerimientos y el diagrama de bloques, y dan paso al diseño detallado y programación.

En Cidei facilitamos y damos acompañamiento experto en todas las etapas del desarrollo de productos electrónicos, reduciendo la curva de aprendizaje y acelerando lanzamientos.

Si quiere conocer más acerca de las herramientas para el diseño y prototipado de producto electrónico, suscríbase a nuestro blog.

Si desea estudiar a fondo alguna tecnología en particular, consulte por nuestros servicios de vigilancia e inteligencia competitiva, o si está listo para apropiar tecnologías emergentes y agregar valor a sus productos y servicios, agende una cita de diseño y prototipado de producto electrónico.

¡Cidei transformando conocimiento en desarrollo!