¿Qué es DFU?
July 29, 2026 · – visitantes
Si alguna vez conectaste una placa embebida a tu computadora y la viste enumerarse como un extraño dispositivo USB sin driver, hay buenas probabilidades de que estuviera en modo DFU — Device Firmware Update.
Lo que realmente es DFU
DFU es una clase de dispositivo USB definida por el USB Implementers Forum, pensada originalmente para actualizar el firmware de periféricos USB sin necesidad de herramientas específicas del producto. Un dispositivo que la soporta expone una interfaz pequeña y estandarizada: una herramienta del lado del host puede consultarlo, enviarle una nueva imagen de firmware y provocar un reinicio hacia el nuevo código, todo a través del mismo cable USB que se usa para todo lo demás.
En placas embebidas, el "modo DFU" normalmente significa que el propio bootloader (U-Boot, por ejemplo) está ejecutando una pila DFU mínima en lugar de arrancar Linux. La placa aparece en el host como un dispositivo USB de clase DFU, y una herramienta como dfu-util puede listar los objetivos flasheables (particiones, regiones de memoria, lo que sea que el bootloader decida exponer) y escribir directamente en ellos.
Por qué importa
Hay varias cosas que hacen que DFU sea genuinamente útil en el desarrollo embebido y en producción:
- Sin hardware adicional. Nada de sonda JTAG ni adaptador UART: solo el puerto USB que la placa ya tiene.
- Recuperabilidad. Si una placa está "brickeada" o no tiene un sistema operativo válido en la flash, el modo DFU (a menudo activado por un pin de strapping o por un fallback de la boot ROM) suele ser la última línea de defensa para volver a dejarla flasheable.
- Estandarización. Al ser una clase USB real con drivers reales, funciona igual en distintos sistemas operativos sin necesidad de un driver de kernel específico del fabricante.
Vale la pena contrastar DFU con mecanismos afines con los que te vas a topar en las mismas placas: fastboot (el protocolo de Android, con un objetivo similar pero un formato de transmisión distinto) y herramientas de imagen de sistema completas como swupdate o RAUC, que gestionan la entrega de actualizaciones y el rollback una vez que Linux ya está corriendo — DFU normalmente opera una capa por debajo de eso, más cerca del bootloader.
Un flujo de trabajo aproximado
Una sesión DFU típica desde el lado del host se ve así:
# see what the board exposes in DFU mode
dfu-util -l
# flash an image to a specific alt-setting/partition
dfu-util -a 0 -D firmware.bin
La placa se reinicia hacia el manejador DFU del bootloader, la herramienta del host negocia la transferencia, y la imagen termina donde el bootloader haya mapeado ese alt-setting — a menudo una partición eMMC/NAND específica o un área de staging que el bootloader flashea en el siguiente arranque.
Reflexión final
DFU es una de esas piezas de infraestructura que se vuelve invisible cuando funciona: conectas un cable, ejecutas un comando, y una placa que un minuto antes no podía arrancar vuelve a estar en pie. La mayor parte de la ingeniería interesante está en hacer bien el lado del bootloader: qué se expone, cómo se mapea al almacenamiento real, y cómo falla de forma segura cuando la transferencia se interrumpe a la mitad.
Esta fue una entrada corta — profundizaré en implementaciones concretas (y en dónde se complican) en una futura entrada.
Para seguir leyendo
- Universal Serial Bus Device Class Specification for Device Firmware Upgrade, Revision 1.1 — la especificación oficial del USB-IF en la que se basa DFU.
- dfu-util — la herramienta del lado del host usada en el ejemplo anterior.
- U-Boot: Device Firmware Upgrade (DFU) — cómo se implementa DFU en el bootloader que usan la mayoría de las placas Linux embebidas.
Lecturas Relacionadas
- la cadena de arranque de Linux embebido — cómo el bootloader entrega el control al kernel
- ¿Qué es un Device Tree? — cómo se le describe el hardware al kernel
Comentarios