AnsweredAssumed Answered

i.MXRT1050 EVKB USDHC1 eMMC DDR52 issue

Question asked by Yugandhar Babu Potarlanka on Jan 9, 2020
Latest reply on Jan 17, 2020 by Jing Pan

Hi,

 

I am using i.MXRT1050 EVKB board to test eMMC chip which is connected to micro SD slot on evaluation board with help of micro SD adapter. The micro SD slot connected to USDHC1 of i.MXRT1050.

 

I enabled 4bit high speed mode in eMMC chip with 52MHz clock in host using below code, I can able to read/write eMMC chip perfectly.

 

    if (kStatus_Success != MMC_SwitchHSTiming(card, kMMC_HighSpeedTiming, kMMC_DriverStrength0))
    {
        return kStatus_SDMMC_SwitchBusTimingFailed;
    }

    card->busTiming = kMMC_HighSpeedTiming;

    SDMMCHOST_SET_CARD_BUS_WIDTH(card->host.base, kSDMMCHOST_DATABUSWIDTH4BIT);
    card->busWidth = kMMC_DataBusWidth4bit;
    if (kStatus_Success != MMC_SetDataBusWidth(card, card->busWidth))
    {
         return kStatus_SDMMC_SwitchBusTimingFailed;
    }

    if (kStatus_Success != MMC_TestDataBusWidth(card, card->busWidth))
    {
     return kStatus_SDMMC_SwitchBusTimingFailed;
    }

    card->busClock_Hz = SDMMCHOST_SET_CARD_CLOCK(card->host.base, card->host.sourceClock_Hz, MMC_CLOCK_52MHZ);
    /* config io speed and strength */
    SDMMCHOST_CONFIG_SD_IO(CARD_BUS_FREQ_50MHZ, CARD_BUS_STRENGTH_7);

 

Now my target is DDR mode, so I changed above code as below. Now I am not able to read/write correct data resulting file system crash when I connected same eMMC chip to PC.

 

    if (kStatus_Success != MMC_SwitchHSTiming(card, kMMC_HighSpeedTiming, kMMC_DriverStrength0))
    {
        return kStatus_SDMMC_SwitchBusTimingFailed;
    }

    card->busTiming = kMMC_HighSpeedTiming;

    SDMMCHOST_SET_CARD_BUS_WIDTH(card->host.base, kSDMMCHOST_DATABUSWIDTH4BIT);
    card->busWidth = kMMC_DataBusWidth4bitDDR;
    if (kStatus_Success != MMC_SetDataBusWidth(card, card->busWidth))
    {
         return kStatus_SDMMC_SwitchBusTimingFailed;
    }

    SDMMCHOST_ENABLE_DDR_MODE(card->host.base, true);
    card->busClock_Hz = SDMMCHOST_SET_CARD_CLOCK(card->host.base, card->host.sourceClock_Hz, MMC_CLOCK_DDR52);
    /* config io speed and strength */
    SDMMCHOST_CONFIG_SD_IO(CARD_BUS_FREQ_100MHZ1, CARD_BUS_STRENGTH_7);

 

Am I doing anything wrong in code? Or my micro SD eMMC adapter has insufficient pull-up/pull-down resistors/capacitors to send/receive DDR signal correctly to/from eMMC chip?

 

If anybody know how to enable eMMC DDR mode correctly, please reply.

 

 

Thanks

Yugandhar

Outcomes