工具与软件:
我的客户在 Linux 中复制大文件时具有部分板 eMMC HS200稳定性、但无法正常运行。 借助来自此 主题 的补丁、可以修复故障电路板。
在注明的 SDK10.01版本中、解决了复制大文件失败问题。 然后、将补丁与 SDK9.2、SDK10.0和 SDK10.1的相对文件进行了比较、摘要和问题如下:
#1。 在 SDK10.1之前、uboot 和内核 dtsi sdhci0参数都使用相同的参数、但不遵循数据表。
sdhci0: mmc@fa10000 { compatible = "ti,am62-sdhci"; reg = <0x00 0x0fa10000 0x00 0x1000>, <0x00 0x0fa18000 0x00 0x400>; interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>; power-domains = <&k3_pds 57 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 57 5>, <&k3_clks 57 6>; clock-names = "clk_ahb", "clk_xin"; assigned-clocks = <&k3_clks 57 6>; assigned-clock-parents = <&k3_clks 57 8>; bus-width = <8>; mmc-ddr-1_8v; mmc-hs200-1_8v; 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>; status = "disabled"; };
#2。 在 SDK10.1中、uboot 仍然使用 upper/old 参数。 内核 DTS 按照数据表进行了如下更新。
问题:
#2.1为什么 uboot 使用不同的抽头延迟参数、该参数不遵循数据表、但在 HS200下仍然可以工作。
第2.2号。 为什么 Linux 必须使用抽头延迟值作为数据表、它是解决该问题的主要因素吗? 或者只是更新它以遵循数据表? 但忘记更新 uBoot dts fil?
sdhci0: mmc@fa10000 { compatible = "ti,am62-sdhci"; reg = <0x00 0x0fa10000 0x00 0x1000>, <0x00 0x0fa18000 0x00 0x400>; interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>; power-domains = <&k3_pds 57 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 57 5>, <&k3_clks 57 6>; clock-names = "clk_ahb", "clk_xin"; assigned-clocks = <&k3_clks 57 6>; assigned-clock-parents = <&k3_clks 57 8>; bus-width = <8>; mmc-ddr-1_8v; mmc-hs200-1_8v; ti,clkbuf-sel = <0x7>; ti,otap-del-sel-legacy = <0x0>; ti,otap-del-sel-mmc-hs = <0x0>; ti,otap-del-sel-hs200 = <0x6>; ti,itap-del-sel-legacy = <0x0>; ti,itap-del-sel-mmc-hs = <0x0>; status = "disabled"; };

#3. drivers/mmc/host/sdhci_am654.c 中有一些更改、 但与主线程中的补丁相比、SDK10.1中没有发现以下更改、该补丁是否实际上不需要?
static u8 sdhci_am654_write_power_on(struct sdhci_host *host, u8 val, int reg) { writeb(val, host->ioaddr + reg); @@ -706,6 +753,12 @@ static int sdhci_am654_init(struct sdhci_host *host) u32 mask; u32 val; int ret; + u16 ctrl; + + /* Unset CTRL_VDD_180 */ + ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); + ctrl &= ~SDHCI_CTRL_VDD_180; + sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
#4. sdhci_am654.c 的主要变化是添加 sdhci_am654_start_signal_voltage_switch()调用。 此更改修复了什么问题?
#5. 从上螺纹、更换串联电阻可以帮助解决问题。 最初是33欧姆、某些板无法启动。 然后更改为22欧姆、可以启动。
#6. 使用贴片、无论电阻器是33欧姆、22欧姆还是0欧姆、都可以启动。 补丁的影响似乎大于硬件因素。
因此需要弄清楚驱动器变化。