问题标签 [dfu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
737 浏览

usb - 什么是 USB 标准中的功能描述符?

我是 USB 新手,我正在尝试开发一个可以Device Firmware Upgrade在我们的应用程序中执行的库。

DFU 标准http://www.usb.org/developers/docs/devclass_docs/DFU_1.1.pdf谈到Run-Time DFU Functional Descriptor. 我了解Device,和描述符是什么configuration,但我不知道描述符是什么。因此我的问题是:interfaceendpointFunctional

1. 什么是功能描述符?

2. 如何检索有关功能描述符的信息?

我正在和libusb我一起工作。因此,如果您有任何示例,那将有很大帮助。

0 投票
1 回答
1497 浏览

android - DFU模式下的蓝牙:某些设备的连接总是失败

我正在使用 Nordic Semiconductor 的 Android-DFU-Library 来更新蓝牙低功耗 (BLE) 设备的固件。我已经在 github 上寻求帮助,但我想更多的人可以在这里看到这个问题(要么提供帮助,要么最终找到并回答)。

所以,这是我对github 问题的描述:


最近两天我一直在努力解决这个问题,我找不到任何线索。我希望这里有人能给我一个提示,我将非常感激。

我有 4 台设备:

  • android 6.0下的无名平板电脑
  • android 5.1下的三星galaxy tab 4
  • android 7.1下的zuk z2 pro
  • 安卓7.0下的小米5s

连接蓝牙设备进行更新后,我发送了一些特定的命令以进入 DFU 模式,然后在几秒钟后断开连接。一切正常到这一步。

然后,我使用 Android-DFU-Library 启动固件更新过程。它适用于 android 5.1 三星设备,但无法将 [status 133] 与其他 3 台设备连接。知道发生了什么吗?

非常感谢您的帮助。


当我在 nRF Connect 中手动执行此操作时,它可以工作。当我使用我的应用程序首先启用 DFU 模式时,它甚至可以正常工作,然后通过 nRF Connect 在稍作扫描后立即连接到设备以找到设备。

我在我的应用程序中执行此操作的方式是:启用 DFU 模式后,我扫描 10 秒以找到新的 mac 地址并确保一次只有一个设备处于 DFU 模式。然后,我使用这个库来进行实际的固件更新。

抛出 status=133 错误大约需要 30s,所以看起来是因为超时。

更多日志:

0 投票
2 回答
1868 浏览

usb - DFU模式下的STM32F04仅在电池供电时识别(Win10)

我制作了一个 STM32F042k6,电池供电的设备,我想刷 vi DFU 协议。

为此,我断开电池,将 BOOT0 拉到 VCC,然后将设备插入 PC 的 USB3 端口(没有可用的 USB2)。设备无法识别并显示 VID:0000 PID:0002(案例一)

但是,当我第一次连接电池,然后将设备连接到 PC 时,它会毫不费力地被识别(案例 II)。

我面临的问题是我想通过软件中的命令开始跳转到引导加载程序 - 但后来我达到了与我完全相同的条件。

你能帮我确定我违反了正确启动的条件吗?

编辑: 我发现问题的方式是当我实现软件跳转到引导加载程序时。它似乎根本不起作用(VCP 设备消失,并且错误的 <> 设备出现在系统 PID:0002 VID:0000 中)。我想通过拉起 BOOT0 引脚来进入引导加载程序,但我可以看到我只有在电池电源循环时才成功。USB 电源循环导致相同的“失败的描述符”设备。

我怀疑当通过 USB 开机时,booloader 存在一些通信问题,无法建立正确的 PID 和 VID。通过电池供电时 - 不存在此问题。

0 投票
1 回答
373 浏览

stm32 - STM32 DFU over UART 写入不正确的数据

我正在开发固件更新程序,以便系统中的主控制器可以对其他 STM32 芯片进行编程。如应用笔记AN2606AN3155中所写,我正在使用 115200 bps 的 UART 和 8E1 。目前我正在尝试刷新 STM32F429。我可以毫无问题地读取闪存。

为了测试写入功能,我将 8 个字节写入地址,这些地址是AN3155中建议的 4 的倍数。我用逻辑分析仪检查了数据线,一切都正确发送,STM 对所有内容都响应 ACK。

当我尝试回读它时,我会在这些位置获得随机值。写入相同的基地址时,这些值始终相同,但在其他地方写入时它们会发生变化。

我已将电压范围配置寄存器(AN2606第 30 页)设置为 0x03,因为我的电源是 3.3V。这个寄存器的解释很混乱,所以我什至不确定这个设置是否正确,我找不到其他可能出错的地方。

更新:

我试图写入所有 4 字节对齐的地址,然后将其读回以进行比较。我用各种数据大小做到了这一点。所有写入对扇区的基地址都不正确。失败的地址具有以下模式:

解决方案:

嗬!闪存擦除存在我没有注意到的问题。

0 投票
0 回答
106 浏览

gcc - arm-none-eabi-gcc 可以直接生成.dfu文件吗?

我看到声明,例如,GCC可以为 STM32 DfuSe 生成.dfu文件。这是真的吗?是工具链上的一个选项arm-none-eabi-objcopy还是工具链的另一部分?

0 投票
1 回答
495 浏览

xamarin - 北欧Dfu库的Xamarin绑定

尝试绑定包含适用于 android 的 nordic dfu lib 的 aar 文件时收到一些错误消息。

BINDINGSGENERATOR:警告 BG8604:找不到嵌套类型 NO.Nordicsemi.Android.Dfu.DfuBaseService.1 的顶级祖先 DfuBaseService。BINDINGSGENERATOR:警告 BG8604:找不到嵌套类型 NO.Nordicsemi.Android.Dfu.DfuBaseService.2 的顶级祖先 DfuBaseService。BINDINGSGENERATOR:警告 BG8604:找不到嵌套类型 NO.Nordicsemi.Android.Dfu.DfuBaseService.3 的顶级祖先 DfuBaseService。BINDINGSGENERATOR:警告 BG8604:找不到嵌套类型 NO.Nordicsemi.Android.Dfu.DfuBaseService.4 的顶级祖先 DfuBaseService。BINDINGSGENERATOR:警告 BG8604:找不到嵌套类型 NO.Nordicsemi.Android.Dfu.DfuBaseService.5 的顶级祖先 DfuBaseService。

这是源代码中的类声明:

我尝试将此添加到 metadata.xml:

但后来我得到一个额外的错误:

BINDINGSGENERATOR:/Users/laerdaldeveloper/Projects/NordicDfuPlayground/NordicDfuPlayground/Transforms/Metadata.xml(11, 6) 警告 BG8A04:不匹配节点。

自从我一年前设法绑定这个库以来,这更加令人沮丧:(关于我可以尝试什么的任何提示?

PS我也尝试在编译aar之前公开这个类,但没有帮助(我还添加了一个空类,以验证我是否绑定了更改)

0 投票
0 回答
501 浏览

android - 自治 DFU 北欧

我正在开发连接到 BLE 设备的应用程序,我专注于设备的固件更新 (DFU)。为此,我正在使用由 Nordic 创建的 android lib,并且我正在尝试使其自主,因此用户不必浏览他的文件并选择固件更新的 zip。

但是,DFU 总是停在 30%,应用程序失去了蓝牙连接,我必须使用外部应用程序手动完成更新。

有没有人已经用 DFU 做过这种事情并且可以帮助我?

这是 lib 的 github 的链接:https ://github.com/NordicSemiconductor/Android-DFU-Library

这是我目前正在使用的代码,它是带有适用于 Android 的 Nordic lib 的标准 DFU 程序。

编辑:这里有一些日志显示运行时发生的情况

0 投票
1 回答
462 浏览

stm32 - 如何确定目标内部闪存的大小?

我想使用 dfu-util 将设备固件上传到文件中。如何确定闪存的正确大小?

将设备启动到 DFU 后,可以使用以下命令找到它:

我收到以下信息:

要将闪存配置上传到文件,我需要确定闪存的大小。根据这篇文章,闪存的大小将是 64 x 1kB。

0002Kg中的“Kg”是什么意思?
我正在遵循的说明(在其他地方,对于不同的设备,请参见上文)正在使用128 x 1kB,而不是我认为这是不正确的。
如何计算闪存的大小以及如果我将内存大小设置为太大而无法下载图像会发生什么?

命令是:

我认为应该是

0 投票
1 回答
162 浏览

gcc - STM32 DFU 上传失败和 GCC 优化

编辑:通过生成 Makefile 项目绕过了问题,但我仍然想知道发生了什么。

这个问题与我在此处提到的未解决问题相呼应(STM32 应用程序有时不运行,仍保留在 DFU 中)。

我有一个基于 STM32L486 的定制板,我正在使用内置 DFU 模式dfu-util在 Linux 上通过 USB 上传新固件。

有时,出于未知原因,应用程序在退出 DFU 模式后无法启动。代码中的轻微更改可以使其工作或破坏它。(有关详细信息,请参阅上面的链接)。
可以扭转问题的更改示例:

  • 添加/删除一个HAL_Delay或一个 LED 闪烁
  • 数组大小 +1 或 -1
  • 添加/删除sprintf格式

似乎可行的是通过Og优化(或使用 STLink 工具和调试模式)构建二进制文件。

我试图增加堆和堆栈(最多为默认值的 20 倍),它不会改变任何东西。检查 Atollic 中的准备死代码/数据删除选项似乎使构建失败比其他时候更多。

什么可能导致应用程序无法启动,甚至没有启动步骤?如何追踪可能导致此问题的罪魁祸首?
这可能与内存对齐问题有关吗?

欢迎任何关于如何检查的想法/见解/评论。


我已经能够在 Nucleo 板上重现相同的问题(来自此处和我的其他链接)。
我试图从 CubeMX 生成一个Makefile 项目,但问题没有发生。我猜这是 Atollic 生成的二进制文件或 IDE 的编译器/链接器设置中的错误。
请注意,我的 Makefile 使用与 Atollic 完全相同的工具链,因此这不是工具链问题。
特此规避此问题,但我仍然想了解可能发生的情况。

0 投票
1 回答
853 浏览

stm32 - 在QT中,当连接到STM32时,如何检测USB端口何时从串行模式切换到DFU

我有一个 Qt5.12.4 MinGw64 应用程序,我想在其中捕获 USB 事件。在 Windows 10 中,STM/USB 的 MS 驱动程序会发出错误消息,我可以将其用作触发器。不优雅但它有效,直到我尝试在 Win7-8.1 应用程序中运行它,其中驱动程序是具有 VCP 包装器的第三方 STM 驱动程序。我想我需要采用 libusb 来尝试捕捉端口状态的变化,但我不知道如何进行。我可以在设备管理器中看到端口信息,我只是不知道如何访问它。一些问题在我脑海中闪过......

1)我可以只调用操作系统来读取端口信息吗?(如果有,怎么做?)

2) libusb 和 QSerialport 可以在同一个端口上共存吗?

