跳到主要内容

DFU 劫持

简介

如果飞控无法进入 DFU 模式,即使:

  • 你已完全确认刷写驱动、电脑硬件和 USB 线缆均正常;
  • 在同一台电脑上可以为其他飞控刷写固件;
  • 飞控只在某些特定条件下偶尔能够进入 DFU 模式;

本页或许能说明原因,并提供可行的解决方法。

什么是 DFU 劫持?

STM32 系列 MCU 处于 Bootloader 模式时,会从 USB VCP、UART 等多个外设查找输入。如果某个连接到 UART 的持续发送数据的设备发送了看似有效的数据,Bootloader 就会将注意力转向该 UART 端口,并尝试从该端口加载固件。换言之,该设备会劫持 Bootloader。

可行的解决方法

可按以下方式避免持续发送数据的设备造成 DFU 劫持:

  1. 刷写时为该设备断电或物理断开连接。也可将其接到仅连接 USB 时不会供电的电源焊盘。

  2. 许多接收机在重新上电后,只有首次与发射机对频(建立连接)后才会输出有效数据。为这类接收机上电前关闭发射机,即可避免这种情况下的劫持。

  3. 使用半双工协议,并将持续发送数据的设备接到 TX 引脚。Bootloader 不会启用半双工,且只监听 RX 引脚,因此 TX 引脚收到的数据不会引发劫持。

  4. 不要将持续发送数据的设备接到对 Bootloader 敏感的 UART 端口。F4 的敏感 UART 引脚为 PA10PB11PC11。对于 CLRACINGF4(及 JBF4),UART1 (PA10) 和 UART3 (PB11) 属于此类。设计合理的 FC 不会将默认接收机端口分配到这些引脚。

注意

若以上方法均无效,还需要检查 udev 规则。