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.

[参考译文] AM625:eMMC 1.8V 或 3.3V

Guru**** 2378650 points
Other Parts Discussed in Thread: SK-AM62, AM62P, SK-AM62B
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1523728/am625-emmc-1-8v-or-3-3v

器件型号:AM625
Thread 中讨论的其他器件:SK-AM62B、AM62P、SK-AM62

工具/软件:

Linux SDK8.3、为了将 eMMC 限制为仅在高速 50MHz 下工作。 请参阅 SDK8.6 至 SDK8.3 的补丁

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1221254/am623-custom-hardware---emmc-cqe-recovery-during-boot/

用于 SDK8.6 的补丁

Signed-off-by: Judith Mendez <jm@ti.com>
---
 arch/arm/dts/k3-am62-main.dtsi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/dts/k3-am62-main.dtsi b/arch/arm/dts/k3-am62-main.dtsi
index f3296f2671b..78ca7c34066 100644
--- a/arch/arm/dts/k3-am62-main.dtsi
+++ b/arch/arm/dts/k3-am62-main.dtsi
@@ -349,10 +349,10 @@
                ti,clkbuf-sel = <0x7>;
                ti,otap-del-sel-legacy = <0x0>;
                ti,otap-del-sel-mmc-hs = <0x0>;
-               ti,otap-del-sel-ddr52 = <0x5>;
-               ti,otap-del-sel-hs200 = <0x5>;
                ti,itap-del-sel-legacy = <0xa>;
                ti,itap-del-sel-mmc-hs = <0x1>;
