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.

[参考译文] TM4C123FH6PM:USB:在复合 USB 器件中添加和删除 CDC 器件

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1030026/tm4c123fh6pm-usb-dinamically-add-and-remove-cdc-devices-to-composite-usb-device

器件型号:TM4C123FH6PM

您好!

在我的设计中、我需要创建使用 CAN 总线连接到其他器件的器件、以及使用 USB 连接到主机的器件。 该器件应为连接到的每个 CAN 器件添加 CDC 器件、然后将其移除、再断开连接。  

在我阅读 spmu297e 文档时、我看到 了用于添加复合器件的 USBDCDCCompositeInit()函数和 用于向下转换的 USBDCDCTerm ()、但有一条注释: "如果 CDC 器件是复合器件的一部分、则不应调用此函数、而应针对完整复合器件调用 USBDCompositeTerm ()函数。" 但我不需要关闭整个复合器件、而只需要关闭一个 CDC 器件、如何操作?

谢谢!

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

    您好 Oleg、

    我不确定 USB 标准是否真的可以做到这一点。 我没有听说过这样的设置。 USB 对复合设备的工作方式是:连接时,复合端口通过描述符共享存在复合设备的每个端口的信息来进行枚举。 这只在初始连接和枚举上完成、因此除了重新枚举之外、没有任何方法可以在之后更新此内容。 因此、如果您终止了 CDC 端口、主机仍会期望它在那里、并且可以在器件不知情的情况下尝试连接到该端口。 除非枚举再次启动并且器件向主机通知具有正确端口数的新描述符、否则无法解决此问题。

    相反、我建议断开连接、以便主机未连接到 CDC 端口、但它可用于将来的连接。 这样它就不在使用中、但在适当的情况下可用。 我觉得这是最好的解决方案、但如果您认为这最适合您的系统、当然也可以选择重复枚举、具体取决于情况的发生频率。

    此致、

    Ralph Jacobi

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

    好的、也许我不应该关闭器件、因为从 CAN 断开是异常情况、但是我需要逐个添加 CDC 器件、因为它们出现在总线上。 有可能吗? 我需要这样做、因为我需要查看哪个器件使用哪个端口、这些器件没有内置的识别功能。

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

    您好 Oleg、

    我的第一个想法是做一些类似的事情... 您最初枚举表示您有 x 个 CDC 器件-这将是您的最大数量-但随后不与它们连接。 只需将指示器设为存在即可。 这样、主机就知道可以进行额外的连接。

    然后、根据需要根据 CAN 连接连接和断开它们。 这样、无需更新描述符、但您可以根据需要连接其他 CDC 端口、也可以选择断开 USB CDC 端口。

    此致、

    Ralph Jacobi

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

    问题在于主机应知道器件连接的时间、并查看 COM 端口出现/

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

    您好 Oleg、

    我对这种用例并不是很熟悉。 我认为也许替代方法是使用 Suspend 和 Resume 类型命令来处理此问题、但实际上、我并不熟悉复合器件想要在初始枚举之后添加和删除新 CDC 端口的应用、如您所描述的那样。

    此致、

    Ralph Jacobi