通过USB集线器与设备通信的问题

时间:2018-02-05 10:53:43

标签: usb microcontroller descriptor

通过USB集线器与设备通信时,我遇到了问题。将设备直接枚举到主机端口时,它确实有效,但是usb集线器上的某些设备存在问题。

设置:STM32F103C8 - MAX3421E - LUFA(USB堆栈)(移植到MAX3421E(主机)和STM32F103C8T6(器件)) - USB全速设置

方案: 当我将设备直接连接到主机时,我几乎没有遇到任何问题(一些设备似乎有故障并且有奇怪/非标准行为)设备。但是当我尝试枚举usb集线器时,设备开始表现得非常奇怪。我从设备收到的NAK比直接连接到主机的NAK要多得多。某些设备能够返回设备描述符,但检索配置描述符失败。有些设备在几个NAK之后返回Toggle Error,到目前为止,这可以通过延迟重试IN令牌来解决。当通过不同的集线器连接时,设备也有不同的行为。即连接到HUB1时,一个设备没有问题,但连接到HUB2时会出现问题。然后我有HUB3(7端口),内部充当HUB中的HUB。在这个HUB3设备上,在辅助内部集线器后面的端口上正常工作,但不能暴露在" root"毂。

我怀疑中心的TT可能会以某种方式干扰USB通信,但根据我发现的信息,不应在全速设置下启用TT。

我已经检查过(多次)我在SetAddress阶段设置了正确的设备地址(通过返回设备描述符证明了这一点)。当我进行调试时,似乎我也可以获得配置描述符,但在正常系统运行时,它不会被检索,但只能通过集线器。

有没有人有任何想法,需要照顾什么?在试图找到根本原因的一周之后,我已经没有想法了。

由于

1 个答案:

答案 0 :(得分:0)

...这样 - 像往常一样,在寻找根本原因之后,经过几天的尝试后解决方案在某个地方询问后自然而然(这总是让我感觉很好,但我总是先尝试一下) - 使用集线器时,请确保在控制传输期间不暂停SOF生成。 LUFA只是在控制传输例程中恢复总线,所以请确保你不要停止并重新启用SOF(我的错,因为我使用移植版本到MAX) - 如果你有一个紧密的主循环,请确保你没有完成以前的尝试重新初始化usb传输,但如果你这样做,检查你不要写入尚未完全处理的数据(特别是在使用中断驱动时)转移完整处理)[当你有一些调试输出时,事情似乎工作,因为它延迟时间关键转移]

集线器上的枚举现在是首屈一指的。小故障可以调整。

不幸的是,由于我对电气问题的质疑,我不得不拆开USB主机屏蔽并焊接另一个,根据新信息似乎不需要。没关系,我已经训练了我的焊接技巧。