+               /delete-property/mmc-ddr-1_8v;
+               /delete-property/mmc-hs200-1_8v;
        };
 
        sdhci1: mmc@fa00000 {
-- 
2.17.1

对客户的 SDK8.3 进行了修改。

 

结果:  

#1。 eMMC 在 50MHz eMMC_CLK 上运行。

#2.  CAT /sys/kernel/debug/mmc0 /*显示信号电压为 3.3V。 但定制电路板上实际上是 1.8V。

问题:

#1。 为了将 eMMC 限制为高速 SDR 而进行的修改是否正确? 在 SDK8.6 dtsi 中、有 ITAP 选项、是否还应将其添加到 SDK8.3 中?  

ti,itap-del-sel-legacy = <0xa>;
ti,itap-del-sel-mmc-hs = <0x1>;

#2. 硬件中的信号电源电压固定在 1.8V、 cat /sys/kernel/debug/mmc0 /*输出的 3.3V 意味着什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #1. 为了将 eMMC 限制为高速 SDR 而进行的修改是否正确? 在 SDK8.6 dtsi 中、有 ITAP 选项、是否还应将其添加到 SDK8.3 中?  [/报价]

    这些更改是正确的、以便在 HS 模式下初始化 eMMC。

    #2. 硬件中的信号电源电压固定在 1.8V、 cat /sys/kernel/debug/mmc0 /*输出的 3.3V 平均值是多少?

    这是不可能的。 对于 HS200 等更高模式、eMMC 初始化从 3.3V 开始、随后切换到 1.8V。

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

    #1。 客户遵循了 SK-AM62B 电路板原理图、eMMC_CMD 和 DAT0 也在外部上拉至 1.8V。 我认为它无法动态切换。

    #2. 在 SK-AM62B 原理图中、可以使用 MMC1 连接的 SD 卡、它具有一个专用电源、可在 3.3V/1.8V 之间切换。  

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

    尊敬的 Tony:

    #2. 硬件中的信号电源电压固定在 1.8V、 cat /sys/kernel/debug/mmc0 /*输出的 3.3V 平均值是多少?

    3.3V 信息不正确、因为我们知道 eMMC VDD 仅为 1.8V。

    我将尝试理解为什么软件报告 3.3V、代码中似乎存在误配置。 内核 debugfs 仅供参考、它不会影响 MMC 函数。

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

    客户要求更新。

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

    此任务的优先级较低。 至少在几周内我不会进入它。 内核 debugfs 的 VDD 仅供参考、它不会影响 MMC 功能。 可以忽略它。 我们已经知道它是 1.8V。

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

    理解、如何将其报告为软件错误以供开发团队在下一个 SDK 中修复、无需应用团队。

    与 SDK11.0.09.04 相同:

    使用默认 DTS:

    root@am62xx-evm:~# dmesg |grep mmc0
    [    1.995025] mmc0: CQHCI version 5.10
    [    2.038584] mmc0: SDHCI controller on fa10000.mmc [fa10000.mmc] using ADMA 64-bit
    [    2.134183] mmc0: Command Queue Engine enabled
    [    2.138694] mmc0: new HS200 MMC card at address 0001
    [    2.144928] mmcblk0: mmc0:0001 G1M15L 29.6 GiB
    [    2.154547] mmcblk0boot0: mmc0:0001 G1M15L 31.5 MiB
    [    2.160912] mmcblk0boot1: mmc0:0001 G1M15L 31.5 MiB
    [    2.167197] mmcblk0rpmb: mmc0:0001 G1M15L 4.00 MiB, chardev (239:0)
    root@am62xx-evm:~# cat /sys/kernel/debug/mmc0/*
    0x4000004b
    0x00860020
    200000000
    0
    # Command Timeout Occurred:      0
    # Command CRC Errors Occurred:   0
    # Data Timeout Occurred:         0
    # Data CRC Errors Occurred:      0
    # Auto-Cmd Error Occurred:       0
    # ADMA Error Occurred:   0
    # Tuning Error Occurred:         0
    # CMDQ RED Errors:       0
    # CMDQ GCE Errors:       0
    # CMDQ ICCE Errors:      0
    # Request Timedout:      0
    # CMDQ Request Timedout:         0
    # ICE Config Errors:     0
    # Controller Timedout errors:    0
    # Unexpected IRQ errors:         0
    clock:          200000000 Hz
    actual clock:   200000000 Hz
    vdd:            21 (3.3 ~ 3.4 V)
    bus mode:       2 (push-pull)
    chip select:    0 (don't care)
    power mode:     2 (on)
    bus width:      3 (8 bits)
    timing spec:    9 (mmc HS200)
    signal voltage: 1 (1.80 V)
    driver type:    0 (driver type B)
    cat: '/sys/kernel/debug/mmc0/mmc0:0001': Is a directory
    root@am62xx-evm:~#
    
    

    从 DTS 中删除 MMC-DDR-1_8v;MMC-HS200-1_8v:

    root@am62xx-evm:~# dmesg |grep mmc0
    [    2.002399] mmc0: CQHCI version 5.10
    [    2.048162] mmc0: SDHCI controller on fa10000.mmc [fa10000.mmc] using ADMA 64-bit
    [    2.135543] mmc0: Command Queue Engine enabled
    [    2.140055] mmc0: new high speed MMC card at address 0001
    [    2.146665] mmcblk0: mmc0:0001 G1M15L 29.6 GiB
    [    2.156581] mmcblk0boot0: mmc0:0001 G1M15L 31.5 MiB
    [    2.162875] mmcblk0boot1: mmc0:0001 G1M15L 31.5 MiB
    [    2.170510] mmcblk0rpmb: mmc0:0001 G1M15L 4.00 MiB, chardev (239:0)
    root@am62xx-evm:~# cat /sys/kernel/debug/mmc0/*
    0x4000004b
    0x00860000
    52000000
    0
    # Command Timeout Occurred:      0
    # Command CRC Errors Occurred:   0
    # Data Timeout Occurred:         0
    # Data CRC Errors Occurred:      0
    # Auto-Cmd Error Occurred:       0
    # ADMA Error Occurred:   0
    # Tuning Error Occurred:         0
    # CMDQ RED Errors:       0
    # CMDQ GCE Errors:       0
    # CMDQ ICCE Errors:      0
    # Request Timedout:      0
    # CMDQ Request Timedout:         0
    # ICE Config Errors:     0
    # Controller Timedout errors:    0
    # Unexpected IRQ errors:         0
    clock:          52000000 Hz
    actual clock:   50000000 Hz
    vdd:            21 (3.3 ~ 3.4 V)
    bus mode:       2 (push-pull)
    chip select:    0 (don't care)
    power mode:     2 (on)
    bus width:      3 (8 bits)
    timing spec:    1 (mmc high-speed)
    signal voltage: 0 (3.30 V)
    driver type:    0 (driver type B)
    cat: '/sys/kernel/debug/mmc0/mmc0:0001': Is a directory
    root@am62xx-evm:~#

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    明白了、如何将其报告为软件错误以供开发团队在下一个 SDK 中修复、而无需依赖应用团队。

    是的、我已经向我们的软件开发团队提到了这个问题。 我将提交一个错误票证来跟踪问题。

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

    根据以下评论、如果我们有一个 1.8V 的固定稳压器、则内核会禁用 3.3V 电压支持。  

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/mmc/host/sdhci.c#n4571

    因此、以下补丁会在所有速度模式下强制使用 1.8V 电压:

    diff --git a/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi
    index 3e5ca8a3eb86..38ba795f7a90 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi
    @@ -597,8 +597,6 @@ sdhci0: mmc@fa10000 {
     		ti,trm-icp = <0x8>;
     		ti,otap-del-sel-legacy = <0x1>;
     		ti,otap-del-sel-mmc-hs = <0x1>;
    -		ti,otap-del-sel-ddr52 = <0x6>;
    -		ti,otap-del-sel-hs200 = <0x8>;
     		ti,itap-del-sel-legacy = <0x10>;
     		ti,itap-del-sel-mmc-hs = <0xa>;
     		ti,itap-del-sel-ddr52 = <0x3>;
    diff --git a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    index ddcbdee853e6..519f42a2c770 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am62p5-sk.dts
    @@ -160,6 +160,15 @@ vddshv_sdio: regulator-3 {
     		bootph-all;
     	};
     
    +	vqmmc_mmc0: regulator-0 {
    +		compatible = "regulator-fixed";
    +		regulator-name = "vqmmc_mmc0";
    +		regulator-min-microvolt = <1800000>;
    +		regulator-max-microvolt = <1800000>;
    +		regulator-always-on;
    +		bootph-all;
    +	};
    +
     	leds {
     		compatible = "gpio-leds";
     		pinctrl-names = "default";
    @@ -606,6 +615,7 @@ &main_i2c2 {
     
     &sdhci0 {
     	status = "okay";
    +	vqmmc-supply = <&vqmmc_mmc0>;
     	ti,driver-strength-ohm = <50>;
     	disable-wp;
     	bootph-all;
    

    否则、以下补丁也会独立强制使用 1.8V 电压:

    diff --git a/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi
    index 3e5ca8a3eb86..38ba795f7a90 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62p-j722s-common-main.dtsi
    @@ -597,8 +597,6 @@ sdhci0: mmc@fa10000 {
     		ti,trm-icp = <0x8>;
     		ti,otap-del-sel-legacy = <0x1>;
     		ti,otap-del-sel-mmc-hs = <0x1>;
    -		ti,otap-del-sel-ddr52 = <0x6>;
    -		ti,otap-del-sel-hs200 = <0x8>;
     		ti,itap-del-sel-legacy = <0x10>;
     		ti,itap-del-sel-mmc-hs = <0xa>;
     		ti,itap-del-sel-ddr52 = <0x3>;
    diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c
    index 9ff07aadb2d9..dde79080d318 100644
    --- a/drivers/mmc/host/sdhci_am654.c
    +++ b/drivers/mmc/host/sdhci_am654.c
    @@ -802,6 +802,10 @@ static int sdhci_am654_init(struct sdhci_host *host)
     	if (ret)
     		return ret;
     
    +	/* Force 1.8V signal voltage */
    +	host->flags &= ~SDHCI_SIGNALING_330;
    +	host->flags |=  SDHCI_SIGNALING_180;
    +
     	ret = sdhci_am654_cqe_add_host(host);
     	if (ret)
     		goto err_cleanup_host;
    
     

    这两个补丁都为 HS 模式单独正确设置了 1.8V:

    [19:25:15.320] root@am62pxx-evm:~# cat /sys/kernel/debug/mmc0/ios
    [19:25:19.528] clock:           52000000 Hz
    [19:25:19.530] actual clock:    50000000 Hz
    [19:25:19.532] vdd:             7 (1.65 - 1.95 V)
    [19:25:19.545] bus mode:        2 (push-pull)
    [19:25:19.547] chip select:     0 (don't care)
    [19:25:19.549] power mode:      2 (on)
    [19:25:19.551] bus width:       3 (8 bits)
    [19:25:19.553] timing spec:     1 (mmc high-speed)
    [19:25:19.555] signal voltage:  1 (1.80 V)
    [19:25:19.557] driver type:     0 (driver type B)

    对于默认行为、内核最初使用以下函数设置电压:

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/mmc/core/core.c#n1177

    TI 主机驱动程序没有明确禁用 3.3V 电压、因此初始电压设置为 3.3V。 对于 HS200 等高速模式、驱动器中相应的功能包含代码、然后将电压设置为 1.8V。

    如果禁用 3.3V 支持、则初始电压设置为 1.8V、因此所有速度模式均设置为 1.8V。

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

    我们使用 AM62-SK 板、而不是 AM62P 板。 采用第一种方法对 DTS 进行类似的更改。 得到的结果低于预期。 发生了 9 个 CRC 错误、VDD 为 3.3V。  

    root@am62xx-EVM:~# cat /sys/kernel/debug/mmc0 /*
    0x4000004b
    0x00860000
    52000000
    1.
    #发生命令超时: 0
    #发生命令 CRC 错误: 0
    #发生数据超时: 0
    #发生数据 CRC 错误: 9.
    #发生 Auto-Cmd 错误: 0
    #发生 ADMA 错误: 0
    #发生调优错误: 0
    # CMDQ 红色错误: 0
    # CMDQ GCE 错误: 0
    # CMDQ ICCE 错误: 0
    #请求超时: 0
    # CMDQ 请求超时: 0
    # ICE 配置错误: 0
    #控制器超时错误: 0
    #意外的 IRQ 错误: 0
    时钟:52000000 Hz
    实际时钟:50000000 Hz
    VDD:21 (3.3 ~ 3.4V)
    总线模式:2(推挽)
    芯片选择:0(无关)
    电源模式:2(开)
    总线宽度:3(8 位)
    时序规格:1(MMC 高速)
    信号电压:1 (1.80V)
    驱动器类型:0(驱动器类型 B)
    CAT:“/sys/kernel/debug/mmc0/mmc0:0001“:是一个目录
    Root@am62xx-EVM:~#

    从代码中可以看到、当设置为 1V8 时、它访问 Ctrl 寄存器实际上很重要、因此需要明确其以防其影响。

    附上更改后的 DTS

    e2e.ti.com/.../2870.k3_2D00_am625_2D00_sk.dts

    e2e.ti.com/.../2870.k3_2D00_am62_2D00_main.dtsi

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

    您好、Prashant、

    您是否曾在 SK-AM62 板上试用过? 分析代码、看看它是否影响寄存器配置、而不仅仅是错误的信息。

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

    您好 Prashant、

    此请求是否仍在跟踪中? 或提交 JIRA?