USB-SDIO, SD card cannot recognize

schematic diagram:



Pin configuration:
image

dts default config:
xusb_padctl@3520000 {
compatible = “nvidia,tegra234-xusb-padctl”;
reg = <0x0 0x3520000 0x0 0x20000 0x0 0x3540000 0x0 0x10000>;
reg-names = “padctl”, “ao”;
interrupts = <0x0 0xa7 0x4>;
resets = <0x2 0x72>;
reset-names = “padctl”;
status = “okay”;
vclamp-usb-supply = <0x4b>;
avdd-usb-supply = <0x2b5>;
phandle = <0x2b9>;

            pads {

                    usb2 {
                            clocks = <0x2 0xa5>;
                            clock-names = "trk";

                            lanes {

                                    usb2-0 {
                                            status = "okay";
                                            #phy-cells = <0x0>;
                                            nvidia,function = "xusb";
                                            phandle = <0x2ba>;
                                    };

                                    usb2-1 {
                                            status = "okay";
                                            #phy-cells = <0x0>;
                                            nvidia,function = "xusb";
                                            phandle = <0x2bd>;
                                    };

                                    usb2-2 {
                                            status = "okay";
                                            #phy-cells = <0x0>;
                                            nvidia,function = "xusb";
                                            phandle = <0x2be>;                                             
                                    };

                                    usb2-3 {
                                            status = "disabled";
                                            #phy-cells = <0x0>;
                                    };
                            };
                    };

                    usb3 {

                            lanes {

                                    usb3-0 {
                                            status = "okay";
                                            #phy-cells = <0x0>;
                                            nvidia,function = "xusb";
                                            phandle = <0x2bf>;
                                    };

                                    usb3-1 {
                                            status = "okay";
                                            #phy-cells = <0x0>;
                                            nvidia,function = "xusb";
                                            phandle = <0x2bc>;
                                    };

                                    usb3-2 {
                                            status = "disabled";
                                            #phy-cells = <0x0>;
                                    };

                                    usb3-3 {
                                            status = "disabled";
                                            #phy-cells = <0x0>;
                                    };
                            };
                    };
            };

            ports {

                    usb2-0 {
                            status = "okay";
                            mode = "otg";
                            vbus-supply = <0x2b6>;
                            usb-role-switch;

                            port {

                                    endpoint {          
                                            remote-endpoint = <0x2b7>;
                                            phandle = <0x69>;
                                    };
                            };
                    };

                    usb2-1 {
                            status = "okay";
                            mode = "host";
                            vbus-supply = <0x2b8>;
                    };

                    usb2-2 {
                            status = "okay";
                            mode = "host";
                            vbus-supply = <0x2b6>;
                    };

                    usb2-3 {
                            status = "disabled";
                    };

                    usb3-0 {
                            status = "okay";
                            nvidia,usb2-companion = <0x1>;
                    };

                    usb3-1 {
                            status = "okay";
                            nvidia,usb2-companion = <0x0>;
                    };

                    usb3-2 {
                            status = "disabled";
                    };

                    usb3-3 {
                            status = "disabled";
                    };
            };

            prod-settings {
                    #prod-cells = <0x4>;

                    prod {
                            prod = <0x0 0x284 0x38 0x38 0x0 0x288 0x3fff000 0x51e000>;
                    };
            };
    };
    xhci@3610000 {
            compatible = "nvidia,tegra234-xhci", "nvidia,tegra234-xusb";
            reg = <0x0 0x3610000 0x0 0x40000 0x0 0x3600000 0x0 0x10000 0x0 0x3650000 0x0 0x10000>;
            reg-names = "base", "fpci", "bar2";
            interrupts-extended = <0x1 0x0 0xa3 0x4 0x1 0x0 0xa4 0x4 0x1 0x0 0xa7 0x4 0xa 0x4c 0x4 0xa 0x4d 0x4 0xa 0x4e 0x4 0xa 0x4f 0x4 0xa 0x50 0x4 0xa 0x51 0x4 0xa 0x52 0x4>;
            interrupt-names = "xhci", "mbox", "padctl", "wake0", "wake1", "wake2", "wake3", "wake4", "wake5", "wake6";
            clocks = <0x2 0x10a 0x2 0x10b 0x2 0x10c 0x2 0x10d 0x2 0x10e 0x2 0x10f 0x2 0x110 0x2 0x111 0x2 0x113 0x2 0x115 0x2 0x67 0x2 0xe 0x2 0x64>;
            clock-names = "xusb_hs_src", "xusb_host", "xusb_core_superspeed_clk", "xusb_falcon_src", "xusb_falcon_host_clk", "xusb_falcon_superspeed_clk", "xusb_fs_src", "xusb_fs_host_clk", "xusb_ss_src", "xusb_ss", "pll_u_480m", "clk_m", "pll_e";
            power-domains = <0x2 0xc 0x2 0xa>;
            power-domain-names = "xusb_host", "xusb_ss";
            nvidia,xusb-padctl = <0x2b9>;
            interconnects = <0x3 0x4a 0x3 0x4b>;
            interconnect-names = "dma-mem", "dma-mem";
            iommus = <0x56 0xe>;
            dma-coherent;
            status = "okay";
            phys = <0x2ba 0x2bd 0x2be 0x2bf 0x2bc>;
            phy-names = "usb2-0", "usb2-1", "usb2-2", "usb3-0", "usb3-1";
            phandle = <0x46a>;
    };

    xhci@3670000 {
            compatible = "nvidia,tegra234-xhci-vf1";
            reg = <0x0 0x3670000 0x0 0x40000>;
            interrupts = <0x0 0x15 0x4>;
            nvidia,xusb-padctl = <0x2b9>;
            interconnects = <0x3 0x4a 0x3 0x4b>;
            interconnect-names = "dma-mem", "dma-mem";
            iommus = <0x56 0x1a>;
            dma-coherent;
            status = "disabled";
            phandle = <0x46b>;
    };

    xhci@36c0000 {
            compatible = "nvidia,tegra234-xhci-vf2";
            reg = <0x0 0x36c0000 0x0 0x40000>;
            interrupts = <0x0 0x16 0x4>;
            nvidia,xusb-padctl = <0x2b9>;
            interconnects = <0x3 0x4a 0x3 0x4b>;
            interconnect-names = "dma-mem", "dma-mem";
            iommus = <0x56 0x1b>;
            dma-coherent;
            status = "disabled";
            phandle = <0x46c>;
    };

