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.
这一问题可能是口头上的,但这里是这样的。
除了 Tiva USB 库支持的少数类别之外、有没有人成功地实现了 USB 器件?
图书馆太疯狂了。 多层重定向、结构内的结构、虽然有一些有关如何执行此操作的文档、但这并不是很有用。
具体而言、我希望实现 USB MIDI 设备类。 这是音频类的子集(在 Tiva USB 库中具有"支持"、但未提供示例)。 由于它有两个接口、它应该被配置为一个复合器件、带有音频控制接口(通过控制端点)和 MIDI 流接口(使用两个批量端点、每个方向一个)。
我从提供的批量示例开始、因为这似乎接近我需要的内容。 但是、耶斯、它是否会更复杂? 只是描述符的设置方式,使用 tConfigSection,然后是它们的数组,然后是 tConfigHeaders,然后是它们的数组--为什么? 为什么不仅仅让描述符是两个结构、一个用于器件描述符、另一个用于整个配置描述符?
有一个被定义为 tUSBBulkDevice 的结构、它会经常传递、并且它有一个私有成员结构 tBulkInstance、只是展开这一切都很困难、因为它没有记录为什么这样设置。 (doxygen 的巨大失败!)
(我注意到、对于 MSP432器件而言、这一切几乎相同。)
我在 Silicon Labs EFM8UB2以及他们的 EFM32GG11上使用他们提供的 USB 器件库实施了此器件类、整个过程非常简单、只需不到一周的时间。
尊敬的 Andy:
作为一个继承了对 TM4C 器件的 USB 支持并完全不了解库编写方式的人... 您对该库的总结完全准确。 我希望我有时间将其拆分、然后从头开始构建它。 对于受支持的部件、毫无疑问、它 工作正常、运行良好。 但调试或添加功能会不必要地令人痛苦。
我不确定是否有任何社区成员能够就如何进行 MIDI 设备类提供指导、我们将看到。 我不记得以前出现了 MIDI。
为了达到这一目的、我在不久之前添加了一个仍将发布的 Host CDC 类、如果您想了解我是如何处理这种情况的、我可以与您共享这些文件。 尽管这比您尝试做的要简单得多、但我认为这可能是您的好参考点?
理想情况下、您将能够重复使用大量驱动程序文件本身、只需制作器件级文件即可处理音频和复合片段... 也就是说、实际的复合驱动程序可能是库中最痛苦的区域。 特别是如何处理描述符创建。 我预计您将面临一些额外的挑战、但如果您成功通过复合材料、您可能会一路前进。
尊敬的 Andy:
遗憾的是、我们没有使用音频或 MIDI 类的 USB 设备示例。 但是、TivaWare 库中同时提供了 USB_HOST_AUDIO 示例和 USB_HOST_AUDIO_IN 示例。 您可以在中找到它们 /examples/boards/dk-tm4c129x/. 虽然它们不是针对器件的、但我希望您可以更轻松地将这些主机示例用作起点、而不是 USB_DEV_BULK。
您好、Ralph、
我们的回答是交叉的。 感谢您的意见。
您好、Ralph、
感谢您的支持和同意! 我可以理解您的立场、即必须支持您未写的内容(之前在那里)。
至于主机 CDC 示例--正如您所知,主机和设备具有不同的功能。 对于器件端、它实际上归结为呈现描述符(响应 get_descriptor 请求)、然后当器件最终处于活动状态时、观察端点缓冲区中是否有新数据、并在端点缓冲区中呈现要发送到主机的数据。 从概念上讲、它很简单!
从我在大容量器件示例中看到的情况来看、我应该 能够使用其中的大部分、因为它实际上只提供了两个端点缓冲器。 但它将获得与该库所需格式相同的描述符。 我过去在新处理器上启动 USB 器件时所做的是使描述符正常工作并按预期枚举器件。 一旦主机将其视为 XYZ 类的器件、我就会使数据处理工作。 现在、我甚至没有看到它尝试连接到 USB 的瞬间、更不用说开始枚举了。
USB MIDI 实际上是一种易于实施的器件类、因为它不需要主机的自定义驱动程序、并且有许多主机工具可用于发送和接收数据。 (我喜欢 Mac 上的 PocketMIDI、有用于在 Python 中执行 MIDI 的 pyMIDI 库)。 一旦您了解了该课程如何定义"Jack"和"Jacks"之间的连接、一切都是正常的。
如果您选择从头开始实际重做 USB 器件库、但决定仅支持 MSP432E4器件、我对此完全满意、因为它们似乎是 Tiva 器件的超集。 为此我选择了 Tiva 部件,因为它们提供了我需要的东西--高速 USB (带有附加 ULPI 芯片)和100MB 以太网,而且公平地说,当我开始寻找时,TI 网站的器件过滤器/搜索功能显示了 Tiva 部件领先于 MSP432E4!
或者、我可能会跳入并为部件编写我自己的 USB 器件堆栈。 它会很有趣、对吧?
谢谢。
尊敬的 Andy:
从描述符的角度来看、您需要 仔细研究 USBDBulkCompositeInit API。 它将处理传递描述符信息的操作。
要快速测试描述符在结构上是否相似、您可以尝试修改 usbdbbulk.c 中的批量设备描述符 您需要重新构建 usblib 或手动链接它、以便应用更改、然后查看是否可以证明这样开始枚举。
希望您有一个 USB 分析器来查看发送的数据在您进行修改时是如何变化的。
[引用用户="Ralph Jacobi"]
尊敬的 Andy:
从描述符的角度来看、您需要 仔细研究 USBDBulkCompositeInit API。 这将处理传递描述符信息的操作。
我看到了! 我最初对这一点的削减是、基本上执行该函数中的操作、因为它似乎是执行实际工作的函数。 令人困惑的是、从 USB 规范的角度来看、该课程是一个复合器件。 它具有两个不同的接口。 但它不是同一类的两个实例、在 CDC 中有两个串行端口是复合的。 据我所知、库使用"复合"来表示后者、这就是它跟踪两个不同实例的交易的方式。
[引用]要快速测试描述符的结构是否相似、您可以尝试修改 usbdbbulk.c 中的批量设备描述符 您需要重新构建 usblib 或手动链接它、以便应用更改、然后查看是否可以证明以这种方式开始枚举。
好主意。 我已经将 usblib 源文件复制到我的工程中(并将-include 选项设置为指向它、我还删除了链接器内容中的 libusb.a 引用)。 我这么做了、所以我可以单步调试器中的库、看看什么是所谓的什么。
[报价]希望您有一个 USB 分析器、可以在修改时查看发送的数据是如何变化的。[/报价]
我可以了! 我已经有 Ellisys USB Tracker 很多年了--我买它是为了进行 TUSB3200A 设计。 (在那里、我自己正在老化。) 虽然我可能应该为用于高速产品的总相位 Beagle 480中的一个进行春季测试、因为其最终目标是使用 ULPI 芯片构建电路板并执行高速 USB。 (我没有做任何事情会调用 USB 3 SuperSpeed、因此使用 USB 2.0就足够了。)
无论如何、我会将我的描述符输入到批量示例的副本中、然后报告。
尊敬的 Andy:
很高兴看到概念证明效果良好。 您应该能够克隆大多数情况下批量描述符的处理方式、然后制作自定义 MIDI 描述符。 所有结构可能都有点乏味、但希望这能为您提供坚实的起点(也许您可以在过程中简化其中的某些部分)。
顺便说一下、当您转向高速时、如果您还没有看到它、我们提供了 TI 参考设计 :http://www.ti.com/tool/TIDM-TM4C129USBHS
几天后、我又回到了这里。
针对 Tiva 和 MSP432器件的所有类示例的所有文档都有一些关于设置各种内容的措辞、然后总是有一个调用:
"从主初始化函数调用[class]设备驱动程序初始化函数、以配置 USB 控制器并将设备放置在总线上。"
pvDevice = USBDCDInit (0、&g_sMouseDeviceInfo);
(例如鼠标设备)
这里有一个问题。
函数 USBDCDInit()声明为:
void USBDCDInit (uint32_t ui32Index、tDeviceInfo *psDevice、void *pvDCDCBData);
有第三个参数! 此参数是指向包含其他结构的结构的指针、它是一个未记录的混乱。
我是说、我理解 goofball 结构背后的原因。 源代码都编译为库、因此开发人员只需将库添加到项目中、并使用 VID、PID 和一些字符串填充空白。
它简直无法使用、这让我想知道是否有人会感到困扰。 最糟糕的是这些东西都不是新的-- Tiva USB 库文档的日期是2013年3月-- 2016年7月修订。 因此它是死的。 MSP432库完全相同、因此也是死的。
我正在寻找替代解决方案。 我想实际构建一些东西。
尊敬的 Andy:
对于 CDC、您将使用 USBDCDCInit 进行初始化、而不是 使用 USBDCDInit。
USBDCDCInit 稍后将在 其中调用 USBDCDInit、并声明为:
void * USBDCDCInit (uint32_t ui32Index、tUSBDCDCDevice * psCDCDevice)
话虽如此,我可以理解你的失望。 我们很明显地认识到它可以做得更好、但当它为成千上万的客户服务并从头开始重新做时、投资回报率将是巨大的努力、与其他活动相比、投资回报率还不够高。 我会将您的问题和投诉添加到 USB 问题列表中、但遗憾的是、这种情况很少出现、而是像现在使用的大多数工具一样。
就文件日期而言,这将是2.1.3。 您的 TivaWare 中应该有一个2017年2月的文档、该文档是 TivaWare 的最后一个版本。 3月将发布新版本、尽管对于 usblib、更改 仅限于几个错误修复和添加 USB CDC 主机。