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.

[参考译文] TM4C123GE6PM:USB 端点-如何实现更多

Guru**** 656470 points
Other Parts Discussed in Thread: EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1121840/tm4c123ge6pm-usb-endpoints---how-to-implement-more

器件型号:TM4C123GE6PM
主题中讨论的其他器件:EK-TM4C123GXLTM4C123DK-TM4C129X

您好!

我有一个 hid 数据管道设备正在启动和运行、我正在尝试确定是否可以使用部件中的其他端点来传输数据。  我认为 HID 通常是1输入、1输出和1配置、但由于数据擦除器件是可定制的、是否可以在器件中使用其他端点?  我问、因为您似乎可以向我已经工作的 USB 接口/器件添加其他端点描述符。

我只是对以下问题有一点不确定。

1.是否可以修改 USB HID 描述符、以便一个 hid 设备可以利用 Tiva MCU 中的所有8个端点?

如果是,驱动程序库如何确定要使用的管道-我正在使用调用  USBDHIDReportWrite() 调用,我只需将其传递为64字节缓冲区。  如果我尝试用更多端点描述符枚举我的器件、如何告知驱动程序库从哪个端点发送数据/缓冲区?

3.如果无法自定义 HID,是否有人知道下一个最佳选项是什么?

理想情况下、我想更新我的现有系统、以利用器件中剩余的未使用端点缓冲区。   

感谢您的任何帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robert、

     我不是 USB 专家。 我相信根据 USB 协议、您可以为每个接口指定多个端点。 换言之、可以为一个接口指定8个端点。 但是、正如您已经知道 的、TivaWare USB 库中的当前 HID 类专为3个端点(1个中断输入、1个中断输出和1个结束点0)而设计。 如果您需要使用更多端点、 我认为您需要进入 USB 器件 API 级别。  我们的示例由器件 类驱动程序 API 抽象化。 我们没有任何示例可以展示应用程序直接与 USB 器件 API 连接的情况。 您需要浏览 USB 库用户指南(第2.23节)、了解如何直接从应用中使用 USB 器件 API。 我认为、可能需要调整主机端的驱动器以利用不同的端点。  这可能会成为您也需要注意的自定义驱动程序。  

    2.2.2 USB 库器件 API
    USB 库器件 API 提供了一组专门用于开发的函数
    功能齐全的 USB 器件应用、具有尽可能多的独立类代码
    包含在 USB 库中。 API 通过来自的标准请求支持器件枚举
    代表应用程序托管和处理端点零状态机。

    使用此接口的应用程序提供了它希望在期间发布到主机的描述符
    初始化、它们提供了 USB 器件 API 配置所需的信息
    硬件。 与 USB 器件相关的异步事件通过方式通知应用程序
    在初始化时还提供给 USB 器件 API 的回调函数集合。
    此 API 用于开发 USB 器件类驱动程序、也可直接使用
    提供现有类驱动程序不支持的 USB 功能的应用程序。
    此类器件的示例包括需要复杂备用接口设置的器件。
    USB 器件 API 可被视为 USB DriverLib 的一组高级器件扩展
    而不是包装器。 在开发 USB 器件 API 时、会调用
    底层 USB DriverLib API 仍是必需的。
    USB 器件 API 的头文件为 device/usbdevice.h

    2.23使用 USB 器件 API
    如果现有的 USB 设备类驱动程序不适合您的应用程序、您可以选择
    而是使用更低级的 USB 器件 API 来开发您的器件。 这提供了更大的灵活性、但是
    涉及更多工作。 使用 USB 器件 API 创建器件应用涉及
    几个步骤:
    -构建设备、配置、接口和端点描述符结构来描述您的设备。

    -为您的设备希望从 USB 接收的每个 USB 事件编写处理程序
    库。
    -调用 USB 设备 API 以将设备连接到总线并管理标准主机交互
    代表您。


    以下各节将介绍这些步骤中的每一个步骤、并提供代码示例来说明
    过程。 还可以在 DriverLib 版本中找到说明库用法的工作示例
    适用于支持 USB 的评估套件。
    以下各节中使用的术语“设备代码”描述了所有编写的特定于类的代码
    以实现特定的 USB 器件应用。 这可能是其中之一
    应用代码或 USB 器件类驱动程序。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的回答!  您对主机驱动程序有了很好的了解。  如果我不需要在主机或 TI USB driverlib 器件端进行开发、我真的不想重新发明轮子。   

    那么、您认为最好的方法可能是使器件成为"复合"(我认为是正确的)、同时具有 hid 和大容量存储、并且只使用大容量存储进行大数据传输。  那么、对于操作系统、它们是两个完全受支持的器件(或接口不确定此处哪一项是正确的)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robert、

     您需要检查主机侧 HID 驱动程序是否可以支持多个端点。 如果可以、您可能不需要重写主机驱动程序。  

     另一种选择是同时支持 HID 和 MSC 的复合设备。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Charles、

    MSC 非常有吸引力、因为它可以使用额外的带宽。  在读取规范时、它听起来像是一个 MS、而不是一个64字节数据包、它可以(如果总线不忙)每1 ms 发送多个64字节数据包。  您是否知道如何使用驱动程序来处理它。  作为一个器件、您是否在一个端点上使用写入数据调用、如果有带宽、主机是否从一个端点中拉出多个64字节块、或者您是否需要使用并行端点来利用 MSC 利用未使用带宽的能力。

    我一直在阅读 usbdriverlib 文档、但不清楚如何使用 API、以便 MSC 可以利用额外的带宽。  我猜您只需保持一个端点(我的部分为4K 缓冲器)处于填满状态、协议就会确定它。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robert、

    [引用 userid="482605" URL" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forum/1121840/tm4c123ge660-usb-端点-如何实现-more /4161352#4161352]MSC 非常吸引人、因为它可以使用额外的带宽。  在读取规范时、它听起来像是一个 MS、而不是一个64字节的数据包、它可以(如果总线不忙)每1 ms 发送多个64字节数据包。

     这也是我的理解。  MSC 使用批量传输类型(不是中断或等时传输)。 因此、对于 全速端点、 如果总线空闲、多个批量传输可以在一个1ms 的帧内发生(中断传输和等时传输被限制为每帧最多一个数据包)。 理论上、您可以 使用批量传输达到每秒1MB 的吞吐量、但实际上、我认为 这要比这低得多。 全速模式的最大吞吐量为12Mbps、即1.5Mbps。 如您所知、每次传输都有开销(例如令牌、端点地址、CRC、ACK 等)。 批量传输的开销为13字节。 如果您的数据有效载荷是64字节、则意味着13/(13+64)= 17%与开销相关。  每个 USB 协议还有一些位填充、需要保留10%的带宽。 这样您就可以获得最大1Mbps 的速率。  

     我们有一个 MSC 示例。 您可以在 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\dk-tm4c129x\USB_dev_msc 中找到它。 尽管此示例针对的是 TM4C129、但我认为您可以参考它并针对 TM4C123进行调整。 USB 库对于两种器件是通用的。 我不确定您的应用是什么。 如果您正在寻找最大带宽、还可以考虑 使用批量传输的 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\USB_dev_bulk 示例。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Charles,你们是一个巨大的帮助!  非常感谢您抽出宝贵的时间!