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 MSC 与批量传输设备

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1124470/tm4c123ge6pm-help-usb-msc-vs-bulk-transfer-device

器件型号:TM4C123GE6PM

您好!

我正在尝试弄清楚如何使用 Tiva MCU 接近 USB 项目。  我需要使用批量传输将 MCU 作为器件进行传输。  这样、我就可以利用可用的最大总线带宽。  我正在使用 USB 2.0、并希望编写一个 python 应用来连接和测试固件。  我看到两个批量传输示例、例如 Tivaware usblib 中的示例、这非常有用。  但我也看到很多人使用 MSC 设备类。  我希望 Windows 10自动识别该接口、而无需安装用户驱动程序即可与 MCU 进行通信(使用批量传输)。   

因此、第一步、我将尝试确定以下内容:

1.您能否以 USB 2.0设备模式(如 MSC 海量存储设备)运行 MCU?  如果是、这是有道理的吗?

2. tivaware usblib 批量传输示例是否需要主机端的自定义驱动程序?  我注意到我的器件管理器显示了一个通用批量器件、但上面有一个黄色警告标志。

3.大容量存储设备类是否需要设备上有文件系统?  我只看到这种情况用于 USB 驱动器、它看起来像一个具有文件系统的驱动器。

此项目的顶层视图是使用批量传输在主机 Python 应用程序和 MCU 之间进行通信。  客户/最终用户无法安装任何驱动程序或支持软件/库/依赖项。  因此、我需要以一种利用标准 Windows 10支持的库/驱动程序进行通信的方式进行器件设置。

非常感谢您的帮助!

