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.

[参考译文] Linux/AM3352:TUSB2036集线器的稳定性问题

Guru**** 2587365 points
Other Parts Discussed in Thread: TUSB2036, AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/593133/linux-am3352-stability-issue-with-tusb2036-hub

器件型号:AM3352
主题中讨论的其他器件:TUSB2036

工具/软件:Linux

团队、

我正在使用基于 AM3352的客户网关设计、并将一个3端口集线器 TUSB2036器件连接到 USB0、而 USB0又被配置为仅主机。

要求是使用连接到 u-boot 为目标文件系统映像安装的下行集线器端口之一的 USB 大容量存储器件来调试 eMMC 闪存

我们将 USB_DRVVBUS 输出连接到 USB 开关、将 VBUS 环回 AM3352以满足 MUSB 控制器状态机的要求、但否则 TUSB2036在每个端口上都有下行开关、并配置为自供电集线器。

u-boot 存在问题、首先可靠地检测下游集线器、其次在检测到集线器时正确枚举连接到下游集线器端口的 USB MSD 和 USB 以太网设备。

当外部供电集线器直接连接到 USB0 (使用绕过板载 TUSB2036的分线电缆)时、安装连接的器件也不会出现问题、这与此类似

我们的理解是、USB 模块在用作主机时对 USBn_VBUS 进行了两次检查。 顺序:
1) 1)确保在我们将 USBn_DRVVBUS 置为有效(VBUS 电源开关控制)之前不存在 VBUS。 MUSB 控制器具有双角色功能,因此我们需要确保在提供 VBUS 之前不会提供 VBUS。 对于将 VBUS 硬接线至系统5V 的实施、可通过 SW 覆盖此检查。
2) 2)确保 VBUS 在 Us 发出 DRVVBUS 后的100ms 内有效(>=4.4V)。 此处用于感应 VBUS 电源开关 OC,因为我们没有用于 OC 的分立引脚。 不能覆盖此选项。

TUSB2036本身将在硬复位或软复位15ms 后向 USB_DP0施加1K5上拉电阻、以向 AM3352上的上行 USB0端口提供信号可用性。 然后、在转换到"睡眠"模式之前、它将等待上游控制器连接长达3ms。

我们看到、当 u-boot USB 集线器代码尝试配置集线器并枚举端口时、VBUS 会下降。 启用调试会使其工作(大部分)、但仍会出现时序问题。 仍然不清楚代码是强制 VBUS 掉电、还是 USB 模块在内部执行。

初始化 USB 控制器和下游 TUSB2036集线器器件时、似乎存在细微的时序相互依存关系。

以下是 u-boot 报告的摘录、包括 HUB 产品文本:

musb_lowlevel_init:DEVCTL = 19
musb_lowlevel_init:DEVCTL = 5D
_musb_reset_root_port:电源= E0
_musb_reset_root_port:DEVCTL = 5D
扫描总线0器件... 新器件0
_musb_reset_root_port:电源= E0
_musb_reset_root_port:DEVCTL = 5D
设置地址1
get_conf_no 0结果25、wLength 25
if 0、EP 0
##EP maxpacketin[1]= 1
设置配置1
新器件字符串:MFR=0、产品=1、

USB 设备制造商0语言 ID 0x409
通用 USB 集线器
串行编号
1 USB 设备找到
扫描端
正在扫描存储设备的 USB ... 找到0个存储设备
正在扫描 USB 以太网设备... 找到0个以太网设备
=> 

如果以串行方式引导 Linux、则我们始终无法从 USB 引导 Linux、最后记录以下内容:

