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.

[参考译文] TM4C1294NCPDT:Tivaware USB 主机集线器如何枚举下游器件?

Guru**** 2485705 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/732569/tm4c1294ncpdt-how-tivaware-usb-host-hub-enumerates-downstream-devices

器件型号:TM4C1294NCPDT

尊敬的 TI:

我尝试将 Tivaware USB 主机集线器移植到 BeagleBone Black、基本上只需按照 Tivaware 示例项目在 StarterWare 上返工即可。

我最困惑的是 usbhostenum.c 如何查找下游器件。

这是我的观察结果、

1. usbhostenum.c 中的以下3个函数似乎没有被任何其他函数/程序调用。 我将其注释掉并重新编译示例工程后、不会产生任何影响。

GetEventFlag (uint32_t ui32Event)、

USBHCDEventEnable (uint32_t ui32Index、void *pvEventDriver、uint32_t ui32Event)

USBHCDEventDisable (uint32_t ui32Index、void *pvEventDriver、uint32_t ui32Event)

2. main 函数不断调用 USBHCDMain (void)、并从 USBHCDMain (void)内部进一步调用 USBHHubMain ();

集线器成功打开后、g_sUSBHCD.piDeviceState[DEV_NUM]仍停留在 eHCDdle (位于  usbhostenum.c 的 USBHCDMain 中)而 g_sRootHub.psPort[ui8Port].iState suded (位于 USBHubMain.c 中)中、 最后从 USBDhubhub_DevicePort[ui8Port].iState]更改为下行器件、然后从 USBDevicePort_DeviceConfigded.c、并从 duedu.eDeviceId_DeviceIdle 变为下行器件。

我不了解 g_sRootHub.psPort[ui8Port].iState 如何成为 ePortConnected

usbhHUB.c 中的 HubIntINCallback ()具有案例 USB_EVENT_RX_Available:案例 USB_EVENT_Scheduler:

它读回 g_ulHubChanges、该文件进一步分配给 g_ulChangeFlags、并指示 DEV_NUM 位置、即我的测试2、4、8、16。 (0已被集线器控制器占用)、这表示在 psPorts 位置1~4处查找下游器件。

出于某种原因、在我的移植代码中、USB_EVENT_Scheduler 的情况总是返回 g_ulHubChanges=0;我不确定我的移植代码是被置位、还是 USBHCPepeSchedule 实际接收到0值。  

 

希望 TI 专家能详细介绍一下。 提前感谢。

Mike

 

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

    我们不能真正支持将 TivaWare USB 库移植到 BeagleBone、但当我周一返回办公室时、我可以尝试查看您对该库的一些特定问题。 虽然我是 USB 团队的"专家"、但我不是编写 USB 堆栈的人、因此我可能无法回答所有问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph Jacobi、

    感谢您的快速回复、并期待您的指导。

    最好

    Mike

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

    关于 ePortConnected、

    看起来这是由 API HubDriverDeviceConnect 设置的、当 hub_port_status_device_present 的状态检查通过时、该 API 会在 USBHHubMain 内调用。

    关于 G_ulHubChanges、

    我认为唯一确切的方法是监控 USB 总线并亲自查看发送的内容。

    我的理解是、在移植之前、它返回非零值、现在它只返回0? 如果是、我会担心存在问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph Jacobi、

    感谢您的建议。

    我放弃了 StarterWare usblib 的返工。 相反、在上一篇文章//e2e.ti.com/.../439277 之后、将 Tivaware usblib 移植到 StarterWare 工程中、但仍然缺少 DMA (MSC 请求 DMA 写入/读取数据、而 Tivaware 中不提供 Tivaware UDMA)

    我成功地将 StarterWare DMA 插入到 Tivaware usblib 中。

    现在一切都运行良好。

    感谢您的支持。

    最好

    Mike