谢谢!

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

    您好、Robert、

    我将尝试回答有关这些问题的问题。

    对于问题1、是的、您可以在这种模式下运行器件。 关于它有多大意义... 我不是很确定。 如果唯一的目的是使用批量端点、我认为 CDC 或批量接口可能更好地提供服务?

    对于问题2、TM4C 更少、Windows 更少、我的知识相当有限。 在 TM4C 端、该器件需要一个标准的枚举过程、在该过程中、它提供了一些有关其所使用的器件类型、使用的端点等的基本数据-但 TM4C 并没有对驱动程序提出某种要求、要求将 Windows 告知其独特的协议。 它都是在枚举期间进行通信的标准 USB 接口。

    我的知识就在这里、Windows 需要什么以及如何将其用于"无驱动"安装。 Windows 中的整个驱动程序位通常侧重于 Windows、Windows 需要知道连接到系统的 USB 设备是否是有效的设备。 驱动程序包含已注册的 PID 和 VID 信息、并允许 Windows 将 USB 设备作为合法设备进行身份验证。 自 Windows 7以来、这种情况一直是 Windows 日益关注的焦点、我看到它们在允许未注册的 USB 设备正确枚举方面表现得更好。 如果可以使用某种现有/通用描述符来避免安装驱动程序、则需要在 Windows 端进行研究、因为它不是 TM4C 要求、而是 OS 要求。 我想对于 MSC 这样的设备来说、这些设备是存在的、因为您不必安装驱动程序即可使用 USB 记忆棒等。但我不确定使用这些设备的规则是什么。

    对于问题3、没有对一个的要求、但 MSC 表示海量存储类、通常用于 USB 记忆棒等用途、因此它的标准应用案例都使用文件系统、这就是您观察到这种情况的原因。 这又回到了我不确定 MSC 是否是 CDC 或批量存储器的最佳选择的时间点。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    感谢您的详细答复!  非常感谢您抽出宝贵的时间!  这很有帮助、似乎我怀疑 MSC 不是必需的。  根据您的经验、仅使用批量端点通信来移动数据是常见的吗?  这就是我真正需要的一切。  我刚冒险进入 MSC 域、因为我认为它可能解决了我针对该器件项目的"无驱动程序"即插即用方法。

    我确实看到了通用批量器件的图标。  您是否知道这是否意味着可以获得批量端点的保持?  它有警告图标、因此我不确定、我会继续对此进行详细介绍。  这听起来好像都是使用批量端点是很常见和正常的、因此这似乎是我现在要追求的一种好方法。

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

    您好、Robert、

    是的、使用批量端点是很常见的。 驱动程序无即插即用方法可能也有其他方法的解决方案、我不知道 Windows 如何处理其中的 MSC。 我可以看到、不需要安装的自动驱动程序基于文件系统级访问、就像部分过程决定 USB 驱动器的文件系统一样。 如果没有符合 Windows 预期的设备、它会将其视为非标准 MSC、并再次需要驱动程序。 我想我的最终会有一些简单应用的基本驱动程序、因为像裸机一样、USB 鼠标和键盘不需要任何驱动程序、它们只能工作(这些是 HID) 因此、希望有一个通用/基本驱动程序可用于您的用例中的批量驱动程序或 CDC 驱动程序。

    对于带有图标的通用批量器件、我认为它只是部分枚举、它需要一个驱动程序来帮助完成枚举-我们在 TivaWare 中拥有的 windows_drivers 应该修复该位。 这是因为我们的默认枚举基于我们为 LaunchPad 等器件批准的 PID/VID、并且我们提供了驱动程序来根据此进行枚举。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    我运行了一个流量记录器来捕获枚举过程、似乎缺少一些内容。  跳出的一个方法是不显示接口描述符。  下面是枚举的屏幕截图、您可能认为它仅部分枚举是正确的。  

    我尝试使用批量端点、但无需提供驱动程序。  我还为我的产品购买了 PID/VID 号、因此我有自己的。  实际上、我希望能够完全按照您所指出的 HID 操作-基本上只需插入并使用 Windows 提供的默认驱动程序即可。  就像可以使用 HID 一样、我想使用批量端点来实现它。  我认为有一个名为 libusb1.0的 python 主机库可用、但我不确定如何枚举器件。

    那么、似乎有一个选项可以在 tivaware usblib 中修改这个示例项目、以便在枚举过程中取得更多进展、而无需您提到的 TI 提供的驱动程序?  我之所以尝试避免使用您的驱动程序、是因为我不想向客户提供我的主机应用程序。   

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

    您好、Robert、

    您无需修改代码的 usblib 中的任何内容。 库使用的枚举描述符在应用程序中的 USB_bulk_structs.c 等文件中定义  

    在该文件中、您可以将发送的内容更改为不是基于 TI 的驱动程序、而是您自己的驱动程序。

    我们已经定义了属于参考文献的 VID 和 PID 数据、但您只需将其替换为您自己的:

    tUSBDBulkDevice g_sBulkDevice =
    {
        USB_VID_TI_1CBE,
        USB_PID_BULK,
        500,
        USB_CONF_ATTR_SELF_PWR,
        USBBufferEventCallback,
        (void *)&g_sRxBuffer,
        USBBufferEventCallback,
        (void *)&g_sTxBuffer,
        g_ppui8StringDescriptors,
        NUM_STRING_DESCRIPTORS
    };

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    我之前看过这个、我没有提出它的原因是因为我认为它没有足够的信息告诉窗户做这样的事情。  我确实看到了 VID/PID、但我没有看到任何其他可以向 Windows 传递信息的字段。  您是否知道更改 VID/PID 是否足够?  TI VID/PID 可能是在器件和 TI 主机驱动程序之间进行连接的过程?

    其余的信息似乎只是回调、缓冲区和字符串描述符、因此我猜我对主机尝试驱动程序的实际字段的理解仍然存在差距。   

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

    您好、Robert、

    老实说、这是我对 USB 描述符的了解细分的地方。 我更熟悉端点的工作原理、而枚举在配置实际数据流方面的技术层面也更强。 当涉及 PID、VID、描述符名称等"驱动器"方面时、我不知道需要什么以及如何将描述符调整为无驱动器。

    我可以说的是、USB 库使用传递给它的结构来发送所有描述符数据。 它将添加详细信息、例如需要多少个端点、每个端点编号是什么、 端点的类型等、但从 USB 驱动程序的角度来看、Windows 使用的端点类型包含在应用层中、因此您无需修改 USB 库即可更改器件从驱动程序的角度进行枚举的方式。

    此致、

    Ralph Jacobi