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.

[参考译文] AM6548:USB 小工具串行问题

Guru**** 2568585 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1560398/am6548-usb-gadget-serial-issue

器件型号:AM6548


工具/软件:

我正在尝试启用 USB 串行小工具功能。 当我加载时g_serial、它显示为“ready",“,但、但当我将其连接到 PC 时、永远无法在设备管理器中检测到器件(COM 端口)。

此外、连接 Type-C 电缆后、即使检测到相关的 Vbus 为高电平、内核仍显示“已断开“。

root@am65xx-evm:~# modprobe g_serial
[  195.827441] g_serial gadget.0: Gadget Serial v2.4
[  195.827461] g_serial gadget.0: g_serial ready
root@am65xx-evm:~# ls /dev/ttyGS*
/dev/ttyGS0
root@am65xx-evm:~#

root@am65xx-evm:/sys/kernel/config/usb_gadget/g1# gpioget gpiochip0 5

1

root@am65xx-evm:/sys/kernel/config/usb_gadget/g1# cat /sys/kernel/debug/usb/4010000.usb/link_state

Disconnected

下面显示了相关的器件树设置。 有人能告诉我如何解决这个问题吗?

&wkup_pmx0{

usb5vsignal_pins_default: usb5vsignal_pins_default {
		pinctrl-single,pins = <
			AM65X_WKUP_IOPAD(0x00c4, PIN_INPUT, 7) /* (AD3) WKUP_GPIO0_5 */
		>;
	};

}

&usb0_phy {
	status = "okay";
};

//typeC interface
&usb0 {
	status = "okay";
	pinctrl-names = "default";
	//pinctrl-0 = <&usb0_pins_default>;
	pinctrl-0 = <&usb5vsignal_pins_default>;
	vbus-gpios = <&wkup_gpio0 5 GPIO_ACTIVE_HIGH>;
	dr_mode = "peripheral";
};