[2.354562]正在等待根设备/dev/sda1...
[2.468822] USB 1-1:使用 musb-hdrc 的新型全速 USB 器件编号2
[2.611069]集线器1-1:1.0:找到 USB 集线器
[ 2.614973]集线器1-1:1.0:检测到3个端口
[2.620276] musb-hdrc musb-hdrc.0.auto:在 a_host 中 VBUS_ERROR (89、 -19
[ 3.998796] USB 1-1:使用 musb-hdrc
[4.140803]集线器的新全速 USB 器件编号3:集线器1-1:1.0:找到 USB 集线器
[ 4.144696]集线器1-1:1.0:检测到3个端口
[4.428794] USB 1-1.2:使用 musb-hdrc 的新全速 USB 器件编号4
;USB 1642:未在顶部运行 连接到高速集线器
[5.372200] aSix 1-1.2:1.0 eth0:寄存器'aixe'、位于 usb-musb-hdrc.0.auto-1.2、ASIX AX88772 USB 2.0以太网、7c:C3:A1:86:9a:4c

虽然它在第二次尝试时确实找到了以太网适配器一次、但似乎没有安装大容量存储设备。

我们尝试插入延迟并将 USB 集线器保持在复位状态、直到 MUSB 控制器启动、但是连接和设备操作仍然非常不稳定。

您能否评论要使用的正确初始化序列以及任何时序或驱动程序时序依赖项。

此致、
Garry

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

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

    这是一个最新的 ti-processor-sdk-linux-am335x-evm-03.02.00.05 (因为开发开始时这是最先进的)内核、内核为 linux-4.4.4.3.32+gitAUTOINC+adde2ca9f8-gadde2ca9f8 (即 SDK 随附的树)。

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

    请参阅下面的逻辑分析仪跟踪记录与失败连接尝试和上述后续 VBUS 下拉方案相关的各种信号的状态:

    此致、

    Garry

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

    "在我们将 USBn_DRVVBUS (VBUS 电源开关控制)置为有效之前、确保 VBUS 不存在是一项硬性规定。" 是否可以通过删除此逻辑来尝试? 在预期时间内、将 VBUS 电压提高到有效 VBUS 电平上似乎存在延迟、因此 VBUS 误差。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您能否详细说明"预期时间"? VBUS 在大约1.9ms 内达到4.4V、在大约2.4ms 内达到完全电源电平(5.2V)-我被引导至相信 Sitara 上有效 VBUS 的窗口明显长于此窗口。

    此致

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

    我已通知 USB 专家。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Dwarakesh R">您好,Garry,

    "在我们将 USBn_DRVVBUS (VBUS 电源开关控制)置为有效之前、确保 VBUS 不存在是一项硬性规定。" 是否可以通过删除此逻辑来尝试? 在预期时间内、将 VBUS 电压提高到有效 VBUS 电平上似乎存在延迟、因此 VBUS 误差。

    [/报价]

    这是器件操作的默认设置。 操作系统必须配置为跳过此规则。

    范围图显示了尝试的枚举。 如果 VBUS 测试失败、则不会发生这种情况。

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

    [引用用户="Garry Clarkson"]

    以下是 u-boot 报告的摘录、包括 HUB 产品文本:

    musb_lowlevel_init:DEVCTL = 19
    musb_lowlevel_init:DEVCTL = 5D
    _musb_reset_root_port:电源= E0
    _musb_reset_root_port:DEVCTL = 5D
    扫描总线0器件... 新器件0
    _musb_reset_root_port:电源= E0
    _musb_reset_root_port:DEVCTL = 5D
    设置地址1
    get_conf_no 0结果25、wLength 25
    if 0、EP 0
    ##EP maxpacketin[1]= 1
    设置配置1
    新器件字符串:MFR=0、产品=1、
    
    USB 设备制造商0语言 ID 0x409
    
    
    找到通用 USB 集线器串行编号1 USB 设备 

    [/报价]

    您是否始终看到相同的日志?

    它显示检测到并枚举了集线器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常多。 代码中的一些检测表明 u-boot 会在要探测的集线器上构建一个三个端口的列表、但 VBUS 在到达探测集线器端口之前已被移除。

    更有趣的是、我们取得了一些进展、但想知道为什么它会产生影响。 首先、我们将介绍一些背景信息:

    由于 DRVVBUS/VBUS 连接是一个闭环连接(也就是说、它完全是为了处理器的利益、并且实际上不是为集成集线器器件供电、 这是永久供电的)我们的硬件人员使用 RC 网络在由 DRVBUS 驱动的5V 开关的输出上模拟 VBUS 斜升。 这复制了当 VBUS 有一个大旁路电容器时看到的斜升(对于浪涌电流保护、我理解-根据规定最小值为120uF 的 USB 2.0规范)。

    如果我在 VBUS 和 GND 之间添加了一个大旁路电容器(恰好有220uF)、似乎允许 u-boot 正常运行并完全枚举所有器件(在大多数情况下、有时它无法找到大容量存储器件、 但它始终会找到 USB 以太网适配器-这可能是 TUSB2036上的已知问题造成的)。

    那么、我们的问题是

    该电容的变化是什么(除了将 VBUS 斜坡时间从2.5ms 延长到3.2ms 再延长到整个电源轨5.2V)?

    2.这是实际的解决方案吗?

    没有它、我们在 VBUS 上看不到任何毛刺脉冲、因此似乎不太可能产生平滑效果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Stuart
    1) 1)控制器根据 USB 规范期望 VBUS 上的电容。 对于主机模式运行、最低要求为120uF。 这会影响硬件和软件时序、正如您在本主题前面所指出的那样、这似乎是可疑的。
    2) 2)很有可能。 请将120uF 添加到 USBn_VBUS 并重新运行测试。 我们希望了解这是否会导致集线器本身的100%枚举。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、明白了。 借助 USB0_VBUS 上的220uF 电容器、它显著改善了功能、我始终会看到一些集线器下游端口、但并不总是两者都有(为了进行此测试、一个端口中始终有一个 USB 大容量存储设备、 和第二个端口中的 USB 以太网适配器。 第三个端口仅在内部引出、目前从未连接任何设备。 此设置是在 u-boot 内执行的部分工厂测试过程的要求、因此我想说明它现在不是100%可靠的原因)。

    我观察到 u-boot 始终检测到 USB 以太网器件、但有时看不到 USB 大容量存储器件。 如果看不到它、在拔下并重新插入闪存棒之前、它将始终无法看到它、这一点是一个全新的 USB 枚举、将再次看到两个器件。 我将尝试收集更多的调试信息、以尝试确定在这种情况下是否会将大容量存储设备指示到 u-boot 代码中。

    大容量存储器件规定总线功率要求为100mA、以太网器件规定为250mA -这两种电流均不是特别繁重的负载。

    如果我在端口之间交换器件、则不会产生任何影响。

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

    Stuart

    现在、可以听到 AM335x 主机始终识别 TUSB2036集线器的声音。

    您是否尝试过集线器下游的不同 USB 大容量存储设备?

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

    您好、Stu、

    出于完整性考虑、我们与 TUSB2036和 TUSB2036 EVM 的设计人员进行了检查。 他们认为:

    • 需要在上游 DP 和 DM 线路上串联27 Ω 和27pF 电容器接地 。
    • Sitara AM3352具有内部上拉/下拉15K 电阻器(请参阅 TRM 第16.2.2节"上拉/下拉电阻器")、因此必须省略这些电阻器。
    • 如前所述、上游 VBUS 上也需要120uF 电容

    TUSB2036控制器的软复位或硬复位是否可以解决 USB 大容量存储设备的检测问题?

    此致、

    Garry