3) 我应该对 LibUSB1.0 进行哪些调用来查询端口状态?

4) 是否有像 lsusb (wmic??) 这样的 Windows cli 实用程序可以在其中抓取数据?

5) 哪个解决方案可能是最好的跨平台解决方案?

我正在使用这个触发器来启动 dfuse 作为一个在我的 STM 板上自动更新固件的进程。

我查看了 libusb1.0 文档,但我不明白如何使用它。如果这是正确的解决方案,将不胜感激提供如何查询 Com 端口数据和状态的示例。

我尝试使用 qDebug() 打印出所有 serialportInfo 数据,同时处于串行或 DFU 状态,但没有任何有用的东西可以用作触发器。

USB 串口模式 = 串口信息为:("COM3", "USB Serial Device", "Microsoft", "00000000001A", "\\.\COM3", "483", "5740", "1", "no数据”,“1”)

USB DFU 模式 = 串口信息为:("COM3", "N/A", "N/A", "N/A", "\\.\COM3", "N/A", "N/A "、"无数据"、"无数据"、"无数据")

我需要一些关于如何获取此端口信息的指导,所以我真的没有任何重要的代码,但我包含了我的工作流程功能的摘录。

此代码可以很好地实际执行固件加载。我只需要一种从 USB 端口状态更改中实际触发它的方法