工具与软件:
我的客户在 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欧姆、都可以启动。 补丁的影响似乎大于硬件因素。
因此需要弄清楚驱动器变化。