SD “error -110 whilst initialising SD card

created at 07-03-2022 views: 12

problem

At present, the development has encountered some inconsistencies between the drivers of SD cards and TI's SOC chips, as follows:

uboot stage initialization mmc dev 1 without any serial port information output, unable to read and write mmc

Kernel stage error SD card initialization failed error -110 whilst initialising SD card

reason

The specific reason is that some CMD operations of SD are not supported and return an error of -110, which requires

solution

In the uboot stage, shield it in dts:

main_sdhci1: sdhci@4fb0000 {
  ti,otap-del-sel-legacy = <0x2>;
  /*ti,otap-del-sel-sd-hs = <0xf>;
  ti,otap-del-sel-sdr12 = <0xf>;
  ti,otap-del-sel-sdr25 = <0xf>;
  ti,otap-del-sel-sdr50 = <0xc>;
  ti,otap-del-sel-sdr104 = <0x5>;
  ti,otap-del-sel-ddr50 = <0xc>;
  sdhci-caps-mask = <0x2 0x0>;*/
  dma-coherent;
};

Kernel stage, add in the function void __sdhci_read_caps of drivers/mmc/host/sdhci.c:

host->quirks2 |= SDHCI_QUIRK2_NO_1_8_V;

Mainly to enable SDHCI_QUIRK2_NO_1_8_V

if (host->quirks2 & SDHCI_QUIRK2_NO_1_8_V) {
   host->caps1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
   SDHCI_SUPPORT_DDR50);
   /*
        * The SDHCI controller in a SoC might support HS200/HS400
        * (indicated using mmc-hs200-1_8v/mmc-hs400-1_8v dt property),
        * but if the board is modeled such that the IO lines are not
        * connected to 1.8v then HS200/HS400 cannot be supported.
        * Disable HS200/HS400 if the board does not have 1.8v connected
        * to the IO lines. (Applicable for other modes in 1.8v)
         */
         mmc->caps2 &= ~(MMC_CAP2_HSX00_1_8V | MMC_CAP2_HS400_ES);
         mmc->caps &= ~(MMC_CAP_1_8V_DDR | MMC_CAP_UHS);
}

Recompile u-boot and Kernel to solve SD card problem.

created at:07-03-2022
edited at: 07-03-2022: