使用 DFU 加载引导程序

本页介绍如何通过 DFU 将新引导加载程序加载到基于 STM32 的电路板(如 Pixhawk1)上。如果您要调用一块新电路板,或者现有电路板上的引导加载程序已损坏,这将非常有用。

什么是 DFU

DFU 是某些微控制器(尤其是 STM32Fx 系列)的 "直接固件更新 "模式。它允许您使用广泛可用的 DFU 实用程序通过 USB 加载固件(包括引导加载程序)。

进入 DFU 模式

在许多(飞行)控制器上都有一个单独的 "启动 "按钮,如果按下该按钮并接通电源,(飞行)控制器将进入 DFU 模式。

在许多高端(飞行)控制器上,并没有提供随时可用的按钮,因此必须打开(飞行)控制器,然后通过垫板或 CPU 针脚进行操作。

在这些(飞行)控制器上,DFU 模式是在处理器通电时将 "boot0 "引脚拉高而进入的。在 Pixhawk1 上,则通过将 Pixhawk1 上表面的 "FMU-BOOT "焊盘拉高来实现。FMU-BOOT 焊盘位于 Pixhawk1 的蜂鸣器和 DSM/Spkt 连接器之间。在 3DR Pixhawk 上,FMU-BOOT 位于开关和 Telem2 之间。您应该将其拉至 3.3V,但在紧要关头,如果手边没有 3.3V,将其拉至 5V 也是可行的。开关上的 3.3V 电源适用于此。

当该引脚上拉时,给电路板供电(例如插入 USB 连接器),电路板就会启动进入 DFU 模式。

STM32Cube 编程器

该工具适用于 Windows、MACOS 和 Linux,提供了一个简单的图形用户界面编程器。请访问 https://www.st.com/en/development-tools/stm32cubeprog.html .

您可以从 这里 并从地址 0x08000000 开始安装。

dfu-util 工具

这是一款命令行 DFU 编程工具。在装有 apt 的 Linux 机器上,你可以使用以下方法安装它:

sudo apt-get install dfu-util

在其他系统上,请参见 http://dfu-util.sourceforge.net/.

列出 DFU 设备

运行以下程序

dfu-util --列表

结果应该是这样的

dfu-util --列表 dfu-util 0.8 版权 2005-2009 威斯顿 施密特 哈拉尔 韦尔特  OpenMoko Inc.版权 2010-2014 托尔莫德 沃尔登  斯特凡 施密特 程序  免费 软件   当然 没有 请提供保修 报告 错误  [email protected] 找到 DFU: [0483:df11] ......验证=2200, 编号=49, cfg=1, intf=0, 选一=3, 名字="@Device Feature/0xFFFF0000/01*004 e";, 串行="315A35663432"
已找到 DFU: [0483:df11] ......验证=2200, 编号=49, cfg=1, intf=0, 选一=2, 名字="@OTP Memory /0x1FFF7800/01*512 e,01*016 e/0x1FFE7800/01*512 e,01*016 e";, 串行="315A35663432"
已找到 DFU: [0483:df11] ......验证=2200, 编号=49, cfg=1, intf=0, 选一=1, 名字="@Option Bytes /0x1FFFC000/01*016 e/0x1FFEC000/01*016 e";, 串行="315A35663432"
已找到 DFU: [0483:df11] ......验证=2200, 编号=49, cfg=1, intf=0, 选一=0, 名字="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg,04*016Kg,01*064Kg,07*128Kg", 串行="315A35663432"

如果还不明白,请上网搜索如何使用 DFU 调试 USB 连接问题。

加载引导程序

当前适用于 STM32 上 ArduPilot 的引导加载程序在这里:

下载 px4fmuv2_bl.bin 并运行:

dfu-util -a 0 --电源线地址 0x08000000 -D px4fmuv2_bl.bin

它应该会显示 "正在下载 "并显示进度条。完成后,电路板就可以测试启动加载程序了。

加载引导加载程序后,将引导 0 引脚拉低,然后进行电源循环(注意,Pixhawk1 上的引导 0 引脚已被电阻拉低,因此只需进行电源循环即可)。

然后检查 USB 总线,您应该会看到一个设备 "PX4 BL FMU v2.x",供应商标识为 0x26ac,产品标识为 0x0011。现在您可以使用 ArduPilot 的常规固件加载工具来加载飞行固件。