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.

[参考译文] TDA4VEN-Q1:从 OSPI 引导时、如何在 U-Boot 中启用 MMC2(SD 卡)

Guru**** 2918160 points

Other Parts Discussed in Thread: TCA6424

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1634253/tda4ven-q1-how-to-enable-mmc2-sd-card-in-u-boot-when-booting-from-ospi

器件型号: TDA4VEN-Q1
主题中讨论的其他器件: TCA6424

 

问题描述

我们使用基于 TDA4VEN 的定制电路板。
U-Boot 已编程到 OSPI NOR 闪存中、并且电路板在 OSPI 引导模式下成功引导。
Linux 根文件系统存储在 SD 卡上、我们希望 U-Boot 从 SD 卡加载文件系统。
但是、在我们的定制电路板上、SD 卡插槽物理连接到 MMC2。
目前、我们使用的 U-Boot 仅识别 MMC0 和 MMC1、并且未检测到 MMC2。
因此、U-Boot 无法访问 SD 卡、并且无法加载 Linux 文件系统。

问题

是否可以在 U-Boot 中将 MMC2 作为 SD 接口启用?
如果可能、请告知:

  • 需要修改哪些器件
    (例如器件树,Kconfig,板初始化代码等)
  • 应用这些更改的方式
  • 为了支持 MMC2、应构建哪个 U-Boot 源

