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.
工具与软件:
您好!
为了实现此功能、我进行了以下硬件和软件更改。 我是这样的 USB 控制器将能够充当 USB 外设 当 USB1_ID 引脚跳线断开时、(通过使用 USB A 转 USB A 线缆将器件检测为 Windows 系统中的 COM 端口来验证)。 但是、当我闭合 USB1_ID 引脚跳线时 USB 控制器没有切换到 USB 主机 运行。
我的一个发现是、当 USB1_ID 接地时 USB1_DRVVBUS 引脚持续切换高电平和低电平 延迟约为1秒、这似乎是异常行为。
您能请回顾一下我们所做的更改、并提供有助于解决此问题的任何见解或建议吗?
软件更改:
我们正在使用来自以下存储库和分支的内核:
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
我们按如下方式修改了器件树以为 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"; }
硬件更改:
对于有关此问题的任何指导或反馈、我表示感谢。
谢谢!
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 端口后进行了枚举。
您好、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 器件来说足够长。