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:当 USB1_ID 引脚接地时、USB1 OTG 模式不工作

Guru**** 2556470 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1003374/am3358-usb1-otg-mode-is-not-working-when-usb1_id-pin-is-grounded

器件型号:AM3358

您好!

我想在基于 BeagleBone Black 的电路板上激活 OTG。 在器件树中、我提到了以下内容:

&usb {
	status = "okay";
};

&usb_ctrl_mod {
	status = "okay";
};

&usb0_phy {
	status = "okay";
};

&usb1_phy {
	status = "okay";
};

&usb0 {
	status = "okay";
	dr_mode = "peripheral";
	interrupts-extended = <&intc 18 &tps 0>;
	interrupt-names = "mc", "vbus";
};

&usb1 {
	status = "okay";
	dr_mode = "otg";
};

&cppi41dma  {
	status = "okay";
};

当我引导并检查寄存器 USB1MODE 时、我得到了值0x00000100。 根据 TRM、它应该由 USB1_ID 引脚驱动。

但是、当我将 USB1_ID 引脚接地时、USB_DRVVBUS 不会升高。

如果我将 dr_mode 设置为"host"、那么在启动后、我将 USB_DRVVBUS 引脚设置为高电平、并且可以连接 USB 闪存驱动器。 USB1MODE 寄存器为0x00000080。

我使用的是主线 Linux 4.19.68。

下面是我的 defconfig 的 USB 片段:

# CONFIG_USB_NET_DRIVERS is not set
# CONFIG_SND_USB is not set
# CONFIG_USB_HID is not set
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_OTG=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PLATFORM=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_STORAGE=y
CONFIG_USB_MUSB_HDRC=y
CONFIG_USB_MUSB_OMAP2PLUS=y
CONFIG_USB_MUSB_DSPS=y
CONFIG_USB_INVENTRA_DMA=y
CONFIG_USB_TI_CPPI41_DMA=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_AM335X_PHY_USB=y
CONFIG_USB_GPIO_VBUS=m
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=32
CONFIG_USB_CONFIGFS=y
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_UAC1=y
CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
CONFIG_USB_CONFIGFS_F_UAC2=y
CONFIG_USB_CONFIGFS_F_MIDI=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_PRINTER=y
CONFIG_USB_ETH=y
CONFIG_USB_ROLE_SWITCH=y
CONFIG_OMAP_USB2=m

