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.

[参考译文] AM3358:在 BeagleBone BLK REV C 上的 USB1端口中启用 OTG 功能时出现问题(AM3358BZCZ)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1424020/am3358-issue-with-enabling-otg-functionality-in-usb1-port-on-beaglebone-blk-rev-c-am3358bzcz

器件型号:AM3358
主题中讨论的其他器件:TX12AM3352TPS65217

工具与软件:

您好!

为了实现此功能、我进行了以下硬件和软件更改。 我是这样的  USB 控制器将能够充当 USB 外设  当 USB1_ID 引脚跳线断开时、(通过使用 USB A 转 USB A 线缆将器件检测为 Windows 系统中的 COM 端口来验证)。 但是、当我闭合 USB1_ID 引脚跳线时  USB 控制器没有切换到 USB 主机  运行。

我的一个发现是、当 USB1_ID 接地时  USB1_DRVVBUS 引脚持续切换高电平和低电平  延迟约为1秒、这似乎是异常行为。

您能请回顾一下我们所做的更改、并提供有助于解决此问题的任何见解或建议吗?

软件更改:

  • Linux 内核:

我们正在使用来自以下存储库和分支的内核:
GitHub - RobertCNelson/bb-kernel、分支"am33x-v5.10"。

  • 默认配置更改:

进行了以下更改以启用 USB 角色切换:

diff --git a/patches/defconfig b/patches/defconfig

index 63c7ae681..121151519 100644

--- a/patches/defconfig

+++ b/patches/defconfig

@@ -5464,7 +5467,7 @@ CONFIG_USB_G_DBGP_SERIAL=y

# end of USB Gadget precomposed configurations

# CONFIG_TYPEC is not set

-# CONFIG_USB_ROLE_SWITCH is not set

+CONFIG_USB_ROLE_SWITCH=y

CONFIG_MMC=y

CONFIG_PWRSEQ_EMMC=y

# CONFIG_PWRSEQ_SD8787 is not set

  • DTS 文件更改:

我们按如下方式修改了器件树以为 USB1启用 OTG 模式:

diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi

index 88b2f9d73aa6..c8e7514ec5e8 100644

--- a/arch/arm/boot/dts/am335x-bone-common.dtsi

+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi

@@ -194,7 +194,9 @@ &usb0 {

};

&usb1 {

- dr_mode = "host";

+ dr_mode = "otg";

}

硬件更改:

  • USB1_ID 引脚闭合:预计 USB 控制器将作为一个 USB 主机。
  • USB1_ID 引脚被打开:USB 控制器成功地运行为一个 USB 外设。 已通过在 Windows 系统中使用 USB A 转 USB A 电缆将器件检测为 COM 端口进行验证

对于有关此问题的任何指导或反馈、我表示感谢。

谢谢!

