dfu-util 通过 USB DFU 烧录固件。对于没有接调试探针的被测设备,或者本身提供 DFU 引导程序的设备,这就是烧录途径。
需要 Box 软件 0.33.0 或更高版本,并且 Box 上已安装 dfu-util。
句柄
name()。
方法
类型
DfuOptions
Default 会选中总线上唯一的那台 DFU 设备。接了不止一台时,dfu-util 会因为无法确定而报错,而不是靠猜,所以请指名一台。
DfuDevice
mode 是 "DFU";对于正在运行应用、同时声明具备 DFU 能力的设备,则是 "Runtime"。
DfuOutput
方法参考
list() -> Result<Vec<DfuDevice>>
枚举支持 DFU 的设备,由 dfu-util -l 的输出解析成带类型的记录。
download(firmware: &[u8], opts: &DfuOptions) -> Result<DfuOutput>
把固件上传到 Box 并烧录。这些字节以 base64 编码放进请求,因此不需要先在 Box 的文件系统上准备任何东西。
STM32 的系统引导程序需要
dfuse_address。没有它,dfu-util 就没有可写入的基地址,下载会失败。detach(opts: &DfuOptions) -> Result<DfuOutput>
让设备脱离 DFU 模式,从而离开引导程序并运行应用。
示例
给没有调试探针的被测设备烧录
通过给集线器端口断电重启来进入 DFU
说明
dfu-util把进度写到 stderr,而不是 stdout。一次成功的下载同样会填满DfuOutput::stderr;请检查exit_code,而不是看 stderr 是否为空。- 没装
dfu-util的 Box 会用Error::Box和 HTTP 500 回应,并携带dfu-util is not installed on this box. Install it with 'lager box-config apt add dfu-util'。这里有意不是UnsupportedByBox—— 路由是存在的,只是工具没装。 - 早于 0.33.0 的 Box 根本不提供这条路由,那种情况才是
Error::UnsupportedByBox。 - 客户端给下载留了 180 秒,高于 Box 自己给
dfu-util的 120 秒预算,以便为上传和排队留出余量。