有什么想法、可能会出什么问题?

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

    Petr、您好!

    对于 dr_mode ='peripheral_and dr_mode ='OTG'、请确保您已加载 USB 小工具驱动程序。 OTG 端口还需要此功能来检测连接的 USB 设备。

    由于 DT 显示 usb0处于外设模式、而 USB1处于 OTG 模式、因此您必须加载两个不同的 USB 小工具驱动程序、每个端口一个。

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

    您好、Bin、

    对于 usb0、我将 dr_mode 更改为"OTG"。 但它仍然不起作用。 USB 小工具驱动程序包含在内核中。

    是否有办法强制驱动器通过 SW 方式通过 OTG 启动主机模式?

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

    我注意到、浮点时、USB1_ID 的一个东西是 Aprox。 377mV 电平。 Shoud 此引脚是否为高电平?

    USB 模块如何识别该引脚是否接地?

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

    Petr、您好!

    [引用 userid="383515" URL"~/support/processors-group/processors/f/processors-forum/1003374/am3358-usb1-otg-mode-is-not-working-when-usb1_id-pin-is-grounded/3707957 #3707957"]对于 usb0,我将 dr_mode 更改为'OTG'。

    我并不是说您需要更改这个。 您可以根据用例设置模式。

    [引用 userid="383515" URL"~/support/processors-group/processors/f/processors-forum/1003374/am3358-usb1-otg-mode-is-not-working-when-usb1_id-pin-is-grounded/3707957 #3707957"]内核中包含 USB 小工具驱动程序。[/quot]

    我提到小工具驱动程序应该"加载"到内存中、而不仅仅是位于根文件系统中。 请在 Linux 控制台上运行以下命令、然后测试您的 USB 设备。

    # modprobe g_zero
    # modprobe g_ether

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

    您好、Bin、

    执行后、我得到了以下答案:

    modprobe:modules.dep 中未找到模块 g_zero

    但是、正如我说过的、USB 小工具是内核中内置的、因此它不是模块。

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

    Petr、您好!

    好的、请在您的电路板上运行以下脚本并提供其输出。

    e2e.ti.com/.../8105.chkusb.sh.txt

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

    哦、我现在看到了、由于我通过 USB 使用 NFS、所以我设置了 USB_ETH、现在无法选择 USB_zero 或 USB_mass 存储。

    我将在没有通过 USB 进行 NFS 引导的情况下尝试使用 USB 作为模块并告知您。

    如果我说不可能同时使用 USB 上的 NFS 和 OTG 与大容量存储、我是对的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="383515" URL"~/support/processors-group/processors/f/processors-forum/1003374/am3358-usb1-otg-mode-is-not-working-when-usb1_id-pin-is-grounded/3708168 #3708168"]如果我说不能同时使用 USB 上的 NFS 和带有大容量存储的 OTG,我是否正确?

    它不直接与 USB 上的 NFS 关联、而是与 USB 小工具驱动程序中内置的内核相关、USB 上的 NFS 需要使用该内核。

    在 USB 配置中、每个 USB 端口都需要一个 USB 小工具驱动程序、但在内核映像中构建 USB 小工具时、只有一个小工具驱动程序可用、因此这是冲突。

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

    清除我将尝试不通过 USB 引导 NFS 进行检查。

    同时,我执行了您的脚本,但由于 rootfs 中没有 bash,所以出现以下错误

    root@tsp-transceiver:~#./usb_check.sh
    /usb_check.sh:第234行:未找到 DBG_PRINT:
    /usb_check.sh:第5行:语法错误:未终止引用的字符串

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

    好的、然后忽略此脚本。 它基本上检查了 Linux 中 USB 配置的许多因素、但我相信您的问题是由内核中内置的 USB 小工具引起的。 让我知道它在将 USB 小工具构建为模块并加载两个不同的 USB 小工具驱动程序时是否起作用。

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

    您好、Bin、

    我将 USB 编译为基于模块的、实际上将 USB1_ID 引脚接地将提升 USB_DRVVBUS。 但是、我的闪存盘未加载、并且在一秒或两秒内 USB_DRVVBUS 会下降到低电平。 一秒钟后、它再次升高到高电平、并一直重复此操作。

    以下是 lsmod 结果:

        Not tainted
    roles 16384 0 - Live 0xbf39b000
    ohci_platform 16384 0 - Live 0xbf392000
    ohci_hcd 40960 1 ohci_platform, Live 0xbf382000
    ehci_omap 16384 0 - Live 0xbf379000
    ehci_hcd 57344 1 ehci_omap, Live 0xbf365000
    usb_storage 53248 0 - Live 0xbf34e000
    usb_f_mass_storage 40960 0 - Live 0xbf33d000
    usb_f_ecm 16384 1 - Live 0xbf334000
    g_ether 16384 0 - Live 0xbf32b000
    usb_f_rndis 24576 2 g_ether, Live 0xbf31f000
    u_ether 20480 3 usb_f_ecm,g_ether,usb_f_rndis, Live 0xbf316000
    usb_f_ss_lb 24576 2 - Live 0xbf30b000
    g_zero 16384 0 - Live 0xbf302000
    libcomposite 53248 6 usb_f_mass_storage,usb_f_ecm,g_ether,usb_f_rndis,usb_f_ss_lb,g_zero, Live 0xbf2ed000
    arc4 16384 2 - Live 0xbf2e5000
    wl18xx 98304 0 - Live 0xbf2c3000
    wlcore 188416 1 wl18xx, Live 0xbf288000
    mac80211 385024 2 wl18xx,wlcore, Live 0xbf213000
    sha256_arm 24576 0 - Live 0xbf209000
    sha256_generic 20480 0 - Live 0xbf200000
    cfg80211 262144 3 wl18xx,wlcore,mac80211, Live 0xbf1ae000
    musb_dsps 20480 0 - Live 0xbf19a000
    musb_hdrc 102400 1 musb_dsps, Live 0xbf178000
    usbcore 208896 6 ohci_platform,ohci_hcd,ehci_omap,ehci_hcd,usb_storage,musb_hdrc, Live 0xbf0ec000
    phy_am335x 16384 2 - Live 0xbf0dc000
    udc_core 28672 8 usb_f_mass_storage,usb_f_ecm,usb_f_rndis,u_ether,usb_f_ss_lb,g_zero,libcomposite,musb_hdrc, Live 0xbf0cf000
    phy_generic 16384 1 phy_am335x, Live 0xbf0bf000
    usb_common 16384 6 libcomposite,musb_dsps,musb_hdrc,usbcore,phy_am335x,udc_core, Live 0xbf0b1000
    phy_am335x_control 16384 1 phy_am335x, Live 0xbf0a9000
    pm33xx 16384 0 - Live 0xbf0a1000
    wkup_m3_ipc 16384 1 pm33xx, Live 0xbf098000
    wkup_m3_rproc 16384 1 - Live 0xbf090000
    remoteproc 40960 2 wkup_m3_ipc,wkup_m3_rproc, Live 0xbf07f000
    omap_aes_driver 24576 0 - Live 0xbf074000
    virtio 16384 1 remoteproc, Live 0xbf06c000
    crypto_engine 16384 1 omap_aes_driver, Live 0xbf064000
    virtio_ring 24576 1 remoteproc, Live 0xbf05a000
    omap_crypto 16384 1 omap_aes_driver, Live 0xbf053000
    omap_sham 28672 0 - Live 0xbf047000
    ti_emif_sram 16384 1 pm33xx, Live 0xbf03f000
    bq27xxx_battery_i2c 20480 0 - Live 0xbf035000
    bq27xxx_battery 20480 1 bq27xxx_battery_i2c, Live 0xbf02c000
    wlcore_sdio 16384 0 - Live 0xbf012000
    musb_am335x 16384 0 [permanent], Live 0xbf00a000
    at24 20480 0 - Live 0xbf000000
    

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

    哦、很奇怪。 当我将 USB-C 闪存驱动器旋转180度时、它现在可以工作。 我的闪存驱动器似乎仅连接一侧、或者我们的 USB-C 端口连接错误。 尽管如此、方向良好、它仍然可以正常工作、并且加载了闪存驱动器。

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

    Petr、您好!

    很高兴听到软件问题得到解决。 感谢您的更新。