&dwc3_0 {
	status = "okay";
};

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

    尊敬的 YunEn:

    请连接电路板原理图的 USB 部分、包括 AM65x 到 USB 插座的所有连接。

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

    尊敬的 Bin Liu:  

    我有一个 USB Type-C 接口的电路图、如图中所示为 USB0。 您能告诉我如何解决这个问题吗?

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

    当您将 AM65x USB0 Type-C 端口连接到 PC 时、您是否测量 AM65x 上的 USB0_VBUS 引脚具有 5V 电压?

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

    我的分析是状态 “未连接、“ 这意味着主机尚未检测到器件。 不过、 gpioget gpiochip0 5该函数 1、这是 VBUS 检测引脚、表示硬件实际检测到主机的 5V 电压。 因此、我认为问题在于、尽管硬件已通电、但器件树源 (DTS) 不会正确地向dwc3驱动器告知 VBUS 检测 GPIO 或稳压器的情况。 因此、控制器永久卡在“未连接“状态。

    但我不确定应如何修改设备树来解决此问题。

    root@am65xx-evm:~# cat /sys/class/udc/4010000.usb/state 
    not attached
    
    root@am65xx-evm:~# gpioget gpiochip0 5 
    1
    
    root@am65xx-evm:~# dmesg | grep -i -E 'dwc3|g_serial|udc|gadget' 
    [ 2321.461199] udc 4010000.usb: soft-connect without a gadget driver 
    [ 2373.249089] g_serial gadget.0: Gadget Serial v2.4 [ 2373.249109] g_serial gadget.0: g_serial ready 
    [ 2387.078122] udc 4010000.usb: UDC had already started

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

    为了提供更多背景信息、我已从升级 内核 5.x 最终目的 内核 6.1. (最新的 TI SDK 09_03_05_02 )。 在硬件方面、我使用旧的 BSP 版本进行了测试、所有内容都正常工作。

    但是、在使用进行测试时 6.1 DTS 出现问题。 附件是 5.x 版本的 DTS 文件

    目前、是与相关的器件树配置 C 类 (USB0) 、包括 pinctrl USB0_phy dwc3_0 、与相同 5.1 DTS 。 我已经证实了这一点 USB0_VBUS 确实具有 5V、并使用gpioget gpiochip0 5回路1

    但是、UDC 状态始终显示:

    > cat /sys/kernel/debug/usb/4010000.usb/link_state
    Disconnected
    
    > cat /sys/class/udc/status
    not attached
    

    我怀疑问题可能与有关 dwc3. 或者内核未正确使用我配置的 GPIO ( AD3 WKUP_GPIO0_5 ) 作为 VBUS 。 也许它只是被视为常规 GPIO、因此无法正确驱动 USB。

    如果有解决方案或您需要任何其他信息、请告知我。 非常感谢!

    内核 5.1 dts:

    e2e.ti.com/.../3681.k3_2D00_am654_2D00_base_2D00_board.txt

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

    我没有机会查看详细信息。 我明天就来看看。

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

    尊敬的 Yun-en:

    您是否阅读过 USB 部分的此 linik?

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/latest/exports/docs/linux/Foundational_Components /U-Boot/UG-Memory-K3.html

    BR Rio

    AM62 SoC 上有两个 USB 实例。

    在 SK 板上、第零个实例通过 Type C 端口引出、第一个实例通过 Type A 端口引出。

    默认情况下、USB0 端口配置为在中  外设模式

    由于 U-Boot 不支持 USB 角色的动态切换、

    需要应用以下 DT 片段、并且需要重建 U-Boot 映像、将 USB0 端口设为 USB 2.0 主机端口。

    diff -git a/arch/arm/dts/k3-am625-sk-u-boot.dtsi b/arch/arm/dts/k3-am625-sk-u-boot.dtsi
     index 20c24d2fa7a4..2b663023f 100644 -a/arch/arm/dts/k3-am625-sk-u-boot.dtsi indsi indsi index 20c24d2fa7a7a7a4...
    
    
    @@@@ 
    
    
    
    DR_MODE =“外设“;
    + DR_MODE =“host";“; 
    u-boot、dm-spl; 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、里约、  

    在 Linux 阶段,我无法usb0在外设模式下运行并使用建立 USB 串行小g_serial程序通信。 我的理解是 U-Boot 使用的设备树与 Linux 内核无关。

    使用modprobe g_serial创建后/dev/ttyGS0、PC 仍然无法正确检测 COM 端口。

    usb0我的 Linux DTS 中的当前器件树如下:

    usb5vsignal_pins_default: usb5vsignal_pins_default {
    		pinctrl-single,pins = <
    			AM65X_WKUP_IOPAD(0x00c4, PIN_INPUT, 7) /* (AD3) WKUP_GPIO0_5 */
    		>;
    	};

    &usb0_phy {
    	status = "okay";
    };
    
    &usb0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&usb5vsignal_pins_default>;
    	dr_mode = "peripheral";
    };
    
    &dwc3_0 {
    	status = "okay";
    };

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

    尊敬的 YunEn:

    [ 2321.461199] UDC 4010000.usb:软连接,无需小工具驱动程序  

    我不认为我从来没有看到这个消息。 当 USB0 在器件模式下运行时、内核 5.x 中也能看到它吗?

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

    我在 5.1 版中没有看到这条消息。

    显示的消息表明 UDC 无法找到相关的小工具驱动程序来定义其功能、

    但我已经确认g_serial已启用内核配置。

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

    请在两个内核版本中比较/proc/config.gz、查看是否存在任何与 USB 相关的配置不同。

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

    对我来说、从这个长列表中说出这些并不容易。 只需在两个内核上比较它。 您还需要比较 CDN 配置选项。

    顺便说一下、AM65x 使用 CDN USB 控制器、而不是 DWC3。

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

    根据该k3-am65-main.dtsi文件、dwc3_0节点使用snps,dwc3

    我可以询问我的理解是否不正确?

    此外、我比较了两个版本的内核配置、没有发现显著差异。 两种配置均与正式文档中的设置一致:

    https://software-dl.ti.com/processor-sdk-linux-rt/esd/AM65X/09_03_05_02/exports/docs/linux/Foundational_Components Excel/Kernel/USB/DWC3.html Kernel_Drivers

    dwc3_0: dwc3@4000000 {
    		compatible = "ti,am654-dwc3";
    		reg = <0x0 0x4000000 0x0 0x4000>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    		ranges = <0x0 0x0 0x4000000 0x20000>;
    		interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
    		dma-coherent;
    		power-domains = <&k3_pds 151 TI_SCI_PD_EXCLUSIVE>;
    		clocks = <&k3_clks 151 2>, <&k3_clks 151 7>;
    		assigned-clocks = <&k3_clks 151 2>, <&k3_clks 151 7>;
    		assigned-clock-parents = <&k3_clks 151 4>,	/* set REF_CLK to 20MHz i.e. PER0_PLL/48 */
    					 <&k3_clks 151 9>;	/* set PIPE3_TXB_CLK to CLK_12M_RC/256 (for HS only) */
    
    		usb0: usb@10000 {
    			compatible = "snps,dwc3";
    			reg = <0x10000 0x10000>;
    			interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
    				     <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
    				     <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
    			interrupt-names = "peripheral",
    					  "host",
    					  "otg";
    			maximum-speed = "high-speed";
    			dr_mode = "otg";
    			phys = <&usb0_phy>;
    			phy-names = "usb2-phy";
    			snps,dis_u3_susphy_quirk;
    		};
    	};
    
    	usb0_phy: phy@4100000 {
    		compatible = "ti,am654-usb2", "ti,omap-usb2";
    		reg = <0x0 0x4100000 0x0 0x54>;
    		syscon-phy-power = <&scm_conf 0x4000>;
    		clocks = <&k3_clks 151 0>, <&k3_clks 151 1>;
    		clock-names = "wkupclk", "refclk";
    		#phy-cells = <0>;
    	};

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

    尊敬的 YunEn:

    [引述 userid=“666177" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1560398/am6548-usb-gadget-serial-issue/6020207

    根据该k3-am65-main.dtsi文件、dwc3_0节点使用snps,dwc3

    我可以询问我的理解是否不正确?

    [/报价]

    抱歉、这是我的错。 出于任何原因、我认为 AM65x 使用 CDN USB 控制器。 但您是对的、它使用的是 DWC3 控制器。

    您是否发现使用 SDK9.3 预编译 SD 卡 WIC 映像在 AM65x EVM 上存在相同问题?

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

    我刚刚使用 SDK 9.3 预编译映像(链接如下)在 EVM 上测试了它、但我找不到问题。 请注意、默认情况下、EVM 已禁用 usb0、因此 g_serial 小工具驱动程序绑定到 USB1。

    https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-diW9VClvQJ/09.03.05.02/tisdk-default-image-am65xx-evm-09.03.05.02.wic.xz

    root@am65xx-evm:~# uname -a                                                                               
    Linux am65xx-evm 6.1.119-ti-gc490f4c0fe51 #1 SMP PREEMPT Wed Dec  4 17:16:52 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux                                                                                              
    root@am65xx-evm:~# modprobe g_serial                                                                      
    [   33.808689] g_serial gadget.0: Gadget Serial v2.4                                                      
    [   33.813518] g_serial gadget.0: g_serial ready
    root@am65xx-evm:~# cat /sys/kernel/debug/usb/4030000.usb/link_state 
    On

    在 Linux PC 上:

    [177557.162488] usb 1-1.1.3: new high-speed USB device number 21 using xhci_hcd
    [177557.252677] usb 1-1.1.3: New USB device found, idVendor=0525, idProduct=a4a7, bcdDevice= 6.01
    [177557.252684] usb 1-1.1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [177557.252703] usb 1-1.1.3: Product: Gadget Serial v2.4
    [177557.252705] usb 1-1.1.3: Manufacturer: Linux 6.1.119-ti-gc490f4c0fe51 with dwc3-gadget
    [177557.255342] cdc_acm 1-1.1.3:2.0: ttyACM0: USB ACM device

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

    e2e.ti.com/.../8345.config.gz

    上面附加的是此内核构建的内核.config、供您参考。

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

    明天我将继续测试。 此外、我想问您是否可以提供与 EVM USB1 相关的器件树、或者是否只使用 USB0 进行测试?

    我会问、因为当我将其修改为使用 USB0 时、即使我使用相同的配置并将其设置为外设、它也会停止工作。

    再次感谢您的帮助。

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

    器件树位于内核 k3-am654-base-board.dts 中

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

    我懂了。 这应该与我的设置一致。 我当前正在使用k3-am654-base-board.dts和修改它、但出于某种原因、我的 USB0 在外设模式下无法正常工作。

    config.gz明天我将详细查看是否存在任何差异。 如果我找到任何东西、我会让您知道。 再次感谢!

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

    USB2.0 的 EVM USB0 设置位于器件树 k3-am654-pcie-USB2.dtso 文件中。

    如该 dtso 文件所示、请确保将 serdes0 和 serdes1 配置为 PCIe、而不是 USB0。

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

    我已在中检查并禁用了相关设置、k3-am654-base-board.dts如下所示。 我不确定这是否是您所指的?

    &serdes0 {
    	status = "disabled";
    };
    
    &serdes1 {
    	status = "disabled";
    };
    
    &pcie0_rc {
    	status = "disabled";
    };
    
    &pcie0_ep {
    	status = "disabled";
    };
    
    &pcie1_rc {
    	status = "disabled";
    };
    
    &pcie1_ep {
    	status = "disabled";
    };

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

    我将您提供的内核配置与当前的内核配置进行了比较。 所有与 USB 相关的设置都完全相同、但我的 USB0 仍然无法在外设模式下工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已在中检查并禁用相关设置k3-am654-base-board.dts、如下所示。 我不确定这是否是您所指的?

    编号 不禁用串行器/解串器、但请在  k3-am654-pcie-USB2.dtso 中设置串行器/解串器配置。

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

    VBUS-GPIO =<&wkup_GPIO0 5 GPIO_ACTIVE_HIGH>;

    这个 GPIO 对 VBUS 有什么作用?

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

    我很抱歉、但我不确定应该如何修改这部分。 您是否可以为我提供一个示例?

    我的理解是、我应该重写中的串行器/解串器节点k3-am654-base-board.dts。 如果我不使用命令覆盖它、则 A.dtbo 不应该生效、对吧?

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

    我现在移除了 VBUS GPIO。 我认为当处于外设模式时、节点的配置中不应包含 VBUS 属性。

    我已附上我当前的 DTS 文件供您参考。 谢谢!

    e2e.ti.com/.../6428.k3_2D00_am654_2D00_base_2D00_board.txt

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

    我对设置进行了一些修改。

    &wkup_pmx0{
    
    ....
    usb5vsignal_pins_default: usb5vsignal_pins_default {
    		pinctrl-single,pins = <
    			AM65X_WKUP_IOPAD(0x00c4, PIN_INPUT, 7) /* (AD3) WKUP_GPIO0_5 */
    		>;
    	};
    ....
    
    }

    &usb0_phy {
    	status = "okay";
    };
    
    &usb0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&usb5vsignal_pins_default>;
    	dr_mode = "peripheral";
    	maximum-speed = "high-speed";
    	vbus-gpios = <&wkup_gpio0 5 GPIO_ACTIVE_HIGH>;
    	phys = <&usb0_phy>;
    	phy-names = "usb2-phy";
    	snps,dis_u3_susphy_quirk;
    };
    
    &dwc3_0 {
    	status = "okay";
    };

    我能够使用gpioget gpiochip0 5来获取当前的 5V 信号、01当我插入 USB 电缆时状态会正确地从更改为。 使用后modprobe g_serial、内核日志看起来是正常的。 然而,当我检查link_status,它一致地显示disconnected.

    root@am65xx-evm:~# gpioget gpiochip0 5
    0
    root@am65xx-evm:~# gpioget gpiochip0 5
    1
    root@am65xx-evm:~# modprobe g_serial
    [   43.518334] g_serial gadget.0: Gadget Serial v2.4
    [   43.518354] g_serial gadget.0: g_serial ready
    root@am65xx-evm:~#
    root@am65xx-evm:~# gpioget gpiochip0 5
    1
    root@am65xx-evm:~# cat /sys/kernel/debug/usb/4010000.usb/link_state
    Disconnected
    

    我还检查了内核日志dmesg | grep dwc3、发现没有相关输出。 这是否与dwc3usbphy不能正确启动有关?

    root@am65xx-evm:~# dmesg | grep usb
    [    0.689595] usbcore: registered new interface driver usbfs
    [    0.689650] usbcore: registered new interface driver hub
    [    0.689690] usbcore: registered new device driver usb
    [    0.854617] usbcore: registered new interface driver usb-storage
    [    0.858309] usbcore: registered new interface driver usbhid
    [    0.858314] usbhid: USB HID core driver
    [    8.067356] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
    root@am65xx-evm:~# dmesg | grep dwc
    root@am65xx-evm:~# dmesg | grep dwc3
    root@am65xx-evm:~# dmesg | grep phy
    [    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
    [    0.000000] arch_timer: cp15 timer(s) running at 200.00MHz (phys).
    [    1.136772] davinci_mdio 46000f00.mdio: phy[3]: device 46000f00.mdio:03, driver TI DP83822
    [    5.985795] davinci_mdio b132400.mdio: phy[1]: device b132400.mdio:01, driver TI DP83867
    [    6.042527] davinci_mdio b232400.mdio: phy[2]: device b232400.mdio:02, driver TI DP83867
    [    7.679934] TI DP83867 b132400.mdio:01: attached PHY driver (mii_bus:phy_addr=b132400.mdio:01, irq=POLL)
    [    7.716448] TI DP83867 b232400.mdio:02: attached PHY driver (mii_bus:phy_addr=b232400.mdio:02, irq=POLL)
    [    9.171987] am65-cpsw-nuss 46000000.ethernet eth0: configuring for phy/rmii link mode
    root@am65xx-evm:~#
    

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

    首先、您应该不需要手动控制 VBUS(使用 GPIO)。 USB 主机提供 VBUS 5V 电压、该电压应直接路由至 AM65x usb0 VBUS 引脚。  

    当您确定 GPIO 在 VBUS 上开启 5V 时、您是否检查了 AM65x 旁边的 usb0 VBUS 引脚上的电压? 那么您是否会看到 usb0 DP 引脚变为高电平?

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

    我移除了手动 Vbus 读数器件、并确认引脚已变为高电平。 我重新测试了旧内核、它确实可以正确地启用 USB Serial 功能。 我仔细地比较了设备树和内核的差异、它们是相同的。

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

    嗨、我离岗了 1.5 周。 请期待响应延迟。  

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

    如前所述、我按如下方式修改了器件树:

    &wkup_pmx0 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&eepromdone_pins_default &iovolctrl_pins_default &vbusctrl_pins_default &mcuboot_pins_default>;
    	..................
    	usb5vsignal_pins_default: usb5vsignal_pins_default {
    		pinctrl-single,pins = <
    			AM65X_WKUP_IOPAD(0x00c4, PIN_INPUT, 7) /* (AD3) WKUP_GPIO0_5 */
    		>;
    	};
    	..................
    }
    
    
    &dwc3_0 {
    	status = "okay";
    };
    
    &usb0_phy {
    	status = "okay";
    };
    
    &usb0 {
    	status = "okay";
    	dr_mode = "peripheral";
    };

    这仍然不起作用。 此外、如果我没有明确使用usb5vsignal_pins_defaultgpioget即使插入 USB 电缆、也会显示为 0。

    我还有一个问题:如果不需要配置pinctrl,如何usb0 dwc3知道哪个引脚是 5V 输入? 握手过程何时开始?

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

    我已确认5v-single-default仅用于软件判断、与此问题无关。

    我还确认了 USB0-VBUS (AE7) 是用于 DM 和 DP 的专用引脚、如前面的原理图所示、不需要特殊配置。

    我已验证 USB0-VBUS高电平、但 PC 仍无法正确检测新的 COM 端口。

    同时、state仍显示“Not Attached“link_state(未连接)、显示“Disconnected"(“(已(已断开连接)。

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

    尊敬的 TI-Bin:

    PLZ 继续帮助这种情况,谢谢。

    BR Rio

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

    我不在办公室,但明天会回来。 请给我一些时间来跟进工作、然后查看您的更新。  

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

    我对前一幅图像进行了交叉测试、当通过 USB Type-C 连接时、DP 线路被上拉。 但是、切换到版本 6.1 后、DP 引脚显示无响应。

    1. 我认为问题与硬件无关。

    2. 我测量了 VBUS 并确认确实有一个 5V 输入、该输入通过分压器电路转换为 1V。

    3. dwc3 usbphy 和的器件树配置usb0与之前版本(如我之前的响应中所述)一致。

    目前、我怀疑问题可能与驱动程序有关。 尽管硬件测量确认存在 VBUS、但驱动器可能无法检测到 VBUS、从而阻止触发后续进程。

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

    或去耦电容器 USB_VBUS_ID_STAT 寄存器 、我曾经devmem2读过相应的地址。 插入 USB 电缆时、该值为0x07、而在拔下 USB 电缆时、该值将更改为0x08

    root@am65xx-evm:~# devmem2 0x04000618 w
    /dev/mem opened.
    Memory mapped at address 0xffff9ff87000.
    Read at address  0x04000618 (0xffff9ff87618): 0x00000007
    
    
    root@am65xx-evm:~# devmem2 0x04000618 w
    /dev/mem opened.
    Memory mapped at address 0xffffaa1dd000.
    Read at address  0x04000618 (0xffffaa1dd618): 0x00000008
    

    这表明 USB_PHY 和 VBUS 检测正常运行 。 下一步应该是 DWC3 控制器 以检测 VBUS 并开始与 PC 主机通信。 我怀疑问题是这样 DWC3 未正确接收 VBUS 信号 、因此不切换其状态或触发枚举。

    当我catlink_statestate文件上运行时、它们会显示出来 “未连接“ “已断开连接“ 分别。

    root@am65xx-evm:~# cat /sys/class/udc/4010000.usb/state
    not attached
    root@am65xx-evm:~# cat /sys/kernel/debug/usb/4010000.usb/link_state
    Disconnected
    

    但是,我不知道如何 DWC3 驱动程序实际上会检索 VBUS 回调 —是由 轮询寄存器或通过中断来完成

    源代码中的哪个函数应该查看?

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

    尊敬的 YunEn:

    在休假前两周、我已经在 AM65x EVM 上使用 SDK 9.3 测试了 USB 器件模式、并且没有发现任何问题。 所以我认为您的问题不可能是 USB 驱动程序中的任何问题。

    在过去的几天里,你提供了很多细节,让我在两个星期休息后,随着我的工作的追赶,总结一下,并将在几天内回到你身边。

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

    我已对已验证的项目进行了如下重新编排:

    1. VBUS 检测

      • 从地址读取0x04000618

        • 插入电缆→Ω 0x07

        • 拔下电缆→Ω 0x08

      • 这证实了这一点 正确检测到 VBUS 输入

    2. UDC 注册

      • 运行cat /sys/class/udc/显示4010000.usb、表示这一点 USB0 已正确注册为 UDC

    3. 驱动程序绑定

      • Running(运行)cat /sys/class/udc/4010000.usb/function显示g_serial、这确认了 G_serial 驱动程序已正确绑定

    4. UDC 状态

      • 运行cat /sys/class/udc/4010000.usb/state报告 “未连接“ 、表示 主机未枚举设备

    5. 链路状态

      • cat /sys/kernel/debug/usb/4010000.usb/link_state正在播放的节目 “已断开连接“ 、与 UDC 状态一致。

    6. DP 线路行为

      • 插入 USB-C 电缆时、 未正确上拉 DP 引脚 、阻止主机启动枚举。

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

    尊敬的 YunEn:

    我在 AM65x EVM 上检查了 SDK 9.3、并研究了多种因素、但无法确定导致问题的原因。

    [引述 userid=“666177" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1560398/am6548-usb-gadget-serial-issue/6049942

    VBUS 检测

    • 从地址读取0x04000618

      • 插入电缆→Ω 0x07

      • 拔下电缆→Ω 0x08

    [/报价]

    您是否看到内核 5.x 中的相同寄存器值不存在此类枚举问题?

    插入 USB-C 电缆后、即 未正确上拉 DP 引脚 、阻止主机启动枚举。

    您在电路板上的何处探测 DP 引脚、靠近 AM65x 或 Type-C 连接器?

    请附加完整的控制台引导日志。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 在内核 5.X 中、使用devmem2读取同一地址时、该值在0x07和之间也会发生变化0x08

    2. 这两个位置都进行了测量、在这两种情况下均未上拉 DP 引脚。

          两者的完整内核日志 5.X 6.1. 图像。

    e2e.ti.com/.../Kernel-6.1-Log.txte2e.ti.com/.../Kernel-5.1-Log.txt

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

    内核 5.x 日志没有太多的引导消息。 请使用内核 5.x 启动并运行命令“dmesg"(“(不(不带 grep)并将其保存到日志文件中。  

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

    我已更新内核 5.X 日志、如下所示:

    e2e.ti.com/.../3108.Kernel-5.1-Log.txt

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

    我在 SW 中没有看到任何问题。 我再次检查了您的 6.1 内核.config 和设备树、但看不到任何明显的东西。

    是否在 AM65x 旁边的 USB0_VBUS 引脚上测量 5V? 我不是一个 HW 家伙、但由于这些电阻器在左侧划分了 VBUS_C 的 5V 电压、右侧的 USB0_VBUS 上的电压是否仍为 5V?

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

    我已解决此问题。

    出于某种原因、usb0 似乎取决于 SERDES (PCIe)。 在器件树中禁用 PCIe 节点时、不会向 usb0 提供时钟。 这也解释了为什么您在使用 USB1 进行测试时没有遇到任何问题,但我怀疑使用 usb0 可能会导致相同的问题。

    根据 CTRLMMR_SERDES0_CTRL 寄存器说明、默认值确实为 0x00 (USB3)。 但是、我们需要将其更改为 0x01 (PCIe0 Lane0) 才能正常工作。

    我的假设是、由于 SERDES 依赖于 PCIe、因此我们需要将此寄存器配置为 PCIe 模式、以便 SERDES 能够正常工作并为 USB3 提供时钟。

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

    您好:

    很高兴您解决了该问题。

    请注意:在 AM64 DS 上、如下所述。

    *****************************

    USB SuperSpeed 和 PCIe 共用一个通用串行器/解串器 PHY。

    因此、将串行器/解串器 PHY 用于 PCIe 时、USB 将被限制为非 SuperSpeed 模式。

    *****************************

    BR Rio