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.
您好!
我想在基于 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、您好!
好的、请在您的电路板上运行以下脚本并提供其输出。
哦、我现在看到了、由于我通过 USB 使用 NFS、所以我设置了 USB_ETH、现在无法选择 USB_zero 或 USB_mass 存储。
我将在没有通过 USB 进行 NFS 引导的情况下尝试使用 USB 作为模块并告知您。
如果我说不可能同时使用 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、您好!
很高兴听到软件问题得到解决。 感谢您的更新。