DFU 不在裸盒中传输数据

Posted

技术标签:

【中文标题】DFU 不在裸盒中传输数据【英文标题】:DFU not transferring data in barebox 【发布时间】:2021-11-02 06:52:22 【问题描述】:

我正在开发一个定制板 - 没有可移动存储 (sd),只有一个 UART。我需要使用裸盒引导加载程序在 QSPI 存储上传输文件。

我正在尝试使用 DFU 传输各种文件以写入 QSPI

设备树具有以下特点

&usbotg1  
dr_mode = "otg"; 
status = "okay"; 
; 

&usbphy1  
fsl,tx-d-cal = <106>; 
;

在板子上,OTG模式已经设置为外设,dfu开始接受文件

barebox@Freescale:/ otg.mode=peripheral 
barebox@Freescale:/ dfu /tmp/qspi-header(qspi)src 
udc0: registering UDC driver [g_dfu]
dfu: register alt0(qspi) with device /tmp/qspi-header 
g_dfu usbgadget: g_dfu ready 
g_dfu usbgadget: high-speed config #1: USB DFU 

在系统上,该板被检测为 DFU 设备

harkirat@harkirat-devsys:~$ sudo dfu-util -l 
dfu-util 0.9 

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. 
Copyright 2010-2016 Tormod Volden and Stefan Schmidt 
This program is Free Software and has ABSOLUTELY NO WARRANTY 
Please report bugs to sourceforge.net/p/dfu-util/… 

Found DFU: [1d50:60a2] ver=0316, devnum=13, cfg=1, intf=0, path="1-2", alt=0, name="qspi", serial="UNKNOWN" 

所以当传输文件时

harkirat@harkirat-devsys:~$ sudo dfu-util -a qspi -D qspi-header 
dfu-util 0.9 

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.

dfu-util: Invalid DFU suffix signature 
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! 
Opening DFU capable USB device... 
ID 1d50:60a2 
Run-time device DFU version 0100 
Claiming USB DFU Interface... 
Setting Alternate Setting #0 ... 
Determining device status: state = dfuIDLE, status = 0 
dfuIDLE, continuing 
DFU mode device DFU version 0100 
Device returned transfer size 4096 
Copying data from PC to DFU device 
Download [=========================] 100% 512 bytes 
Download done. 
state(6) = dfuMANIFEST-SYNC, status(0) = No error condition is present 
state(7) = dfuMANIFEST, status(0) = No error condition is present 
state(6) = dfuMANIFEST-SYNC, status(0) = No error condition is present 
state(7) = dfuMANIFEST, status(0) = No error condition is present 
state(6) = dfuMANIFEST-SYNC, status(0) = No error condition is present 
state(7) = dfuMANIFEST, status(0) = No error condition is present 
state(6) = dfuMANIFEST-SYNC, status(0) = No error condition is present 
state(7) = dfuMANIFEST, status(0) = No error condition is present 
state(6) = dfuMANIFEST-SYNC, status(0) = No error condition is present 

最后两行不断重复。最终在两者上都按 Ctrl-C

它确实说文件下载完成。但接收端什么都没有。在董事会

…
g_dfu usbgadget: high-speed config #1: USB DFU 
g_dfu udc0: unregistering UDC driver [fsl-usb2-udc] 
dfu: Interrupted system call 
barebox@Freescale:/ ls /tmp/ 
barebox@Freescale:/

所以问题是为什么????

【问题讨论】:

您使用的是哪个版本的裸机?最近有一个关于 dfu 的回归。 @a3f 使用最新的。 barebox-2021.08.0 - 【参考方案1】:

与您的问题匹配的回归最近被报告为由

697f53a90224("usb: gadget: dfu: Wrap fs operation in workqueue")

这里有第一个修复:

https://lore.barebox.org/barebox/20210830144835.27458-1-jmaselbas@kalray.eu

试试看能否解决您的问题。

不幸的是,回归失败了,但大多数用户似乎要么使用 fastboot 或 DFU 与多工具功能(usbgadget -D 命令而不是 dfu 命令)。我建议你对一个新项目也这样做。 fastboot 对 UBI (u) 标志有特殊支持,这允许它在更新时在卷上透明地调用ubiformat,并且它可以重新导出barebox_update 处理程序,因此您可以使用例如更新:

fastboot flash bbu-nand barebox-myboard.img
fastboot flash rootfs-nand my.ubi

usbgadget 命令允许小工具在“后台”工作。因此,您可以继续使用 shell 并同时导出多个小工具:例如USB 串行控制台和 DFU 同时进行。尽管有上述回归,这应该仍然有效,因为那只破坏了dfu 命令。

【讨论】:

谢谢@a3f 我感谢您的意见。但有点不耐烦并恢复到 u-boot 尝试看看它是否有效(如果只是那么容易)。当我放弃 u-boot(可能很快)我会再次尝试你的建议 @Harkirat 我建议你坚持使用一个并在官方渠道(邮件列表,也许是 IRC)上寻求帮助。展望未来,问题可能会变得更加复杂(例如冗余启动、回退),并且来回跳动以达到与其中一个或另一个相同的功能会消耗大量时间。 我理解这个观点。但无论如何,我最终还是希望得到对barebox的支持。所以两者同时进行。我承认不是最有效地利用时间和剩余的脑细胞......但感谢您的建议 谢谢。我确实使用了 usbgadget - 这很有效。我仍在弄清楚其中的一些,主要是因为文档不足,但至少我有前进的道路。我不愿意使用的补丁,因为它会给我发送代码带来下游问题。我现在坚持使用usbgadget 虽然主题可能不直接相关,但在传输文件后由于某种原因我无法写入 QSPI。不过如果你可以看看我会和你分享 - ***.com/questions/69111195/…

以上是关于DFU 不在裸盒中传输数据的主要内容,如果未能解决你的问题,请参考以下文章

求大神指导,SSH在DFU下如何iPhone数据?

DFU协议介绍

沙盒中的 PayPal 支付数据传输“返回 URL”

弹性项目不在列方向弹性盒中换行

USB DFU特定类请求简介

如何利用SSH在DFU模式下备份iPhone数据