Vinothraj.

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

    您好!

    当 USB1_ID 引脚跳线闭合时、请测量靠近 AM335x 的 USB1_ID 引脚、以确认它是否确实接地。

    通常、当 dr_mode ="OTG"且 DRVVBUS 引脚在大约2秒的间隔内脉动时、很可能意味着 ID 引脚未接地。

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

    您好、Bin、

    感谢您的答复。 我已经仔细检查并确认 USB1_ID 是否确实接地。

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

    好的、如果您采用一个未修改的 BeagleBone Black、仅在内核 devicetre 中修改 USB1 dr_mode ="OTG"、那么其 USB1_DRVVBUS 引脚是否仍然会脉动?

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

    我使用相同的 SD 卡映像在未修改的 BeagleBone Black 板上进行了验证、并且 USB1_DRVVBUS 引脚仍呈脉冲。

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

    此外、我已经USB1 dr_mode = "host"在内核器件树中使用套件验证了修改后的 BBB 电路板上的 USB 主机。 在这种情况下、我没有观察到任何 USB1_DRVVBUS 引脚脉冲。

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

    尊敬的 Vinothraj:

    我在接下来的两天不在办公室,但我将在本周晚些时候在 BBB 测试这件事,让你知道

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

    好的、谢谢。

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

    您好、Bin、

    是否有任何更新?

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

    尊敬的 Vinothraj:

    我刚刚在 BBB 板上完成了检查、并意识到 MUSB 端口(dr_mode 设置为"OTG")要在主机模式下工作、应该加载 USB 小工具驱动程序。 因此、请加载 USB 小工具驱动程序、以查看当 USB1的 ID 引脚接地时、它是否在主机模式下工作。

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

    您好、Bin、

    我已经加载了 USB 小工具驱动程序(g_serial)、但遗憾的是、当 USB1 ID 引脚接地时、USB1在主机模式下不起作用。 如前所述、在这种情况下、我观察到 USB_DRVVBUS 引脚会持续脉冲并延迟2秒。

    但是、当 USB1 ID 引脚未接地时、USB1在器件模式下可正常运行。

    请分享您的内核版本详细信息、我会在我的开发板中进行检查。

    谢谢。

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

    现在、当您将一个 USB 设备连接至 USB1端口时、它会被枚举吗?

    我的 BBB 具有2秒间隔脉冲、但当我将 USB 设备连接到 USB1 Type-A 端口时、系统会枚举该设备。

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

    当 USB1 ID 引脚未接地时、我使用 USB A 转 USB A 电缆将 USB1端口连接到 PC、并且在 PC 上将其枚举为 COM 端口。 但是、当 USB1 ID 引脚接地并且我将一个摆动盘连接到 BBB 的 USB1端口时、未枚举它。 我认为 USB_DRVVBUS 引脚应该持续保持高电平、但是相反、它会持续地产生高电平脉冲和低电平脉冲。

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

    BBB 上的 USB1_ID 应始终接地。 我想您要在定制电路板上进行测试吗? 如果是、请首先在未修改的 BBB 上进行测试。

    请注意、如果 USB0端口 dr_mode 也设置为"OTG"(默认设置)、则必须加载2 巨大 小工具驱动程序、每个 USB 端口一个。

    我做过:

    # modprobe g_zero
    # modprobe g_serial

    我在 BBB 上使用 SDK9.1、内核版本为:

    Linux am335x-evm 6.1.46-g1d4b5da681 #1抢占星期四10:19:08 UTC 2023 armv7l armv7l armv7l GNU/Linux

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

    我使用的 BBB 进行了以下微小修改。 我移除了 R49 (0欧姆)电阻、并添加了一根跳线、以便针对 USB1 ID 引脚在接地和未接地之间切换。 我正在使用 GitHub - RobertCNelson/bb-kernel、branch "am33x-v5.10"。

    在器件树中添加了更改。 1.已禁用 USB0端口2。 USB1端口"dr_mode"设置为"OTG"。

    我将尝试内核"Linux AM335x-EVM 6.1.4"。

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

    请在启动电路板之前、首先在连接跳线的情况下进行测试、那么您的测试和我的未修改 BBB 没有硬件差异。

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

    是的、没有硬件差异。

    我测试了在启动电路板之前连接跳线的场景、但很遗憾、没能成功。

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

    以下是在 U-Boot 提示符下将 USB1 dr_mode 设置为"OTG"并引导 Linux 的命令列表:

    =>加载 MMC 0:2 ${loadaddr}boot/zImage                                         
    =>加载 MMC 0:2 ${fdtaddr}boot/dtb/am335x-bonebrack.dtb                        
    => fdt addr $fdtaddr                                                            
    => FDT 设置 USB1 dr_mode OTG                                                     
    =>运行 finduuid                                                                 
    => setenv bootargs root=PARTUUUID=${uuid}rootwait rw earlycon console=${console}
    => bootz $loadaddr -$fdtaddr

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

    我还尝试了以下序列来禁用 usb0、因此只需要在 Linux 中加载一个 USB 小工具驱动程序、USB1仍然可以枚举我的 BBB 上连接的设备。

    =>加载 MMC 0:2 ${loadaddr}boot/zImage
    =>加载 MMC 0:2 ${fdtaddr}boot/dtb/am335x-bonebrack.dtb
    => fdt addr $fdtaddr
    => FDT 调整0x100000的大小
    => FDT 列表 USB1
    => FDT 设置 usb0状态禁用
    => FDT 设置 USB1 dr_mode OTG
    =>运行 finduuid
    => setenv bootargs root=PARTUUUID=${uuid}rootwait rw earlycon console=${console}
    => bootz $loadaddr -$fdtaddr

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

    我是否 从下面突出显示的软件包中获得 Linux am335x-evm 6.1.46-g1d4b5da681内核映像? 请确认。

    https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX - AM335X/09.01.00.001

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

    是的、但这是 SDK 安装程序。

    您可以下载下面的链接"*。wic.xz"是 SD 卡映像、您可以使用 bmaptool 等 Linux 命令行工具直接将其刷写到 SD 卡中。

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

    这是否在已修改(USB1_ID 引脚)或未修改的 BBB 上进行了测试? 我仅使用未修改的 BBB。

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

    我已经测试了 内核  6.1.46-g1d4b5da681(OTG 启用)、 需修改(USB_ID 引脚) BBB 和未修改 BBB。 结果是相同的。 您是否在 BBB 电路板上进行了测试?  在 USB1端口中启用 OTG 后、您是否能够看到 USB 控制器充当主机模式?  

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

    是的、我在未修改的 BBB 上测试了相同的过程、USB1端口可以枚举 SD 读卡器。 请参阅下面随附的控制台日志。

    在592行的日志中、寄存器转储 DevCtrl 寄存器的值在0x19和0x80之间变化、这意味着 DRVVBUS 正在切换。 然后在第637行、将 SD 卡读取器插入 Type-A 端口后进行了枚举。

    e2e.ti.com/.../bbb_2D00_usb1_2D00_otg_2D00_test.log

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

    您好、Bin、

    抱歉、我之前出错了。 此问题现已解决。 事实证明、我曾多次使用故障的摆盘进行测试。 我现在已尝试在 USB1端口(配置为 OTG)中使用 USB SD 读卡器、USB 显示设备和另一个 Pendrive (Pendrive 2)、一切正常。

    有趣的是、当故障的 Pendrive 完全配置为 USB 主机时、它在 USB1端口上工作。 这给了我信心,摆盘本身并不是完全错误的,但它似乎有限制,当使用它与 OTG 模式.

    感谢您的耐心、对于困惑深表歉意。

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

    尊敬的 Vinothraj:

    不用担心、很高兴听到问题得到解决。

    如果不检查这个"故障"的挂起驱动、当 AM335x USB 控制器配置为"OTG"模式时、我就无法判断导致枚举失败的确切原因、但在过去、我看到过一些 USB 器件存在类似的问题。 这些器件不在 USB 规范范围内、使其 DP/DM 能够更长时间地通知 USB 主机、但默认情况下、处于 OTG 模式的 AM335x USB 仅检查2秒(这是您所看到的2秒脉冲)、对于此类"有故障"USB 器件来说足够长。