环境详细信息

  • 提供参考设计

    • ti-processor-sdk-rtos-j722s-evm-11_01_00_04
    • ti-processor-sdk-linux-adas-j722s-evm-11_01_00_03
  • 当前使用的 U-Boot

    • 我们 按原样使用预构建的 U-Boot 二进制文件、该文件位于:
      ti-processor-sdk-rtos-j722s-evm-11_01_00_04/
        mcu_plus_sdk_j722s_11_01_00_15/
          tools/boot/hlos_prebuilt/j722s-evm/linux/
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hi Toshiki、

    目前、我们使用的 U-Boot 仅识别 MMC0 和 MMC1、并且未检测到 MMC2。

    您是否也可以共享引导日志和设备树?

    MMC0 和 MMC1 接口还连接到什么?

    您还能分享原理图吗?

    在 uboot 处停止后、您还可以共享以下命令的输出:

    mmc list

    此致

    Gokul Praveen

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

    尊敬的 Gokul:  

    我们希望共享 mmc list command.e2e.ti.com/.../4341.u_2D00_boot.log 的启动日志和输出

    U-Boot 从 OSPI 引导、在执行期间不使用器件树(为空) fdt addr

    => printenv bootcmd
    bootcmd=run envboot; run bootcmd_ti_mmc; bootflow scan -lb

    对于 MMC 接口、连接如下:

    • MMC0:连接到 eMMC
    • MMC1:未连接(开路)

    遗憾的是、我们无法分享原理图、因为它包含机密信息。

    此致、

    Toshiki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉混淆。 引导日志如下所示。
    e2e.ti.com/.../U_2D00_boot1.log
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Toshiki、

    是否可以添加以下更改并在 uboot 中共享 MMC list 命令的输出?

    diff --git a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    index c66895b3f..74749082b 100644
    --- a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    +++ b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    @@ -23,7 +23,7 @@ aliases {
                    serial2 = &main_uart0;
                    serial3 = &main_uart5;
                    mmc0 = &sdhci0;
    -               mmc1 = &sdhci1;
    +               mmc2 = &sdhci1;
            };
     
            chosen {

    此致

    Gokul Praveen

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

    尊敬的 Gokul:  

    这是 Linux 内核源代码吗?
    我还不完全理解、但 k3-j722s-evm.dts 是否在 U-Boot 阶段发挥作用?

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

    嗨、Toshiki、

    我还没有完全理解它、但 k3-j722s-evm.dts 在 U-Boot 阶段是否起作用?

    很抱歉。 它用于 Linux 内核源代码。

    是否可以添加以下更改并在 uboot 中共享 MMC list 命令的输出?

    diff --git a/dts/upstream/src/arm64/ti/k3-j722s-evm.dts b/dts/upstream/src/arm64/ti/k3-j722s-evm.dts
    index c66895b3..6966bd85 100644
    --- a/dts/upstream/src/arm64/ti/k3-j722s-evm.dts
    +++ b/dts/upstream/src/arm64/ti/k3-j722s-evm.dts
    @@ -23,7 +23,7 @@
                    serial2 = &main_uart0;
                    serial3 = &main_uart5;
                    mmc0 = &sdhci0;
    -               mmc1 = &sdhci1;
    +               mmc2 = &sdhci1;
            };
     
            chosen {
    

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

    尊敬的 Gokul:  

    如果在该阶段的 U-Boot 中看不到 MMC、那么这个 DTS 也会失效。
    U-Boot 是否有器件树源 (DTS)? 如果对 DTS 的更改需要重新编译、如果您还能解释编译过程、我将不胜感激。
    此致、
    Toshiki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hi Toshiki、

    只是为了确认、您已经 正确地对 SD 卡进行了分区、对吧?

    如果在 U-Boot 中看不到 MMC、则觉得此 DTS 也无效。

    实际上、MMC 列表正在检测 MMC 节点 (MMC@fa0000)、根据我的理解、它只是连接到它的错误接口。 因此、您能否应用以下 2 个补丁、重新编译 uboot 并使用更新的映像启动电路板。

    注意:从 /board-support/ti-u-boot-2025.01 + git 文件夹应用这些修补程序。

    diff --git a/dts/upstream/src/arm64/ti/k3-j722s-evm.dts b/dts/upstream/src/arm64/ti/k3-j722s-evm.dts
    index c66895b3..6966bd85 100644
    --- a/dts/upstream/src/arm64/ti/k3-j722s-evm.dts
    +++ b/dts/upstream/src/arm64/ti/k3-j722s-evm.dts
    @@ -23,7 +23,7 @@
                    serial2 = &main_uart0;
                    serial3 = &main_uart5;
                    mmc0 = &sdhci0;
    -               mmc1 = &sdhci1;
    +               mmc2 = &sdhci1;
            };
     
            chosen {

    diff --git a/board/ti/j722s/j722s.env b/board/ti/j722s/j722s.env
    index 4cc66e8d..b00e2a15 100644
    --- a/board/ti/j722s/j722s.env
    +++ b/board/ti/j722s/j722s.env
    @@ -12,10 +12,10 @@ args_all=setenv optargs ${optargs} earlycon=ns16550a,mmio32,0x02800000
            ${mtdparts}
     run_kern=booti ${loadaddr} ${rd_spec} ${fdtaddr}
     
    -boot_targets=mmc1 mmc0 pxe dhcp
    +boot_targets=mmc2 mmc1 mmc0 pxe dhcp
     boot=mmc
    -mmcdev=1
    -bootpart=1:2
    +mmcdev=2
    +bootpart=2:2
     bootdir=/boot
     rd_spec=-
     
    

    重建的二进制文件(u-boot.img) 将显示在 /board-support/ti-u-boot-2025.01+ git/build/A53 目录中。  

    此外、进入 uboot 后、您是否还可以共享以下命令的输出:

    > printenv
    > mmc list
    > mmc dev 2
    > mmc info
    > ls mmc 2:2
    > setenv bootdev 2
    > setenv args_mmc "run finduuid;setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk2p2 rw rootfstype=ext4 rootwait"
    > boot

    是否有用于 U-Boot 的设备树源 (DTS)? if

    是的、 k3-j722s-evm.dts是设备树源  代码 (dts)、它编译为.dtb 格式、与 u-boot.img 文件中的 uBoot 代码一起打包。

    如果对 DTS 的更改需要重新构建、如果您还能解释构建过程、我将不胜感激。

    从 SDK 目录 (ti-processor-sdk-linux-adas-j722s-evm-11_01_00_03) will rebuild the uboot device tree(k3-j722s-evm.dts) and uboot code.

    重建的二进制文件(u-boot.img) 将显示在 /board-support/ti-u-boot-2025.01+ git/build/A53 目录中。  

    此致、

    Gokul Praveen

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

    尊敬的 Gokul:  

    我们成功构建了 U-Boot。
    但是、在将构建的 U-Boot 刷写到 OSPI 并从 OSPI 引导后、就像前一种情况一样、未检测到 SD 卡。
    我们正在共享下面的 U-Boot 命令日志。
    e2e.ti.com/.../3173.u_2D00_boot.log
    此致、
    Toshiki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Toshiki、

    感谢您的及时回复。

    是否可以在没有我之前提供的补丁的情况下对 uboot 代码执行以下命令(即:初始设置)?

    • > mmc list
      > mmc dev 0
      > mmc part
      > mmc info
      > mmc dev 1
      > mmc part
      > mmc info
      > mmc dev 2
      > mmc part
      > mmc info

    这是要理解的,哪一个 MMC 实例, SD 卡出现在.

    此致

    Gokul Praveen

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

    尊敬的 Gokul:  

    我恢复到上一个 U-boot.img 并执行了该命令、因此我会分享结果。
    此致、
    Toshiki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Toshiki、

    在执行这些命令之前、您能否确认 SD 卡已插入插槽?

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    在将 SD 卡插入插槽的情况下(使用未修改的 U-Boot)执行这些命令。
    当然、我在插入 SD 卡的情况下再次重新运行命令、我会分享结果。
    此致、
    Toshiki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Toshiki、

    感谢您的确认。

    我认为、即使在 uboot 内将 MMC 器件接口更改为 2 后、也没有在硬件中检测到 SD 卡。

    您是否还能确保用于 MMC@fa00000 的器件树中的引脚 与硬件中的引脚完全正确、尤其是卡检测引脚。  

    如果在器件树中也正确设置了这些引脚、则很可能是在插入 SD 卡时卡检测引脚没有上拉问题。

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    以下是摘录自 k3-j722s-evm.dts

            main_mmc1_pins_default: main-mmc1-default-pins {
                    pinctrl-single,pins = <
                            J722S_IOPAD(0x023c, PIN_INPUT, 0) /* (H22) MMC1_CMD */
                            J722S_IOPAD(0x0234, PIN_OUTPUT, 0) /* (H24) MMC1_CLK */
                            J722S_IOPAD(0x0230, PIN_INPUT, 0) /* (H23) MMC1_DAT0 */
                            J722S_IOPAD(0x022c, PIN_INPUT_PULLUP, 0) /* (H20) MMC1_DAT1 */
                            J722S_IOPAD(0x0228, PIN_INPUT_PULLUP, 0) /* (J23) MMC1_DAT2 */
                            J722S_IOPAD(0x0224, PIN_INPUT_PULLUP, 0) /* (H25) MMC1_DAT3 */
                            J722S_IOPAD(0x0240, PIN_INPUT, 0) /* (B24) MMC1_SDCD */
                    >;
                    bootph-all;
            };
    

    此问题是否可能是由于 PADCONFIG 设置仍然对应于 MMC1 导致的?
    假设 SD 插槽连接到 MMC2、PADCONFIG 值不应该相应地更新?
    此致、
    Toshiki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Toshiki、

    是的、您是对的、这可能是问题所在。

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    MMC2 是否有可用的引脚多路复用表? 我通过 TRM 搜索了、但找不到它。 它没有记录在那里吗?
    此致、
    Toshiki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hi Toshiki、

    我已经邀请了硬件专家来查看该查询。 如果可能、您还能分享 MMC 接口的原理图吗?

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    抱歉、电路原理图是机密信息、因此无法共享。
    我不确定这是否有帮助、但我将以文本形式描述引脚分配。

    IC15/F
    TDA4VEN8K

    G26:MMC2_DAT0

    G27:MMC2_DAT1

    H27:MMC2_DAT2

    J27:MMC2_DAT3

    F27:MMC2_CMD

    H26:MMC2_CLK

    F26:MMC2_SDCD

    此致、

    Toshiki

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

    嗨、Toshiki、

    是否有适用于 MMC2 的引脚多路复用表? 我通过 TRM 搜索了、但找不到它。 此处是否未记录?

    J722S 数据表中显示了 MMC2 接口的引脚多路复用表。 我将在下面附上文档和屏幕截图。

    e2e.ti.com/.../J722S_5F00_Datasheet.pdf

    但是、问题是、与 MMC1 不同、MMC1 通过 CONN_MMC1_SDCD 连接到 SD 卡插槽 、TI J722S EVM 上没有 MMC2 的 SD 卡插槽。 相反、MMC2_SDCD(引脚 F26)连接到 GPIO (GPIO0_71)。

    e2e.ti.com/.../2335.Hardware_5F00_Schematics.pdf

    因此、首先、您必须设计电路板、使所有 MMC2 引脚都连接到某些 SD 卡插槽(您可以使用 MMC1 作为参考)。 其次、完成该操作后、必须将器件树中的 pinmux 更改为 MMC2 接口引脚。

    希望这对 Toshiki 有所帮助。

    此致

    Gokul Praveen

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

    Hi Toshiki-san、

    您能否确认 MMC2 IO 电压是否为 3.3V?

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

    尊敬的 Gokul:

    在定制板上、所有 MMC2 引脚都连接到 SD 卡插槽。

    此外、由于测量 IO 电压、CLK 信号为 0.5V、SDCD 信号为 低电平(由于插入了 SD 卡)、所有其他信号约为 3.3V

    我尝试修改器件树中的引脚多路复用设置以使用 MMC2 接口、但它无法按预期工作。
    我将共享修改后的 dts 文件。

    e2e.ti.com/.../k3_2D00_j722s_2D00_evm_2D00_dts.zip

    此外、我们还想共享使用此器件树配置进行引导时获取的 U-Boot 执行日志。

    e2e.ti.com/.../3122.u_2D00_boot.log

    此致、

    Toshiki

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

    嗨、Toshiki、

    我相信现在情况有所改善、因为较早前、 在执行这些命令时、显示为“MMC:无卡存在“;

    早期:未更新 pinmux

    现在:将 pinmux 更新到 MMC2 后、不再看到“MMC:不存在卡“错误。   

    此外、更新引脚多路复用后、我不再能够在您的最新日志中看到以下错误:

    您是否还可以在执行“MMCdev 2“命令后共享“MMC info“命令 的输出、因为它将帮助验证是否检测到 SD 卡。

    • 除此之外、我已审核您的 DTS 文件、我认为引脚多路复用寄存器偏移部分错误
    • 因此、请将其更改为下面的 pinmux 配置
    • J722S_IOPAD(0x0120, PIN_INPUT, 0) /* (F27) MMC2_CMD */
      			J722S_IOPAD(0x0118, PIN_OUTPUT, 0) /* (H26) MMC2_CLK */
      			J722S_IOPAD(0x0114, PIN_INPUT_PULLUP, 0) /* (G26) MMC2_DAT0 */
      			J722S_IOPAD(0x0110, PIN_INPUT_PULLUP, 0) /* (G27) MMC2_DAT1 */
      			J722S_IOPAD(0x010c, PIN_INPUT_PULLUP, 0) /* (H27) MMC2_DAT2 */
      			J722S_IOPAD(0x0108, PIN_INPUT_PULLUP, 0) /* (J27) MMC2_DAT3 */
      			J722S_IOPAD(0x0124, PIN_INPUT, 0) /* (F26) MMC2_SDCD */

    此致

    Gokul Praveen  

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

    Hi Toshiki-san、

    根据提供的.dts 文件、引脚 F27 存在资源冲突。

    另外、请仔细检查原理图、为稳压器分配正确的 GPIO。

    此致、
    标记

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

    嗨、Gokul、Mark

    抱歉,您回答正确 — 引脚多路复用寄存器偏移确实不正确。 此外、我删除了冲突的 F27 部分、因为定制电路板不从 GPIO 供电。

    但是、即使在应用这些更改后、行为也没有改变。 修改后我将共享日志。

    此致、

    Toshiki

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

    嗨、Toshiki、

    执行重新分析后、  

    我发现以下冲突也存在:

    J27 和 H27 PIN:用于主 UART 5 (RXD 和 TXD)

    进行这些更改后、您能否共享更新后的设备树文件以及前面提到的所有更改、以便我们可以重新验证它。

    此致

    Gokul Praveen

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

    嗨、Gokul

    我们尚未在定制电路板上验证此问题、但我们想提前分享 DTS。

    由于冲突即使没有发生 bootph-all;,这是否意味着需要某种对策?

    此致、

    Toshiki

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

    嗨、Toshiki、

    请将“PIN_INPUT_PULLUP“更改为“PIN_INPUT“。

    由于冲突即使没有发生 bootph-all;、这是否意味着需要一些对策?

    你能详细介绍一下这个, toshiki 吗?

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    我尝试了进行更改、但似乎 U‑Boot 日志中也没有任何明显的变化。
    我还将与硬件设计团队进行检查。

    e2e.ti.com/.../3250.teraterm.log

    e2e.ti.com/.../2502.k3_2D00_j722s_2D00_evm_2D00_dts.zip

    我‑道歉、但我的回复可能会延迟、因为我将要度过一个 1 μ s 的假期。

    此致、

    Toshiki

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

    嗨、Toshiki、

    我还将与硬件设计团队一起检查各种情况。

    没问题。

    我提前道歉、但我的回复可能会延迟、因为我将要度过一个‑周的假期。

    别担心, Toshiki。

    此外、根据我到目前为止的分析、由于 执行“mc dev 2“命令时“不存在卡“问题现在消失了、因此 SD 卡正在被正确检测:

    早期:

    现在:

    但是、现在我认为的问题是 SD 卡没有分区表。

    因此、您是否可以使用 SD 读卡器将 SD 卡连接到 PC 并使用以下命令执行以下脚本、从而尝试在 SD 卡上创建分区

    ./mksdboot.sh --device /dev/<sdx>

    备注:SDx 对应于插入 SD 卡时使用 lsblk 命令在 PC 上看到的 SD 卡块设备。

    这将确保创建 SD 卡分区。

    e2e.ti.com/.../8546.mksdboot.sh

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    SD 卡分区应该已创建。

    我们也能够在 J722S 评估板上成功引导至 SD 引导模式。

    此外、通过从 SD 卡运行命令“sudo parted /dev/sda print“、我们可以确认 FAT32 分区和 ext4 分区。

    此致、

    Toshiki

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

    嗨、Toshiki、

    对延迟深表歉意。

    只是为了澄清,有没有理由评论 vqmmc-supply 属性。 因为我无法找到任何其他问题。因为卡被检测到,但分区表错误正在抛出。

    Mark L.  您有任何意见/建议吗?

    此致

    Gokul Praveen

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

    我会确保 SD 卡正确地获得 其信号的 3.3V 至 1.8V 转换(从 3.3V 开始、然后为 VQMMC 转换到 1.8V)。 VMMC 保持 3.3V。

    我的理解是、SDK 处理的是 使用 TLV7103318 执行此转换的 EVM 用例。  

    Toshiki-san、您是否执行了代码更改以便为您的定制电路板进行这种转换?

    此致、
    标记

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

    大家好、Gokul、Mark、

    当我们更改了定制电路板的 MMC2 引脚分配时、F27 引脚与另一个函数冲突、我们错误地将其注释掉。

    我们确认定制电路板上的 VDD_SD_DV 引脚为 F24、并相应地更新了 DTS。

    关于 VQMMC、我认为引脚多路复用需要配置为 GPIO 是否正确?

    在更改之前、我将共享修改后的 DTS 和 DTS。

    e2e.ti.com/.../5707.k3_2D00_j722s_2D00_evm.zip

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

    Hi Toshiki-san、

    我认为您的更改看起来是正确的、以适应 F24;是的、应该通过 GPIO 在两个电压之间进行选择。

    此致、
    标记

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

    嗨、Toshiki、

    您是否可以在 uboot 中应用以下补丁、重新编译它并在进入 uboot 后共享“MMC dev 2“命令的输出? 这些是用于识别 MMC2 故障根本原因的调试打印。

    From 3b534e3908927ebe76cbd92feb700528197452b5 Mon Sep 17 00:00:00 2001
    From: Gokul <g-praveen@ti.com>
    Date: Fri, 8 May 2026 12:12:22 +0530
    Subject: [PATCH] Debug prints added to identify root cause of MMC2 failure
    
    ---
     cmd/mmc.c         | 8 +++++++-
     drivers/mmc/mmc.c | 2 +-
     2 files changed, 8 insertions(+), 2 deletions(-)
    
    diff --git a/cmd/mmc.c b/cmd/mmc.c
    index 81b1ca4ad84..02072350bde 100644
    --- a/cmd/mmc.c
    +++ b/cmd/mmc.c
    @@ -593,16 +593,22 @@ static int do_mmc_dev(struct cmd_tbl *cmdtp, int flag,
     
     		fallthrough;
     	case 1:
    +		printf("DEBUG: Calling __init_mmc_device(dev=%d)\n", dev);
     		mmc = __init_mmc_device(dev, true, speed_mode);
    +		printf("DEBUG: __init_mmc_device returned %p\n", mmc);
     		break;
     	default:
     		return CMD_RET_USAGE;
     	}
     
    -	if (!mmc)
    +	if (!mmc) {
    +		printf("DEBUG: mmc is NULL, returning failure\n");
     		return CMD_RET_FAILURE;
    +	}
     
    +	printf("DEBUG: About to call blk_select_hwpart_devnum(dev=%d, part=%d)\n", dev, part);
     	ret = blk_select_hwpart_devnum(UCLASS_MMC, dev, part);
    +	printf("DEBUG: blk_select_hwpart_devnum returned ret=%d\n", ret);
     	printf("switch to partitions #%d, %s\n",
     	       part, (!ret) ? "OK" : "ERROR");
     	if (ret)
    diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
    index f0e38efb262..981b1622a9d 100644
    --- a/drivers/mmc/mmc.c
    +++ b/drivers/mmc/mmc.c
    @@ -3089,7 +3089,7 @@ int mmc_start_init(struct mmc *mmc)
     	}
     
     	err = mmc_get_op_cond(mmc, false);
    -
    +    printf("DEBUG: mmc_get_op_cond returned %d\n", err);
     	if (!err)
     		mmc->init_in_progress = 1;
     
    -- 
    2.34.1
    
    

    此致

    Gokul Praveen

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

    大家好、Mark、Gokul、

    我尝试在启动时添加了调试日志。

    我会分享结果、包括命令输出。

    e2e.ti.com/.../0876.u_2D00_boot.log

    此致、

    Toshiki

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

    嗨、Toshiki、

    下面的行(“debug:MMC_get_op_comd 返回 –70) 表示  eComm(发送时出现通信错误)、这基本上意味着主机控制器正在尝试向 SD 卡发送命令、但它没有到达 SD 卡。

    此外、Toshiki 能否应用您为 uboot 所做的相同器件树更改、以在 Linux 中启用 MMC2 接口(不产生任何引脚多路复用冲突的引脚复用等)、然后使用其他引导介质引导至 Linux、并检查是否在 MMC2 接口上检测到 SD 卡。

     Mark L. 您还有其他建议吗?

    此致

    Gokul Praveen

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

    Hi Toshiki-san、

    在器件树中、您可以尝试在 MMC2 pinmux 中另外添加一行吗?

    			J722S_IOPAD(0x011C, PIN_INPUT, 0) /* () MMC2_CLKLB */

    此信号是重定时所必需的。 它没有器件引脚、但它在封装内部进行连接。 对于 MMC1、其 CLKLB 信号可由软件配置、这可能是它未显示在默认器件树中的原因 。我将推迟到 Gokul 进行确认。

    此致、
    标记

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

    尊敬的 Gokul、Mark、

    抱歉、但我没有另一个可用于在定制电路板上启动 Linux 的引导介质、因此我无法在 Linux 中检查是否在 MMC2 接口上检测到 SD 卡。

    我在设备树中再添加了一行并尝试过、所以我很乐意分享。  

    e2e.ti.com/.../0486.u_2D00_boot.log

    e2e.ti.com/.../0486.k3_2D00_j722s_2D00_evm.zip

    这是否有助于识别任何信息?

    此致、

    Toshiki

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

    Hi Toshiki-san、

    遗憾的是、我无法从这些日志中辨别出任何内容。

    您能否转储 mm2 引脚的所有相关 PADCONFIG 寄存器和用于控制电压开关的 GPIO 引脚? 此外、请转储 MMCSD2_MMC_SSCFG_CTRL_PHY_CTRL_4_REG 、以便我们可以知道 OTAPDLYENA、OTAPDLYSEL、ITAPDLYENA、ITAPDLYSEL 值。 这是为了确保完整性检查器件树更改是否正确反映在寄存器中。

    您是否还可以尝试探测数据信号、看看您是否从 3.3V 开始并切换到 1.8V、或捕获接口上任何类型的波形?

    谢谢。此致、
    标记

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

    您好:Mark、

    我尝试了转储 PADCONFIG 寄存器。

    0x000F4120 # MMC2_CMD
    0x000F4118 # MMC2_CLK
    0x000F4114 # MMC2_DAT0
    0x000F4110 # MMC2_DAT1
    0x000F410C # MMC2_DAT2
    0x000F4108 # MMC2_DAT3
    0x000F4124 # MMC2_SDCD
    0x000F41B0 # GPIO1_1

    关于 MMCSD2_MMC_SSCFG_CTRL_PHY_CTRL_4_REG、我不确定我是否检查了正确的位置。

    当我检查 DAT0 的波形时、我能够确认在 U-Boot 执行时序时、它短暂切换到 1.8V、然后返回到 3.3V。

    此致、

    Toshiki

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

    抱歉 Toshiki-san、

    我误击了您的回答、因为问题已解决。  

    您能否转储列出的地址中包含的值?  

    MMCSD2_MMC_SSCFG_PHY_CTRL_4_REG 将位于地址 0x0FA2810C

    看起来 MMC 正在尝试初始化和失败、但不清楚原因。 除 D0 之外、您是否能够证明 CLK 和 CMD?

    此致、
    标记

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

    您好:Mark、

    抱歉、上次我忘记附加部分转储日志。  

    我再附上它。

    e2e.ti.com/.../0675.u_2D00_boot.log

    我还检查了 CLK 和 CMD。

    两者都显示了 U-Boot 启动后大约 5 秒内波形的变化。

    CLK 的基极电压约为 560mV。

    此致、

    Toshiki

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

    嗨 Toshiki ,

    正如附加信息一样、根据以下调试日志、

    在 Linux/U-Boot 错误代码中 、–70 对应于 -ECOMM

    #define eComm 70 /*发送时出现通信错误*/

    SO -ECOMM = 发送时通信错误

    #define ECOMM   70   /* Communication error on send */

    这在 MMC 环境中意味着什么?

    mmc_get_op_cond() 返回时 -ECOMM、它通常表示:

    1. 在初始化期间没有从 MMC/SD 卡接收到有效响应
    2. 未能响应 ACMD41 (SD)-操作条件寄存器 (OCR) 命令
    3. 主机和卡之间的电压不匹配
    4. 卡不存在 或未正确就位
    5. MMC 总线上的硬件/电气问题

    此致

    Gokul Praveen

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

    嗨、Toshiki、

    我相信有一个小错误。 我们必须使用 sdhci2 节点而不是 sdhci1 设备树、因为使用 sdhci2 接口。

    因此、您能否对当前设备树进行以下更改并共享更新后的设备树和引导日志(还可以在 uboot 中包含 MMC dev 2 命令的输出)。

    diff --git a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    index 40e28d468..bc98aa1c1 100644
    --- a/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    +++ b/arch/arm64/boot/dts/ti/k3-j722s-evm.dts
    @@ -23,7 +23,7 @@ aliases {
                    serial2 = &main_uart0;
                    serial3 = &main_uart5;
                    mmc0 = &sdhci0;
    -               mmc2 = &sdhci1;
    +               mmc2 = &sdhci2;
            };
     
            chosen {
    @@ -910,7 +910,7 @@ &sdhci0 {
            status = "okay";
     };
     
    -&sdhci1 {
    +&sdhci2 {
            /* SD/MMC */
            vmmc-supply = <&vdd_mmc1>;
            vqmmc-supply = <&vdd_sd_dv>;

    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    应用上述更改后、我能够从 SD 卡读取数据。 但是、当内核成功引导时、它无法读取根文件系统。

    这可能是由于器件规格不正确、并且 U-Boot 器件树没有问题导致的、这是正确的吗?

    e2e.ti.com/.../4645.U_2D00_BOOT.log

    e2e.ti.com/.../4645.k3_2D00_j722s_2D00_evm.zip

    此致、

    Toshiki

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

    尊敬的 Gokul:

    我们的定制电路板没有 EVM 上的 I2C IO 扩展器 (TCA6424、地址为 0x23)。
    因此、在内核的 k3-j722s-evm.dts 中、我明确禁用 exp1:GPIO@23、如下所示:

    DTS
    &MAIN_i2c0{
    /*.. snip./
    exp1:GPIO@23{
    status =“disabled“;/<-- 已禁用*/
    };
    };


    但是、我在内核启动日志中看到以下错误。

    日志片段:
    [ 12.680530]平台 f102000.PCIe:延迟探头待定:平台:供应商 2-0023 未就绪
    [ 12.689173] platform 4e230000.dma-controller: defered probe pending: platform: supplier 4e400000.interrupt-controller not ready
    [ 12.700728] platform fa00000.mmc:递延探头待定: platform: supplier regulator-mmc1 not ready
    [ 12.709937]平台调节器-mmc1:延迟探头待定:平台:供应商 2-0023 未就绪
    [ 12.718718]平台 4e400000.interrupt-controller:延迟探头待定:(原因未知)

    我对这个错误日志的理解是、尽管 DTS 发生了变化、但内核仍尝试探测 2-0023 (I2C 地址 0x23)。
    因此、regulator-mmc1 的初始化是延迟的(延迟探测器)、这将导致 MMC 控制器 (fa00000.mmc) 的初始化失败。

    我的理解是否正确?
    如果是、由于根据这个修改后的 DTS 编译的 DTB 理论上应该阻止内核访问 0x23、因此我怀疑发生了以下两种情况之一:

    引导过程以某种方式加载一个较旧的.dtb 文件(可能来自引导分区)、而不是包含“禁用“设置的新文件。

    另一个.dtsi 文件或节点正在将此设置重写为“正常“、或对其具有很强的依赖性。

    问题:
    内核忽略 GPIO@23 的“禁用“状态并采用这种行为的可能原因是什么?
    此外、是否有一种建议的方法(例如,通过 U-Boot 命令或内核输出)可以确切验证在运行时将哪个.dtb 文件 U-Boot 传递给内核?

    此致、

    Toshiki

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

    嗨、Toshiki、

    我在办公室里呆了几天,对延迟的答复表示歉意。

    应用上述更改后、我能够从 SD 卡读取数据。 但是、当内核成功引导时、

    很高兴听到内核现在正在从 sdhci2 接口启动。

    [报价 userid=“689460“ url=“~/support/processors-group/processors/f/processors-forum/1634253/tda4ven-q1-how-to-enable-mmc2-sd-card-in-u-boot-when-booting-from-ospi/6351972

    我对这个错误日志的理解是、尽管 DTS 发生了变化、但内核仍尝试探测 2-0023 (I2C 地址 0x23)。
    因此、regulator-mmc1 的初始化是延迟的(延迟探测器)、这将导致 MMC 控制器 (fa00000.mmc) 的初始化失败。

    我的理解是否正确?
    如果是、由于根据这个修改后的 DTS 编译的 DTB 理论上应该阻止内核访问 0x23、因此我怀疑发生了以下两种情况之一:

    引导过程以某种方式加载一个较旧的.dtb 文件(可能来自引导分区)、而不是包含“禁用“设置的新文件。

    另一个.dtsi 文件或节点正在将此设置重写为“正常“、或对其具有很强的依赖性。

    问题:
    内核忽略 GPIO@23 的“禁用“状态并采用这种行为的可能原因是什么?
    也是 t

    [/报价]

    第 1 步:

    理想情况下、uboot 从  rootfs 分区的/boot/dtb 目录中提取 Linux 内核的 dtb。 因此、您是否可以更新 Linux 内核目录中 j722s 板的 Linux 内核器件树、执行与 uboot 器件树相同的更改(即:禁用 sdhci1 节点、启用 sdhci2 节点、设置 sdhci2 节点的 pinmux 等)、编译此 DTB 、然后将其复制到 SD 卡 rootfs 分区的/boot/dtb 目录中。

    第 2 步:

    此外,我认为内核试图从 fa00000.mmc 而不是 fa20000.mmc 装载 rootfs。 因此、在执行步骤 1 后、您是否还可以在 uboot 处启动和浏览、然后输入以下命令。 这些命令可确保从  fa20000.mmc 获取 rootfs

    printenv
    setenv args_mmc "run finduuid;setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk2p2 rw rootfstype=ext4 rootwait"
    setenv bootdev 2
    setenv mmcdev 2
    setenv bootpart 2:2


    此致

    Gokul Praveen

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

    尊敬的 Gokul:

    谢谢你。 我知道 Linux 内核侧的器件树也需要像 U-Boot 一样进行修改。

    我们使用的 Linux 内核器件树被编译到 位于以下目录下的 k3-j722s-evm.dts 中的 dtb:
    /ti-processor-sdk-linux-adas-j722s-evm-11_01_00_03/board-support/ti-linux-kernel-6.12.35+git-ti/arch/arm64/boot/dts/ti/

    您能否告知 应该修改 k3-j722s-evm.dts 的哪些部分?

    此致、

    Toshiki