tegra234-p3767-0000-p3768-0000-a0.txt (426.6 KB)

kernel log:
minicom.txt (142.5 KB)

  1. After inserting the SD card into the hardware, the SD card cannot be recognized correctly.
  2. The kernel keeps printing this: [ 60.498750] fusb301 1-0025: fusb301_work_handler: int_sts[0x00]
  3. Regarding the device tree:
    xusb_padctl@XXXXX :
    xhci@XXXXX : Is it only necessary to configure when serving as a host?
    What is the relationship between the two above?

image
How should this be configured and what is the basis for configuration?

Can you answer it ASAP?

  1. fusb301 is the type C port controller on Orin Nano devkit with usb2-0+usb3-1 design. If you don’t have it, you need to disable it.

  2. please read the document.
    Jetson AGX Orin Platform Adaptation and Bring-Up — NVIDIA Jetson Linux Developer Guide 1 documentation

  3. Every USB3 device must have a USB2 lane as companion, if you don’t have it, then it is a wrong design.

还是用中文吧:

fusb301 是个啥设备,也是usb设备吗? 也是xusb_padctl 里面的其中的一个?

这个我看过了,还是不理解,xusb_padctl我看里面默认有4个usb2.0,4个usb3.0,但是我们的引脚是USB0_D_P,USB0_D_N,USB1_D_P,USB1_D_N,USB2_D_P,USB2_D_N,USBSS0_D_P,USBSS0_D_N,USBSS1_D_P,USBSS1_D_N,USBSS2_D_P,USBSS2_D_N,usb2.0和usb3.0都只有三个,那么应该怎么对应呢?xusb_padctl主要是设置什么功能,xhci都是设置什么功能。

这个是什么意思,就是这个USB3设备也需要usb2的通道?怎么理解,我们硬件工程师也没理解啥意思?

image

这个companion的值又怎么确定的?
刚开始弄,疑惑比较多,谢谢。。

  1. fusb301是 Orin Nano devkit上面的type C port控制器. 通常你們的custom board沒有這東西, 所以需要把DT裡面的這個給移掉
    FUSB301

  2. USB0_D_P就是對應usb2-0. USB1_D_P->usb2-1…以此類推
    USBSS0_D_N → usb3-0. USBSS1_D_N-> usb3-1… 以此類推
    xusb_padctl就是在說現在哪幾個lane有接著/有要使用. 沒有就disabled掉
    xhci 是usb host controlller,代表說這port/lane要當usb host的話就一定要列在xhci的list裡面

  3. 所有的usb3裝置在硬體線路上都還是得有一個usb2的線跟著. 也就是說不能只有USBSSx_D_P接著. 你必須有USBx_D_P做搭配

您说的是


红框中需要连接线吗?那这个线连接到哪个phy呢?

USBx_D_P你想要接哪個都可以. 你們自己決定

只是DT最後要改成對應的usb2-x而已

这样一个USBSSx_D_N 设备要消耗两个usb口? 一个USBSSx_D_N和USBx_D_P ? 我们之前使用xavier nx时好像不需要啊,这不是3.0和2.0是两个不同的phy吗?

這個規定一直都有. 代表你們之前xavier nx的設計也是錯的. usb有機會碰上問題

比方說rel-32 xavier文件
https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3275/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/adaptation_and_bringup_xavier.html

image

那如果NX三个的USBx_D_P ,都已经使用了,没有口能接到设备中了。那应该怎么处理。
USBSSx_D为什么会依赖USBx_D 呢?他们使用的是不同的phy啊。

Any update?

跟我們內部確認過了. 目前driver只有這樣支援.
比方說如果你們的usb3出了問題的話, 沒了usb2也無法向下兼容. 就會變成連使用都不能.

pin不夠用的話只能請你們重新設計了.

1 Like

好的,已经解决我们的问题了,谢谢

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.