Other Parts Discussed in Thread: BEAGLEY-AI, SK-TDA4VM, TDA4VM
器件型号: DRA829J-Q1
Thread 中讨论的其他器件: BeagleY-AI、 DRA829、 SK-TDA4VM
在使用 DRA829 SoC 在定制电路板上以 SDR104 模式测试 MMCSD1 接口时、我注意到一些 SD 卡供应商存在问题、但该问题会影响其他评估板、例如 SK-TDA4VM (J721e)、Beagley-AI (J722s)、但不会影响 BBAI64 (J721e)。 (在删除 SDR104 限制之前、SD DDR50 会重现问题。)
预期结果: [ 3.119790] mmc1: new ultra high speed SDR104 SDXC card at address 5048[ 3.126756] mmcblk1: mmc1:5048 SD64G 58.0 GiB
结果是便宜的(假的?) SDCard 卡: [ 3.142101] mmc1: new high speed SDXC card at address b369[ 3.147949] mmcblk1: mmc1:b369 SDABC 58.2 GiB
我还注意到 u-boot 或 Linux 内核的引导问题与一些(并非所有)可疑的 SDcard 有关:
mmc1: SDHCI controller on 4fb0000.mmc [4fb0000.mmc] using ADMA 64-bitWaiting for root device /dev/mmcblk1p2...mmc1: error -110 whilst initialising SD card
它保证了 BBAI64 (j721e) 在 u-boot[1]中仅限于 SD 高速的 MMCSD1 接口上流式传输。
BeagleBoard AI64 似乎重复使用了其他 TI K3 SoC 的一些器件树示例。
实际上、第一个 K3 SoC (AM65xx) 过去似乎存在 SD UHS 问题、 因此 SD UHS 支持完全禁用:
“ARM:dts:k3-am625-sk-u-boot:在 MMCSD1 实例上禁用 UHS 速度模式
启用 UHS 速度模式时、在一些 SD 卡上会观察到不稳定性。 因此、应通过在 sdhci1 器件树节点中添加 sdhci-cap-Masks 来禁用 UHS 模式。“ [2]
“ARM:dts:k3-am654-base-board:将 SD 卡限制为高速模式
基板存在一个问题、即下电上电电路断电所需的时间比 MMC 内核预期的时间更长。 工程。 这可防止卡在 UHS 模式下进行枚举。
在新的电路板版本解决问题之前、禁用此电路板的 UHS 模式。“ [3]
“arm64:dts:k3:添加特定于 u-boot 的节点
arch/arm/dts/k3-am654-base-board-u-boot.dtsi
+&sdhci1{
- u-boot、dm-spl;
- 状态=“正常“;
- pinctrl-names =“default";“;
- pinctrl-0 =<&main_mmc1_pins_default>;
- SDHCI-CAPS-MASK =<0x7 0x0>;+};
“[4]
因此、当 u-boot 在 UHS 模式下配置 MMCSD 接口时、此 SD 卡问题可以重现、内核在使用某些 SD 卡验证电压开关信号时似乎存在一些问题。
MMC 驱动程序核心函数 MMC_SD_setup_card()[5]使用 MMC_READ_SWITCH ()[6]检索 SD 卡信息。 'sd3_bus_mode'值包含描述 SD 卡实际支持的标志。
但出于某种原因、对于某些 SD 卡、仅广播 SD HS 模式:
CARD->SW_CAPS.SD3_BUS_MODE = 3
对于其他 SD 卡、广播所有 UHS 模式:
卡->SW_CAPS.SD3_BUS_MODE 31
SD3_BUS_MODE 值由发送 SD_SWITCH 操作码的 MMC_SD_SWITCH ()[7]函数设置:
MMC_SD_SWITCH (... 状态);
...
CARD->SW_CAPS.SD3_BUS_MODE = STATUS[13];
禁用 SD UHS 模式可使 SD 卡保持由 3、3V VDD_SD_DV 电源供电。
通过 u-boot 启用 SD UHS 模式后、VDD_SD_DV 设置为 1、8V。 当内核启动时、对于某些 SD 卡 (SanDisk One)、PMIC 驱动程序会收到有关 LDO1 电压超出其预期范围的 IRQ:
[ 3.149028] tps6594 0-004C:LDO1 的 IRQ 陷阱过压错误
(SK TDA4VM 上重现问题)
因此、我们在 uboot 中禁用了 SD UHS、以便 Linux 内核正确配置 SD UHS。
注意:
对于 AM57xx SoC、TI-SDK 提供了一个“功能“SD 卡的简短列表[8]。
此列表是否仍适用于较新的 K3 SoC? 即使 MMCSD 控制器不同、也是如此。
关于 DRA829 SoC 的 MMCSD SDR104 支持:
由于勘误表 i2090、已通过提交[9]为所有 J721e SoC 禁用 SD UHS SDR104。
但此勘误表仅适用于 J721e SR1.0 [10]
i2090 - MMCSD:MMCSD1 和 MMCSD2 速度问题
受影响的器件修订版本
SR 1.0 | SR 1.1 | SR 2.0
是|否|否
TI J721e EVM 板 (REV A) 和其他基于 J721e 的板 (BeagleboneAI64 和 SK-TDA4VM) 公开使用的是 SoC SR1.1。
J721e SR1.0 用于早期的 J721E EVM 原型板修订版 E8 [11]、J721e EVM 修订版 E8a 原型已经使用 SR1.1。
在此期间、需要根据 2024 年 4 月发布的最新修订版数据表 SPRSP36K、使用传统和高速模式的延迟值更新 j721e-main 器件树[12]。
(MMC1/2 - SD/SDIO 接口):更新/更改了
的“OTAPDLYENA、延迟启用“和“OTAPDLYSEL、延迟值“
默认速度和高速模式从“0x0"至“至“0x1"</s>“
表 6-86. 所有时序模式的 MMC1/2 DLL 延迟映射
(SPRSP36K–2021 年 9 月–2024 年 4 月修订)
内核邮件列表[13]上发送了一个补丁。
[1] https://source.denx.de/u-boot/u-boot/-/commit/7f78636667f4dcab784548651a2cc3abd60476cf#line_8b6ae81ae_A139
[2] BeagleBoard/u-boot@5c309ad
[3] https://source.denx.de/u-boot/u-boot/-/commit/9aa4302c02de12517bf08d0fc487bf4da290c3e2
[4] https://source.denx.de/u-boot/u-boot/-/commit/853f7f5018d9b67b6039a78127c44e2daa467204
[5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/mmc/core/sd.c?h=linux-6.1.y#n944
[6] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/mmc/core/sd.c?h=linux-6.1.y#n324
[7] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/mmc/core/sd_ops.c?h=linux-6.1.y#n310
[8] https://software-dl.ti.com/processor-sdk-linux/esd/AM57X/11_01_02_01/exports/docs/linux/Foundational_Components /内核/UHS/Storage/MMC-SD.html#supported-ultra-high-speed-uty-modes Kernel_Drivers
[9] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=eb8f6194e8074d7b00642dd75cf04d13e1b218e4
[10] www.ti.com/.../sprz455.pdf
[11] www.ti.com/.../SPRR411
[12] www.ti.com/.../tda4vm.pdf
[13] https://lore.kernel.org/linux-omap/20260218203823.1825554-1-romain.naour@smile.fr/