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.

[参考译文] CC3301:iMX8MP usdhc2上的 CC3301定制板

Guru**** 2482145 points
Other Parts Discussed in Thread: CC3301

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1309628/cc3301-cc3301-custom-board-on-imx8mp-usdhc2

器件型号:CC3301

尊敬的诸位:

 我们使用 TI CC3301在 uSD 接口中创建定制电路板。

 在 iMX.93 EVK 中、电路板正在运行。

 不过、在 iMX.8MP 中使用 usdhc2接口时、电路板在 SDIO 初始序列中有问题。

 在 usdhc1接口的同一 iMX8MP 电路板中使用 M2-CC3301时、CC3301可以正常运行。

通过比较 MMC 事件、我可以看到以下内容:

左侧是 M2-CC3301/、右侧是我们的自定义 uSD 接口板。

您可以看到、在发送 CMD0以确认 SDIO 模块已准备就绪后、SDIO 初始化序列会发送 CMD5以询问功能项和电压信息两次。

M2-CC3301的两个响应都是针对 cmd_resp=0xa0ffc0 0x0 0x0、我们的板是针对 cmd_resp=0x807fffc0 0x0 0x0。

通过查看 SDIO 规范、可以看到 M2响应在2个功能中、电压 为 ALL、我们的 uSD 板响应为0功能、电压不包括3.5-3.6V。

对于下一步 CMD3、用值查询 RCA、M2-CC3301响应、而在-84失败、我检查代码并添加调试、显示了索引/CRC 错误。

我还在 iMX93EVK uSD 接口中查看我们的电路板、SDIO init 响应与 iMX8中的 M2-CC3301相同。

你有什么想法,什么时候。 为什么 CC3301模块会回复这样的0函数?

 如果您想知道什么、请告诉我。

此致、

