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.

[参考译文] TUSB8041:USB 2.0键盘出现故障时 USB 集线器断开连接

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/847213/tusb8041-usb-hub-disconnect-when-usb-2-0-keyboard-fails

器件型号:TUSB8041

您好!

我已经基于 TUSB8041A 创建了一个运行良好的 USB 集线器设计。 集线器显示在 USB 总线上、当我将 USB 高速设备连接到它时、它们会以5Gbit/s 的速度显示并按预期工作 到目前为止、一切都很好。

在设计中、我还需要一个"键盘"、以便在按下硬件按钮时触发某些键击。 这是以 STM32F103C8T6的形式实现的、USB HID 固件以 USB 全速运行。 我已在试验电路板上以 BluePill 电路板的形式(见图)和最小化的形式单独测试了此设计的"键盘"部分、 STM32F103C8T6焊接到分线板上、只需一个晶振/电容器+ D+线上的单个1.5k 上拉电阻器(见图)。 这两种设计都能完美工作。 在任何计算机(Windows、Ubuntu、OSX)上、它们只是显示为键盘并正常工作。 仍然很好。

问题是、当我将 STM32F103C8T6设计移至与 USB 集线器相同的电路板时、它将不再工作。 不仅如此、当 STM32F103C8T6键盘出现故障时、它还经常下拉 TUSB8041A 集线器。 有关发生的情况的 Unix 日志示例,请访问 :https://zerobin.no/?d14cd1e3e778e8e8#B8SyCLgnBcssc163t42Lq48GeBcvJP3EoHCMtx4bPF7Z 

如果我切断集线器和 STM32F103C8T6之间的布线、集线器将正常工作。 然后、如果我焊接 Bluepill 试验板或 STM32F103C8T6分线板的 GND、DP 和 DM、它将完美工作。 没有任何错误。 始终启动并正常工作。

那么-我的问题是-什么会导致同一器件的更理想实施版本 (在具有差分匹配布线的同一 PCB 上的 STM32)出现故障、而非常不理想的设计(使用不同长度的可怕质量的电线、以及糟糕的试验电路板连接、 焊接到 USB 集线器板上)可以完美地工作?  如果 在同一 PCB 上实现 USB 器件、TUSB8041A 是否有时序要求会中断? 连接是否"太好"? 这是否是计时问题? ( STM32F103C8T6器件将在 TUSB8041A 之前的几毫秒启动、因为只有集线器具有时序要求)

关于通信:使用示波器进行测试表明、STM 器件只会偶尔响应集线器发送的复位。 集线器发送复位信号、然后 STM 仅偶尔做出响应。 如果不是因为测试表明同一器件在实际的 PBC 上(而是在试验电路板上)能够正常工作、那么我会说这是 STM 的故障。 这是一个显示 DP/DM https://www.youtube.com/watch?v=ZxSBaxUTLRI 上信号的视频

我已经尝试了很多天和晚上找到解决方案、我已经用尽了我的想法池。 我迫切需要有更多经验的人提供帮助。

(附带原理图+试验电路板设置和采用 STM 的 PCB 图片)

e2e.ti.com/.../Schematic0.2.pdf

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

    尊敬的 Jens:

    部分问题可能是 R22 (键盘上拉1、1K)被直接拉至为集线器供电的相同3.3V 电源轨。  USB 集线器或主机使用 DP 线路变为高电平来检测其下行端口上的连接事件(请参阅 USB 2.0规范的第7.1.7.3节以了解详细说明)。  DP 上拉电阻只应在检测到施加了 VBUS 时被拉高-对于嵌入式应用、您可以通过集线器的 pwrctl 输出来确定何时应用 VBUS。

    我想从那时起集线器和键盘就不同步了、键盘可能会认为它已挂起、并且希望恢复、此时集线器可能会检测到某种连接并尝试重置端口。  您是否可以尝试从外部为 DP 上拉电阻器供电并查看它是否有助于解决问题?

    此致、

    JMMN

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

    感谢您的快速回复

    我也认为这必须与时间有关,但我似乎无法解决。 今天、我尝试直接从我的编程器驱动 DP 上拉电阻器的高侧、并连接了电路板上的接地端。 这不会产生任何差异。 我还尝试将其连接到 STM32、并在500ms 后将其设置为高电平、没有任何变化。

    我注意到、重置 STM32在我的 Mac 上工作时似乎有所帮助。 当我在 PC 上尝试时、此方法失败。 我尝试在 STM32上设置一个0.1秒的 RC 延迟、但这没有改变。 然后、我尝试对 TUSB8041的 GRSTz 使用10uF 而不是1uF、但这也不会导致变化。

    在所有这些测试中、HID 设备将显示一些时间、但在我的 Mac 上不一致。 在 PC 上、它将永远不起作用。 Windows 将设置集线器、但 HID 在所有情况下都失败。 这两个试验电路板示例在任何操作系统上都能完美运行、因此我确信固件是可靠的。 它基本上只是使用 HAL 的默认 HID 示例、它充当鼠标。 如果设备工作、光标将移动。

    我想进一步了解到底失败了什么。 我可以访问 Windows、Mac 和 Linux 计算机、但需要更好地反馈失败之处。 任何指向用于 USB 调试的软件的指针都很棒。

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

    对于发现此主题的其他人、请搜索有关如何使 USB 器件与 TUSB8041 (或其他 USB 集线器)在同一电路板上平稳运行的答案、下面是导致我的问题的原因及其解决方案。

    上面 JMMN 的建议是解决方案的一半:确保到 USB 器件的 DP 上拉电阻不会直接被拉至电源轨。 这将导致集线器立即开始与它进行通信、并且需要一些 MS 来初始化这些微型器件上的 USB 堆栈。 这导致集线器在初始化 USB 堆栈时开始通信。 我通过让微控制器首先初始化 USB 固件、然后使用微控制器本身将 DP 上的1.5k 电阻器拉高来解决这个问题。  

    另一半是为微控制器提供更多启动时间、以便集线器准备好接收 DP 变高。 我使用简单的 RC 延迟实现了这一目的、该延迟是使用  DigiKey 上的工具 www.digikey.no/.../conversion-calculator-time-constant 计算得出的。

    希望这对某人有所帮助!