DFU 劫持
简介
如果飞控无法进入 DFU 模式,即使:
- 你已完全确认刷写驱动、电脑硬件和 USB 线缆均正常;
- 在同一台电脑上可以为其他飞控刷写固件;
- 飞控只在某些特定条件下偶尔能够进入 DFU 模式;
本页或许能说明原因,并提供可行的解决方法。
什么是 DFU 劫持?
STM32 系列 MCU 处于 Bootloader 模式时,会从 USB VCP、UART 等多个外设查找输入。如果某个连接到 UART 的持续发送数据的设备发送了看似有效的数据,Bootloader 就会将注意力转向该 UART 端口,并尝试从该端口加载固件。换言之,该设备会劫持 Bootloader。
可行的解决方法
可按以下方式避免持续发送数据的设备造成 DFU 劫持:
-
刷写时为该设备断电或物理断开连接。也可将其接到仅连接 USB 时不会供电的电源焊盘。
-
许多接收机在重新上电后,只有首次与发射机对频(建立连接)后才会输出有效数据。为这类接收机上电前关闭发射机,即可避免这种情况下的劫持。
-
使用半双工协议,并将持续发送数据的设备接到
TX引脚。Bootloader 不会启用半双工,且只监听RX引脚,因此TX引脚收到的数据不会引发劫持。 -
不要将持续发送数据的设备接到对 Bootloader 敏感的 UART 端口。F4 的敏感 UART 引脚为
PA10、PB11和PC11。对于 CLRACINGF4(及 JBF4),UART1 (PA10) 和 UART3 (PB11) 属于此类。设计合理的 FC 不会将默认接收机端口分配到这些引脚。
注意
若以上方法均无效,还需要检查 udev 规则。