/克苏

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

    您好!

    请您分享您的 DTS 对于 usdhc2模块吗?

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

    尊敬的先生:

     您可以使用默认 imx8mp-evk.dts、并执行以下操作:

    1.从 imx8mp-evk.dts 中删除&usdhc2

    2.在稳压器中标记 reg_usdhc2_vmc

    3.在稳压器中添加以下内容

       pwrseq_ti_wifi:ti-wifi pwrseq{
          兼容="mmc-pwrseq-simple";
          pinctrl-names ="默认";
          pinctrl-0 =<&pinctrL_reg_usdhc2_VMMC>;
          RESET-GPIO =<和 GPIO2 19 GPIO_ACTIVE_LOW>;

          后上电延迟时间=<2000>;
          power-off-delay-us =<2000000>;
       };

    4.将 usdhc2作为 cc3301添加到 DTS 中。

    usdhc2{(&U)
       分配的时钟=<&clk IMX8MP_CLK_USDHC2>;
       分配的时钟父级=<&clk IMX8MP_SYS_PLL1_266M>;
       分配的时钟速率=<266000000>;

       pinctrl-names ="默认";
       pinctrl-0 =<&pinctrL_usdhc2>、<&pinctrL_usdhc2_GPIO>;

       /* VMMC-supply =<Registered_usdhc2_VMMC>;*/
       mc-pwrseq =<&pwrseq_ti_WIFI>;

       总线宽度=<4>;

       无 SD;
       无 MMC;
       no-mc-hs400;

       保持电源在暂停状态;
       不可拆卸;
       FSL、SDIO -异步-中断-被启用;
       CAP-Power-Off-Card;
       状态="可以";
       最大频率=<50000000>;

       #address-Cells =<1>;
       #size-cells =<0>;
       wlcore:wlcore@0{
          兼容="ti、cc33xx";
          寄存器=<2>;
       };
       
       btti:btti@1 {
          兼容="ti、cc33xxbt";
          寄存器=<1>;
       };
    };

    如果您不使用 MMC-pwrseq、但使用正常的 reg_usdhc2_VMMC、则结果是相同的。

    此致、

    /克苏

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

    您好!

    这是我正在为 usdhc1使用的 DTS,我鼓励你们去匹配它。 我使用"imx8mp-evk-usdhc1-m2.dts"作为基准:

    // SPDX-License-Identifier: (GPL-2.0 OR MIT)
    /*
     * Copyright 2021 NXP
     */
    
    #include "imx8mp-evk.dts"
    
    / {
    	reg_usdhc1_vmmc: regulator-usdhc1 {
    		compatible = "regulator-fixed";
    		regulator-name = "WLAN_EN";
    		pinctrl-names = "default";
    		pinctrl-0 = <&pinctrl_reg_usdhc1_vmmc>;
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		gpio = <&gpio2 6 GPIO_ACTIVE_HIGH>;
    		enable-active-high;
    	};
    
    	wlan_en: regulator-100 {
    		compatible = "regulator-fixed";
    		regulator-name = "wlan_en";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		enable-active-high;
    		gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
    	};
    };
    
    &iomuxc {
    	pinctrl_reg_usdhc1_vmmc: regusdhc1vmmcgrp {
    		fsl,pins = <
    			MX8MP_IOMUXC_SD1_DATA4__GPIO2_IO06	0x140
    			MX8MP_IOMUXC_SD1_DATA7__GPIO2_IO09  0x000
    		>;
    	};
    
    	pinctrl_usdhc1_pwrseq: usdhc1pwrseq {
    		fsl,pins = <
    			MX8MP_IOMUXC_SD1_RESET_B__GPIO2_IO10	0x140
    		>;
    	};
    
    	pinctrl_usdhc1: usdhc1grp {
    		fsl,pins = <
    			MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK	0x190
    			MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD	0x1d0
    			MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0	0x1d0
    			MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1	0x1d0
    			MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2	0x1d0
    			MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3	0x1d0
    		>;
    	};
    
    	pinctrl_usdhc1_100mhz: usdhc1-100mhzgrp {
    		fsl,pins = <
    			MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK	0x194
    			MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD	0x1d4
    			MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0	0x1d4
    			MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1	0x1d4
    			MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2	0x1d4
    			MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3	0x1d4
    		>;
    	};
    
    	pinctrl_usdhc1_200mhz: usdhc1-200mhzgrp {
    		fsl,pins = <
    			MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK	0x196
    			MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD	0x1d6
    			MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0	0x1d6
    			MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1	0x1d6
    			MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2	0x1d6
    			MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3	0x1d6
    		>;
    	};
    };
    
    &reg_pcie0 {
    	status = "disabled";
    };
    
    &pcie {
    	status = "disabled";
    	/delete-node/ wifi_wake_host;
    };
    
    &pcie_phy {
    	status = "disabled";
    };
    
    &usdhc1 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&pinctrl_usdhc1>;
    	bus-width = <4>;
    	keep-power-in-suspend;
    	cap-power-off-card;
    	non-removable;
    	wakeup-source;
    	vmmc-supply = <&wlan_en>;
    	status = "okay";
    	#address-cells = <1>;
    	#size-cells = <0>;
    
    	wlcore: wlcore@2 {
    		compatible = "ti,cc33xx";
    		reg = <2>;
    		interrupt-parent = <&gpio2>;
    		interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
    	};
    };
    

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

    尊敬的先生:

     感谢您提供 DTS、但是、正如我在最初的帖子中所写的、在 iMX8MP 板(usdhc1)中使用 M.2模块时没有问题、CC3301可以正常运行。

     当我们在 QCA 中使用报告的 CMD3做出错误响应的 usdhc2接口时、出现了问题、因为 iMX8MP ushdc1和 iMX93 EVK usdhc2接口中的响应不一致。

     之前的 CMD5响应也报告了一个错误的响应、您可以在图片中看到。

    此致、

    /克苏

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

    您好!  

    我建议使用我提供的 usdhc1作为参考,因为它可以转换为使用 usdhc2。 在 DTS 中、我不建议使用 Mmc-pwrseq-simple、而是使用固定稳压器。 我还会删除"NO-SD"和"NO-MMC"标志、以便与我提供的示例 DTS 保持一致。  

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

    萨贝赫您好:

     谢谢你的建议,作为我的最初的文章,我们在 sdhc2没有问题,而对于电源的稳压器类型,我也在使用 pwrseq 之前对非常初级的进行了测试。 情况完全相同。 这就是我们尝试使用 sysfs debugfs 在 Linux 内核中转储 MMC 事件的原因。

     NO-SD、NO-MMC 属性仅在用户确定这不是内核初始化中的 SDCARD/MMC 卡时才有效。 MMC 驱动程序的内核初始化序列是 SDIO=>SD => MMC。因此、 它不会影响任何东西、此外、在我发布 e2e 之前也进行了测试、遗憾的是结果完全相同。

     回到我问的帖子、我想知道在哪些情况下可以让 CC33xx 回答0函数而不是 SDIO CMD5中的2个函数和不同的电压定义?  来自 CC33xx 固件 SDIO CDD 响应的任何提示都会非常有用且非常感谢。

    此致、

    /克苏

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

    萨贝赫您好:

     顺便说一下、 我重点介绍 CC33xx 初始化的 SDIO 命令、而不是介绍 iMX8MP 的 DTS、原因是我们有另一个 USD SDIO 模块不在 TI CC3301中、通过 sdhc2接口、可以在 Linux 内核中顺利完成正常的 SDIO 模块初始化过程。 这简单地意味着 iMX8MP usdhc2 H/W 的 DTS 配置应该没有问题。

    此致、

    /克苏

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

    您好、ckhsu。

    这简单地意味着 iMX8MP usdhc2 H/W 的 DTS 配置应该没有问题。

    我不赞同。 CC33XX 需要特定的硬件设置、与 microSD 卡有一点不同。 例如、uSD 卡没有像 CC33XX_RESET 引脚这样的系统。 此引脚在启动过程中会不断切换。  

    因此、我建议我们先检查 DTS 和硬件之间的差异、然后再根据预期结果进行校准。 理想情况下、我们不必知道 cmds 的具体顺序、因为它由 Linux 内核抽象化。 最后、DTS 是将用于该器件的位置。  

    我还有一个 imx8mp 板、所以如果你向我描述你的硬件设置、我可以复制相同的设置、然后我可以在 usdhc2上提供一个 DTS、我可以保证也可以正常工作。  

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

    萨贝赫您好:

     谢谢你的答复。

     实际上、我们的定制板尝试在 CC3301中使用 uSD 卡并将其连接到 iMX8MP EVK uSD 插槽中。 因此、只有 SDIO_D2/SDIO_D3/SDIO_CMD/SDIO_CLK/GND/SDIO_D0/SDIO_D3 VDD 被连接。

    并且、没有通过主机连接复位引脚。

    此致、

    /克苏

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

    复位线路连接到哪个 GPIO? 或者您是说它未连接?

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

    萨贝赫您好:

     未将复位引脚连接至任何 GPIO。 Micro SD 卡只有8个引脚连接到 CC3301、如下所示。

    此致、

    /克苏

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

    您好!

    如果未连接复位线、CC33XX 将无法通信。 Linux 驱动程序在固件下载期间切换此行。 由于器件未启用、因此这说明了 CMD 5之后您没有收到任何响应的原因。  

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

    萨贝赫您好:

     感谢您的解释。 我将与 H/W 讨论。

    此致、

    /克苏