This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我正在尝试将 DFU 功能添加到定制 TM4C1290NCZAD 板上的现有 USB 串行应用中。 我希望使用基于 ROM 的 USB 引导加载程序、并能够从 dfuprog.exe 从 Windows 10命令行触发固件更新。
我想我已经将我的定制器件设置为 DFU 和 USB 串行复合器件(我使用了 dk-tm4c129x 的 boot_demo_usb 示例作为起点、并使用串行 USB 而不是鼠标 HID)。 尽管 USB-IDS.h 中没有相应的产品 ID、但目前我正在使用 USB_PID_COMP_HID_DFU、因为我相信这正是 boot_demo_usb.inf 文件所期望的。
我的复合器件字符串。 (就功能而言、这些是否重要?)。
我的串行 CDC 器件初始化(这起作用)。
这是我的 DFU 结构声明。
这是复合器件的实际初始化。
这是我的复合设备。 同时在 g_comp_entries 中将串行和 DFU 组合在一起
在我的设备管理器(Windows 10)上、我看到我的设备出现两次。 作为串行器件(工作正常)。 DFU 器件出现在"其他器件"中、并在复合器件描述符中显示我的产品字符串 I 设置。 为什么 DFU 器件没有部分?
在命令行中使用"dfuprog.exe -e"时、我看到以下错误。
我已经安装了包含的 boot_demo_usb.inf 文件、安装成功完成。 下面是我从 http://www.ti.com/tool/SW-TM4C 中检索到的 TivaWare 安装的 windows_drivers 目录。 我相信它们是最新的驱动因素。 当我插入 DFU 器件时、Windows 不会提示我。
单击"未知设备"并从本地文件夹更新驱动程序时、我已手动指向此位置。 执行此操作时、Windows 将显示以下内容。
如果您能提供任何帮助、我们将不胜感激。
注:按最新的驱动程序,我指的是最新的. inf 文件以及随附的包含 DLL 的文件夹。
另外、有人能否确认基于 ROM 的 USB 引导加载程序在闪存中没有任何代码的情况下切换到 DFU 进行更新? 如果它不执行此操作、那么我将如何启用此功能?
您好、Alexander、
我之前没有尝试过将 DFU 编程与 ROM USB 引导加载程序结合使用、所以我要测试一些东西来解释它的工作原理、我将在当天晚些时候进行更新。
感谢 Ralph 的全力帮助。
您好、Alexander、
因此、我认为这里的核心问题就是尝试正确设置 DFU 复合器件、 我在我的 LaunchPad 上汇总了一个代码示例、同时为您提供了和、因此我可以完成整个过程并了解这些步骤、从而引导您完成需要完成的工作。 我希望在完成此操作后、dfuprog.exe 部分应简单明了。
是和否 我使用了示例 BOOT_DEMO_USB、它是一个复合 DFU。
它在固件方面似乎完全正常工作。
由于某种原因、Windows 无法找到驱动程序或正确设置 DFU。 此外、dfuprog.exe 也存在类似的问题。 但是、我愿意打赌、问题不在于固件设置、但可能是我错了。 我认为这是驱动程序问题或.inf 文件问题、这可能是由固件问题引起的、也可能不是由固件问题引起的。
再次感谢您为 Ralph 提供的所有帮助。
您好、Alexander、
这就是我正确设置的意思-让 Windows 识别它。
您认为这似乎是与驱动程序/.inf 文件有关的问题、而存在一个问题、我不确定如何解决。
随 TivaWare 提供的用于复合 DFU 的驱动程序专门与 HID 器件配合使用。 但在本例中、您使用的是复合 CDC + DFU。
我想现在的情况是、由于采用了复合设置、Windows 预计会有另一个器件与 DFU 器件一起到达、同时还会看到一个正在等待的 CDC 器件。 它继续将 CDC 器件枚举为独立器件、因为描述符并不表示 CDC 器件是复合器件的一部分。 因此、当它枚举 DFU 器件时、它会尝试作为复合器件执行、但看不到第二个器件、因为 CDC 已经处理完毕、因此枚举未完成。 他们似乎选择 HID、因为它很简单、从驱动程序的角度来看、不需要任何高级功能即可工作、因为我们没有提供 HID 驱动程序、而 CDC 需要一些特定的配置。
我一直在尝试弄清楚需要更改的内容、但坦率地说、我从未制作或编辑过任何 Windows 驱动程序、我对需要更改的内容感到很失望、无法进行 CDC + DFU 设置...
此外、我继续对 DK 电路板进行了一些测试、以了解其枚举方式、它显示为组合器件、而不是当前驱动程序支持的 CDC + DFU 接口。
尽管如此、我可能已经找到了一种方法来提供帮助、看起来 TI-RTOS 是针对 TM4C 的串行 DFU 示例、让我看看我可以重复使用什么。
我自己有一些想法。 它的描述符(USB_PID_COMP_serial 等(请参阅 USB-IDS.h 中的))似乎只是.INF 文件查找的任意数字(PID)。 因此、我希望保留与示例相同的描述符仍然有效。
您好、Alexander、
我有一个想法,可能很快就能工作,试一下,我也会在我的最后继续工作,因为我只有大约50%的人相信这会工作。
1) 1)从此处下载 zip 文件: http://processors.wiki.ti.com/index.php/TI-RTOS_USB_DFU#Part_6_-_USB_Composite_Device
2) 2)转到 [文件夹位置]\ek_tm4c1294xl_USB_serial_DFU\ccs\usbserialdfu\Windows
3) 3)抓取两个.INF 文件并将其放入 TivaWare 列表中。
4)*重要* 将 PID 从 USB_PID_COMP_HID_DFU 更改为0x0102。
使用新的 PID、理论上应该允许这两个新的 Windows 驱动程序正确枚举设备... 也就是说、只要设置的其他所有内容都模仿 RTOS 版本的配置方式。
您好、Alexander、
这是向前迈出的巨大一步。
遗憾的是、签名驱动程序问题是我检查过的一个障碍、即使对于 TivaWare 驱动程序、我们也会遇到相同的问题。 现在的驱动程序不会枚举 CDC+DFU、但如果我修改它们、则签名将无效、我们将立即返回到您现在所在的位置。
我有一个向 RTOS 团队开放的查询、以查看他们是否在某个时候对驱动程序进行了签名。 我不希望出现这种情况、但也不会影响提问。
不幸的是、我们无法在终端上仅签署驱动程序、因此、如果这是最后的障碍、那么我恐怕我已经在提供支持方面达到了我的极限。 尽管我希望我提供的内容能让您接近最终目标。
顺便说一下、根据您的 PC 安全设置、您应该能够关闭已签名驱动程序的检查。 Google 可以解释如何操作。 我不能这样做、因为我的 PC 有阻止这种情况的软件、但是如果可以、您可以验证它是否正常工作。
太棒了! 很高兴我能引导你完成这个过程,我对司机有点担心:)
顺便说一下、既然您已经完成了这一步、那么第2.11.1节中使用 DFU 器件类的步骤中是否有任何不准确的部分? 或者、您是否能够按照该步骤、在修复驱动程序后到达此处?
嗯... 实际上、这就是我之前在这个网站上发布的帖子的全部内容。 请参阅 USB 库用户指南、对吧?
该部分说明使用 bl_config.h 和 APP_START_Address、并以 BOOT_DEMO_USB 为例。 除此之外、该示例不执行此操作、因为它没有闪存引导加载程序(仅 ROM)。 (不过该部分的其他部分很有帮助)
我在这里有一个论坛帖子。 https://e2e.ti.com/support/microcontrollers/other/f/908/t/816698
此外,不幸的是,我还没有走出树林。 一切似乎都正常工作、但当我使用 dfuprog.exe 命令将其切换到编程模式时、它不起作用。
该器件应显示为 DFU 模式(而不是运行时模式)器件。 可能我没有该类型的.inf 文件?
这之后、它根本不会在器件管理器上显示。
您好、Alexander、
是的、我在那里录制了您的消息、但由于我们的消息距离更远、我想确保这些是唯一的问题。
您能否发布设备管理器屏幕截图
1) 1)在刷写电路板之后和触发 DFU 之前
2) 2)在-m 命令之后
3) 3)在-e 命令之后
我已在我的端点停止了移植工作、但如果需要、我可以在明天恢复。 尽管您做了一些腿部工作、您能否共享您整合在一起的 USB 结构文件? 当然、请务必编辑您自己的任何信息。 当我偶然发现驱动程序问题时、我正处于所有这些问题的解决过程中、跳过该步骤将使我的尝试更快地运行。
我有几个关于我首先做什么错的理论。
a)我是否必须使用与用于 DFU 更新的 USB 端口不同的电源为其供电?
b)如果我使用 USBDDFUUpdateBegin();要触发更新,我是否需要更改 startup_css.c 文件中的 SVCall 处理程序?
以下是您请求的剪切。
1) 1)在刷写电路板之后和触发 DFU 之前
2) 2)在-m 命令之后
3) 3)在-e 命令之后(此处不应更改)
在发送 USB 结构文件时、如果您是指带有复合器件初始化的文件、则大部分内容在我的初始问题图片中进行了描述(对于 tUSBDCompositeDevice PID、仅更改了0x102)。 它中有很多额外的 TX/Rx 东西、我可以知道、但可能需要一点。 让我们先从上面运行两个可能的错误。 我会:)。 然后、我可以看到有关编辑和发送结构文件的信息。
我将调用的 SVC 处理程序切换到 了 ROM_UpdateUSB (0);。 这是现在的结果。
1)之前
2) 2)之后
我认为我需要一个不同的.INF 文件用于 DFU 更新模式(USB 库现在为我设置了、所以我现在不能控制 PID?)。 因此、当我指向 Windows 为我提供的驱动程序更新的文件夹时、我会认为这是一个默认驱动程序、也许是 boot_usb.inf。
注:Windows 还在该设备的属性中告诉我,它使用的是 usb.in
我想我现在已经卡住了。 有什么想法?
因此,我从使用 USB 库 USBDDFUUpdateBegin()更改为使用 ROM_UpdateUSB(0),而不是 SVC 处理程序调用。
我切换到使用我自己的自定义函数、该函数来自 boot_demo_usb 示例、我认为它现在可以正常工作。 (它主要与 USBDDFUUpdateBegin()相同,但有一些差异)。
不幸的是、我还不能测试它。 当我这么做时、我会告诉您。 但现在似乎可以了。
您好、Alexander、
如果您希望使用 ROM 引导加载程序、则应执行此操作。 我从未尝试使用 USBDDFUUpdateBegin 调用 ROM 引导加载程序、因此我不确定具体如何执行该操作。 ROM_UpdateUSB 绝对是我建议用于 ROM 引导加载程序的方法、这是正确的方法。
您好、Ralph Jacobi、
因此、我认为现在已正确设置。 我现在可以在更新模式下重新启动它、并且可以发送更新的固件。 遗憾的是、它不会在我的新固件中重新启动。 手动复位后、它仍然不在我的固件中(我可以告诉您、因为复合 COM 不会回来)。 它也不在 ROM 中的引导加载程序中、因为该 DFU 端口也不会返回。
这可能是因为我使用了您发送给我的 RTOS 示例中的 dfuwrap.exe、以便将.bin 更改为.DFU。
此致、Alex。
好的。 完全成功。
我刚刚使用了.bin、而不是担心先将其设置为.DFU。
好的,我本来打算建议,但是我想先亲自测试一下,没有机会这样做,感谢报告,感谢这次旅行的耐心!
嘿 Ralph、 Ralph Jacobi (UF)|
再次感谢您的所有帮助。 只是想知道您是否听说过 RTOS、因为如果他们有已签名的驱动程序、它仍然对我有用。
您好、Alexander、
从我得到的反馈中、似乎他们没有在其末尾签名驱动程序。