¿Cómo se organiza el firmware moderno?
Comenzar arrow_downwardEl hardware es complejo y cambia constantemente. Las capas de abstracción permiten escribir código portable y mantenible.
Código atado a direcciones de memoria específicas del chip. Imposible de portar.
Todo el código debe reescribirse si cambias de fabricante o de modelo de chip.
Sin capas, es imposible hacer tests unitarios o simular el hardware.
Una función como gpio_pin_toggle() funciona igual en cualquier chip soportado.
Cambiar de Nordic a STM32 solo requiere cambiar la configuración, no el código.
Las capas permiten crear mocks y ejecutar tests en el ordenador sin hardware.
Haz clic en cada capa para ver qué contiene y su función en el sistema.
Aquí escribes la lógica de tu aplicación. Son los threads que defines tú: leer sensores, procesar datos, controlar actuadores.
Módulos complejos que implementan protocolos y funcionalidades completas. No tocas los detalles, solo usas sus APIs.
El kernel de Zephyr gestiona los threads, el scheduler de prioridades, la comunicación entre procesos (IPC) y la sincronización.
APIs de alto nivel para interactuar con periféricos. Abstraen los detalles del hardware y proporcionan una interfaz consistente.
gpio_pin_set()
- Control GPIO
i2c_write()
- Comunicación I2C
spi_transceive()
- Bus SPI
uart_tx()
- Puerto serie
Capa que envuelve el acceso directo a registros del hardware. Proporciona funciones básicas que los drivers usan internamente.
El microcontrolador real con sus periféricos integrados. Es lo que está en la placa de desarrollo.
Veamos qué sucede cuando llamas a gpio_pin_toggle() desde tu aplicación.
DeviceTree separa la descripción del hardware del código. Así tu código C no tiene direcciones ni configuraciones específicas.
Un formato de datos que describe el hardware de tu sistema: qué periféricos tiene, en qué direcciones están, cómo están conectados.
.dts (source) y .dtsi (includes)
Tu código C usa nombres simbólicos como &led0 en lugar de direcciones como 0x50000508. Si cambias de placa, solo cambias el DeviceTree.
Kconfig permite activar o desactivar funcionalidades en tiempo de compilación. Solo se incluye lo que necesitas.
Sistema heredado del kernel Linux que permite configurar opciones de compilación de forma estructurada y con dependencias.
prj.conf en tu proyecto
autoconf.h con #define
La configuración se resuelve al compilar. El binario solo incluye código necesario.
Menos código = menos Flash y RAM. Ideal para microcontroladores con recursos limitados.
Las capas de abstracción no son complejidad innecesaria. Son la base del desarrollo profesional de firmware.
Tu aplicación funciona en Nordic, STM32, ESP32 u otros con cambios mínimos. Solo cambias la configuración de placa.
Puedes crear mocks de las capas inferiores y ejecutar tests unitarios en tu ordenador sin hardware físico.
Cada capa tiene una responsabilidad clara. Los cambios en una capa no afectan a las demás si la interfaz se mantiene.
Diferentes desarrolladores pueden trabajar en distintas capas simultáneamente sin pisarse el código.
Las capas de abstracción permiten aislar código seguro del no seguro (TrustZone, secure boot).
Es la forma en que se desarrolla firmware en la industria. Este conocimiento es directamente aplicable en empresas.
Las herramientas clave del ecosistema Zephyr y cuándo se utilizan.
| Herramienta | Propósito | Archivo típico | Cuándo se procesa |
|---|---|---|---|
| DeviceTree | Describe el hardware | .dts, .dtsi, .overlay | Tiempo de compilación |
| Kconfig | Configura el software | prj.conf, Kconfig | Tiempo de compilación |
| CMake | Sistema de build | CMakeLists.txt | Tiempo de compilación |
| Código C | Lógica de aplicación | main.c, *.c, *.h | Tiempo de ejecución |
El firmware moderno se organiza en capas: Hardware, HAL, Drivers, Kernel, Subsistemas y Aplicación.
DeviceTree describe el hardware, Kconfig configura el software. Ambos se procesan en tiempo de compilación.
Portabilidad, testabilidad, mantenibilidad y código profesional. Es como se trabaja en la industria.
"Escribe código para la capa de aplicación, deja que Zephyr gestione el resto"
Las capas de abstracción te permiten concentrarte en la lógica de tu aplicación sin preocuparte por los detalles del hardware.
Has completado los fundamentos. En la Parte 1 comenzaremos a trabajar con el SDK de Nordic: instalación, estructura de proyectos y tu primer programa.