工具/软件:Linux
我们有大量的 USB 串行器件、我们的主机软件需要与这些器件进行主动通信。 我们使用的是 AM3358、并且在 TISDK 版本05.00.15上。
USB 设备树如下所示:
/:总线01.Port 1:DEV 1、class="root_hub"、Driver=musb-hdrc/1p、480M
||端口1:DEV 2、If 0、class="Hub"、Driver=hub/7p、480M
端口1:DEV 8,如果为0,则为“集线器”,驱动程序=集线器/2p,12M
||端口2:DEV 10、IF 1、class="CDC"数据、Driver=CDC_ACM、12M
||端口2:DEV 10、If 0、CLASS="Communications"、Driver=CDC_ACM、12M
||端口1:DEV 9、If 0、CLASS="Communications"、Driver=CDC_ACM、12M
||端口1:DEV 9、If 1、class="CDC" Data、Driver=CDC_ACM、12M
端口2:DEV 5、If 0、class="Hub"、Driver=hub/2p、480M
端口1:DEV 6、If 1、class="CDC" Data、Driver=CDC_ETH,480M
端口1:DEV 6、If 0、CLASS="Communications"、Driver=CDC_ETher、480M
||端口2:DEV 11、If 0、CLASS="Communications"、Driver=CDC_ACM、12M
||端口2:DEV 11、If 1、class="CDC" Data、Driver=CDC_ACM、12M
||端口4:DEV 7、IF 1、class="CDC"数据、Driver=CDC_ACM、480M
||端口4:DEV 7、If 0、CLASS="Communications (如果为0、则为"通信")、Driver=CDC_ACM、480M
||端口5:DEV 13、If 0、class="Hub"、Driver=hub/4p、480M
||端口4:DEV 14、If 0、CLASS="Communications"、Driver=CDC_ACM、12M
||端口4:DEV 14、IF 1、class="CDC"数据、Driver=CDC_ACM、12M
||端口6:DEV 12、If 0、CLASS="Communications"、Driver=CDC_ACM、12M
||端口6:DEV 12、IF 1、class="CDC"数据、Driver=CDC_ACM、12M
从读取 USB 描述符开始、所有这些器件都需要1个中断 EP IN、1个批量 EP IN 和1个批量 EP OUT。
当尝试一次打开每个 ACM 设备时、我在最后一个设备上撞到墙上、但 dmesg 中出现以下错误。
[815.079223] musb-hdrc musb-hdrc.1:对于1x64、int hwep alloc 失败
[815.079223] musb-hdrc musb-hdrc.1:Int[815.090737] CDC_ACM 1-1.1.1:1.0:ACM_PORT_ACTIVATE - USB_submit_话 术(ctrl IRQ)失败对于1x64、hwep alloc 失败
[815.090737] CDC_ACM 1-1.1.1:1.0:ACM_PORT_ACTIVATE - USB_SUBMIT (Ctrl IRQ)失败
我已经阅读过一些论坛上的帖子、这些帖子涉及特定于中断端点的器件数量限制。 由于每个器件需要两个 EP IN、因此接入主机的端点是我的限制因素。
对我的 EP INs 进行计数、我看到:
4个集线器
1个 ECM 设备
6个 ACM 设备
当从用户空间打开设备时、ACM 设备的 EPS 看起来是分配的。 ECM 设备的 EP 在连接时分配(在我的情况下、是在启动期间)。
通过驱动程序读取数据似乎表明、一旦所有其他可用端点都用尽、EP1上的批量端点将会复用、因此我不太理解为什么我在执行此操作时会达到限制。
假定 EP0被保留用于控制、这将为专用批量传输留下3个潜在的 EPS 加上用于其它复用的 EP1。
我在这里缺少一些基础知识吗?