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.

[参考译文] AM62P:[AM62P]在 Linux 中执行 USB 角色切换需要帮助

Guru**** 2828555 points

Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1623018/am62p-am62p-require-help-in-performing-usb-role-switch-in-linux

部件号: AM62P

尊敬的团队:

我们将尝试执行中的 USB 角色切换  主机模式到器件模式
关注论坛后、我们找到了一个用户尝试在另一个平台中执行角色切换的工单。
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/953719/dra72xevm-usb-role-switch-is-not-working?keyMatch=usb+role-switch&tisearch=universal_search

我们尝试遵循此操作、但 USB 控制器仍未切换到设备模式。 我们能够看到两个 USB 端点 (31000000.usb 和 31100000.usb)。 默认情况下、31000000.usb 处于“器件“模式、31100000.usb 处于“主机“模式。 由于在系统上检测到 USB 设备、 我们假设必须将 31100000.usb 更新为“器件“模式、但该模式未生效

然而、如果我们更新 31000000.usb、它会更改值、但这里将“器件“移至“主机“模式没有意义、因为我们期望 USB 进入“器件“模式。 此外、当我们这样做时、USB 仍然保持连接。 因此目的未得到实现。

附加相同的日志(包括 dmesg 打印件)
usb_role-switch.log 

请查看此内容、并指导我们进一步了解如何进行此操作。

此致、
Mohammed Shakir

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

    尊敬的 Mohammed:

    首先、该 debugfs 模式条目仅用于调试目的、不用于生产。 使用该 debugfs 切换模式时必须非常小心、并确保整个过程符合 USB 规范。 当 USB 总线的两端都处于主机模式时、问题之一是不会导致 VBUS 争用。

    然后、您需要确保内核器件树中的“dr_mode"属性“属性、以便将相应的 USB 端口配置为“OTG",“,而、而不是“主机“或“器件“。 debugfs 模式条目仅适用于其 dr_mode = OTG 的 USB 端口。

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

    尊敬的 Bin Liu:

    感谢您的及时答复。 非常感谢。

    遗憾的是、我们无法访问构建系统、是否可以在运行的系统内执行此操作而无需修改任何器件树?

    此致、
    Mohammed Shakir

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

    debugfs 函数在内核中实现、其行为基于器件树设置并在内核启动时解析器件树时确定。 如果不修改和重新编译内核器件树、我无法想出任何简单的方法来解决此问题。

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

    尊敬的 Bin Liu:

    我设法设置了 tisdk。 我们已经检查了 dts 和 dtsi 文件、所有包含 am62p 的文件都具有适用于 USB 的 dr_mode=“OTG"。“。

    引用自  k3-am62p-main.dtsi

    		usb1: usb@31100000 {
    			compatible = "snps,dwc3";
    			reg = <0x00 0x31100000 0x00 0x50000>;
    			interrupts = <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>, /* irq.0 */
    			<GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>; /* irq.0 */
    			interrupt-names = "host", "peripheral";
    			maximum-speed = "high-speed";
    			dr_mode = "otg";
    			snps,usb2-gadget-lpm-disable;
    			snps,usb2-lpm-disable;
    		};
    


    参考自:  k3-am62p-j722s-common-main.dtsi
                    usb0: usb@31000000 {
                            compatible = "snps,dwc3";
                            reg = <0x00 0x31000000 0x00 0x50000>;
                            interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>, /* irq.0 */
                            <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; /* irq.0 */
                            interrupt-names = "host", "peripheral";
                            maximum-speed = "high-speed";
                            dr_mode = "otg";
                            bootph-all;
                            snps,usb2-gadget-lpm-disable;
                            snps,usb2-lpm-disable;
                    };


    除以下文件外、(k3-am62p5-sk.dts)
    &usb0 {
    	usb-role-switch;
    
    	port {
    		usb0_hs_ep: endpoint {
    			remote-endpoint = <&usb_con_hs>;
    		};
    	};
    };
    
    &usb0_phy_ctrl {
    	bootph-all;
    };
    
    &usb1 {
    	dr_mode = "host";
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_usb1_pins_default>;
    };


    由于  我可以在目标中看到 USB@31100000 和 USB@310000000、因此我假设上面的一个可能没有使用。 如果我在这里错了、请纠正我。

    我将同时尝试在此处编辑并生成图像。

    此致、
    Mohammed Shakir

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

    尊敬的 Mohammed:

    我假设上述选项可能没有使用。 如果我在这里错了、请更正我。

    我不知道你在这里的确切含义,请详细说明。

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

    尊敬的 Bin Liu:

    抱歉、我对这个主题还不熟悉。
    正如初始票证中提到的、为了阐明我的理解、  31100000  &  31000000 是当前 AM62P Sitara EVM 目标中 USB 的基地址。 和  k3-am62p-main.dtsi  & k3-am62p-j722s-common-main.dtsi  似乎具有这些配置。 两者都配置为具有 DR_MODE 作为“ OTG “正如我们所期望的那样。

    然而、  k3-am62p5-sk.dts  没有关于的任何配置  31100000  &  31000000、  因此我怀疑这个文件可能没有被用于正在编译的 tisdk-default-image。

    那么、我们是否需要编辑这些文件才能进一步了解 USB 角色切换功能?

    此致、
    Mohammed Shakir

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

    尊敬的 Mohammed:

    现在我明白了问题。 感谢您的澄清。

    *。dtsi 文件中的节点 31100000 和 31000000 分别标有 USB1 和 usb0。 文件 k3-am62p5-sk.dts 中引用了这些标签。 因此、是的、*。dtsi 中定义的两个 USB 节点确实用于 k3-am62p5-sk.dts、并且 USB1 dr_mode 已从“org"更“更改为“host"。“。

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

    谢谢 Bin Liu 
    您建议的更改有效。
    最重要的是、我不得不在 USB1 上添加“usb-role-switch;“。

    --- a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    @@ -699,7 +699,8 @@ &usb0_phy_ctrl {
     };
     
     &usb1 {
    -       dr_mode = "host";
    +       usb-role-switch;
    +       dr_mode = "otg";
            pinctrl-names = "default";
            pinctrl-0 = <&main_usb1_pins_default>;
     };

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

    很高兴它现在正在运行。 感谢您的更新。