Voy a describir los pasos para una controladora Matek F405 CTR, aunque valdrán con muy pocas variaciones para la mayoría de controladoras de vuelo modernas.

La Matek F405 CTR viene con un microcontrolador (MCU)  STM32-F405. El STM32 en todas sus versiones es un chip muy popular entre las controladoras de vuelo. Todas estas placas traen un conector USB para comunicarse con el MCU a través del puerto serie USB de nuestro PC. Esa conexión nos permitirá dos cosas:

  1. Configurar Betaflight (el firmware de nuestro STM32).
  2. Instalar otro firmware.

Estas dos posibilidades requieren modos de funcionamiento completamente diferentes de nuestro chip STM32, lo que requiere de drivers especiales. Veamos todo el proceso.

El bootloader de una controladora de vuelo: modo DFU y modo normal

Gráfico memoria donde se ubica el programa bootloader y el programa firmware

Nada más dar corriente a una controladora de vuelo se ejecuta un pequeño programa grabado en la ROM del microcontrolador. Es el bootloader.

El bootloader puede iniciarse en dos modos:

  1. Modo normal: arranca la placa y ejecuta el programa principal grabado en RAM. Es decir, ejecuta el firmware o sistema operativo de nuestro dispositivo. Si no hacemos nada, este el modo por defecto, por lo que siempre que demos corriente a la placa, arrancará este firmware.
  2. Modo DFU (Device Firmware Upgrade): no arranca el sistema operativo (firmware) y mantiene al microprocesador en espera de datos que grabará en en RAM. Es el modo para flashear nuestro firmware. En placas antiguas había que puentear dos pines al dar corriente para activar este modo, en las más recientes suele ser un botón que hay que mantener pulsado mientras se da corriente.

El problema de estos MCU modernos es que llevan la conversión USB (protocolo serie que habla nuestro PC) a TTL (protocolo nativo de los MCU) integrada en el propio chip, lo que complica bastante la instalación de los drivers USB del STM32 (especialmente en modo DFU).

Hay un artículo completo sobre la instalación de los drivers USB del STM32. Si no los tenemos instalados, pasar a leerlo.

Modo DFU de la Matek F405 CTR

Botón de bootloader en modo DFU

Si nos podemos conectar a Betaflight Configurator y podemos cambiar la configuración de nuestro racer, los drivers USB del STM32 funcionan bien en modo normal. Pero para poder instalar el firmware necesitamos que también funcionen los del modo DFU o Device Firmware Upgrade.

En la Matek F405 CTR ese modo se inicia pulsado el botón de la placa mientras se conecta la alimentación por USB. Después se puede soltar. Si los drivers están correctamente instalados, nuestro PC reconocerá el dispositivo en el nuevo modo DFU.

Y lo que es más importante, Betaflight Configurator mostrará DFU en el desplegable de los puertos de conexión:

Pero esta no es la única manera de poner el bootloader del STM32 en modo DFU. También se puede hacer por software. Con nuestra Matek F405 conectada por USB en modo normal, desde Betaflight Configurator sin conectar a nuestra controladora, desde la pestaña firmware podemos invocar el modo DFU. Simplemente manda una señal al STM32 pidiendo que se reinicie en modo DFU.

Problemas al entrar en modo DFU: «Unknown USB Device«

Muchas controladoras de vuelo funcionan perfectamente en modo DFU y son reconocidas por el PC con el driver correcto. Sin embargo pasado un tiempo dejan de funcionar, exclusivamente en este modo. El error es: «Unknown USB Device (Device Descriptor Request failed)«.

El error es claro: el PC es incapaz de comunicarse con el dispositivo, por lo que ni siquiera puede asignarle un ID. Los dispositivos con ID pueden funcionar o no, dependiendo de si tienen el driver correcto instalado, pero en este caso ni siquiera hay respuesta del dispositivo. Todo apunta a un fallo hardware de la controladora de vuelo. Pero ¿por qué? ¿se ha estropeado?

Normalmente la primera instalación de firmware se realiza con la controladora de vuelo encima de la mesa, exenta de cables y otros dispositivos. Las actualizaciones posteriores se hacen con la controladora montada en el frame del racer. El modo DFU parece ser muy sensible en cuanto a corriente y voltaje, por lo que cualquier otro dispositivo que le robe amperios a la corriente suministrada por el puerto USB, puede bloquear al bootloader.

Siempre que actualicemos el firmware de la controladora de vuelo, desconectarla de todo lo que esté alimentando. Especialmente desconecta el GPS.

En general, para evitar problemas en el modo DFU:

  1. Desconectar siempre el GPS.
  2. Desconectar otros dispositivos si están alimentados por la propia controladora: radio, etc.
  3. Usar cables USB de calidad.
  4. No conectar a HUB USB externos si es posible.

Actualización de firmware Betaflight

Una vez podamos poner a nuestra controladora en modo DFU, con los drivers correctamente instalados y funcionando, la instalación del firmware es sencilla.

Volcado previo de la configuracion Betaflight

En la pestaña Setup -> Backup. También se puede hacer en consola, en la pestaña CLI, con los comandos:

diff -> save to file (sólo parámetros distintos de los valores por defecto)
dump -> lo mismo que diff pero vuelca todo (no recomendado)
diff all -> lo mismo que dump pero incluye todo lo personalizado en consola CLI

Activando manualmente el modo DFU

Es decir, dando corriente a la placa mientras presionamos el botón ya mencionado. Eso pondrá a la placa en modo DFU y podremos verlo en el desplegable de Betaflight.

Si no aparece DFU en el desplegable, cerrar la aplicación y volverla a abrir.

En este modo no podemos conectar a la placa, puesto que no hay firmware en ejecución que recoja nuestras solicitudes. Podemos pulsar en el botón «Update Firmware» o en la pestaña «Firmware Flasher«, es lo mismo.

¿Qué marcar?

  1. NO mostrar versiones inestables.
  2. Elije muy bien el modelo de la placa, en caso contrario no arrancará en modo normal.
  3. Elije la última versión estable.
  4. NO borres también la EPROM si quieres conservar la configuración.

En la parte de abajo de la pantalla hay 3 botones:

  1. Descargar el firmware elegido en el paso anterior
  2. Flashear el firmware…

Si todo va bien, que debe ir, acabaremos con el mensaje «Programming: SUCCESSFUL» y se reiniciará la controladora en modo normal. Nos conectamos y comprobamos.

La restauración de la configuración si se ha perdido es un tema espinoso. Revisar las notas de la versión. En algunas revisiones hay que reconfigurarlo todo. Si volcamos con dump o diff no se incluirán nuestras personalizaciones en consola CLI. Si volcamos con diff all lo incluirá todo, pero muchas veces los comandos cambian entre versiones.

Activando por software el modo DFU

También podemos encender la controladora en modo normal e intentar el flasheo como si estuviera en DFU. Betaflight intentará poner la controladora en DFU mediante un reinicio con la orden de entrada en DFU inmediata. Esto se producirá la pulsar el botón 2 «Flash Firmware«.

Todo debería ser automático y nuestra placa entrará por software en modo DFU, sin tocar el botón.

¿Y después?

Pues una vez instalado Betaflight, a configurarlo.