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.

AM2634-Q1: MMC/SD Registers Information

Part Number: AM2634-Q1
Other Parts Discussed in Thread: LP-AM263

Hi expert,

    I can't find MMC0/SD registers information in 

AM263x Sitara Processors Technical Reference Manual Register Addendum (Rev. D)

There is no description for MMC0 offset 0x48300000- 0x48301FFF. Can you please let me know where I can find it?

Regards

Andre

  • Hi Andre,

    Our expert is out of office and returning on 8th Jan 2024. Please be patient.
    Apologies for the delay.

    Best Regards,
    Aakash

  • More question:

        In TRM, we said MMC0 module has MMC0_POW pin, but we can't find this pin on datasheet. 

    The driver still control this pin when it is in initiation stage. Is this internal signals on AM263x?

    What condition can't make the bitfield CSL_MMC_HCTL_SDBP in Register  CSL_MMC_HCTL change from 0 to 1?

    static int32_t MMCSD_busPowerOnCtrl(uint32_t baseAddr, uint32_t pwrCtrl)
    {
    int32_t retVal = SystemP_SUCCESS;

    HW_WR_FIELD32((baseAddr + CSL_MMC_HCTL), CSL_MMC_HCTL_SDBP, pwrCtrl);

    if (MMCSD_PWR_CTRL_ON == pwrCtrl)
    {
    while (pwrCtrl != HW_RD_FIELD32((baseAddr + CSL_MMC_HCTL),
    CSL_MMC_HCTL_SDBP))
    {
    }
    }

    return retVal;
    }

    Regards

    Andre

  • Hi Andre, 

    I am checking with our design and SDK teams on that. I cannot find MMC control register definitions in our TRM Register Addendum either, so I am trying to find a definition source I can share in the meantime. 

    Regarding the MMC_POW pin: this is pin is NOT pinned out on the AM263x devices. A GPIO will have to be utilized for this purpose. See the LP-AM263 schematics for an example implementation. We will need to correct the TRM Table 13-245. MMC/SD/SDIO Controller Pins to include this pin as well. 

    Regarding the MMCSD_busPowerOnCtrl() MMC API function: I think this would be non-functional, but not cause problems. The MMC0_POW pin is not routed on the package and I am pretty sure that is what is controlled by the MMC_HCTL_SDBP register. 

    Looks like this function just writes out the pwrCtrl variable state into the MMCSD_busPowerOnCtrl field. The subsequent While loop is placed to prevent further execution until the write is verified. I would expect this loop to complete immediately since this register state seems to only be dependent on the previous HW_WR_FIELD32 write. 

    Thank you,

    -Randy

  • Randy,

        The problem is customer stuck in MMCSD_busPowerOnCtrl() this API when they try to enable EMMC. Our EVM doesn't have EMMC on it. 

    This register should be used internal only. Why EMMC driver stop there? I tested SD card, there is no problem. We need more clear description to SD/MMC regsiters.

    Regards

    Andre 

  • There is no EMMC on  CC-AM263x nor LP-AM263x, customer is wondering how we verified EMMC driver and test code. Would you please advise what EMMC part number we used for code development? Can we support 4GB EMMC?

    Regards

    Andre

  • According to feedback from DLP team. In the case of SDK8.6.

    1. Update mmcsd_am263x.syscfg.js in the "C:\ti\mcu_plus_sdk_am263x_08_06_00_34\source\drivers\.meta\mmcsd\soc" line 16 to:

    busWidth : "MMCSD_BUS_WIDTH_4BIT",

    Without the .js file change, the eMMC driver always defaults to 1-bit mode since 8-bit is not support by the AM263x.

     

    1. In the example.syscfg file of the CCS project, manually add the following highlighted in line to set the supported bus voltages parameter from 1.8V to 3.0V:

    mmcsd1.$name                = "CONFIG_MMCSD0";

    mmcsd1.supportedBusVoltages = "VOLTAGE_3_0V";

    mmcsd1.cardType             = "EMMC";

    mmcsd1.MMC.$assign          = "MMC";

    mmcsd1.MMC.MMC_CLK.$assign  = "ball.B6";

    mmcsd1.MMC.MMC_SDWP.pu_pd   = "pd";

    mmcsd1.MMC.MMC_SDWP.$assign = "ball.C6";

    mmcsd1.MMC.MMC_CMD.$assign  = "ball.A4";

    mmcsd1.MMC.MMC_DAT0.$assign = "ball.B5";

    mmcsd1.MMC.MMC_DAT1.$assign = "ball.B4";

    mmcsd1.MMC.MMC_DAT2.$assign = "ball.A3";

    mmcsd1.MMC.MMC_DAT3.$assign = "ball.A2";

    mmcsd1.MMC.MMC_SDCD.pu_pd   = "pd";

    mmcsd1.MMC.MMC_SDCD.$assign = "ball.A5";

    This may be the more relevant fix for the MMCSD_busPowerOnCtrl while loop trap.

    Regards

    Andre

  • Andre, 

    I am putting together the register list for this peripheral. This will be included in the next release of the TRM Register Addendum as well. I'll post that register description here shortly. 

    Regarding the MMCSD_busPowerOnCtrl while loop hang: did this solve the issue? It didn't look like the CSL_MMC_HCTL_SDBP would have been effected by that, but I will look as well once I have the full register context in place. 

    Thank you,

    -Randy

  • Randy,

         According to test, the modification does solve MMCSD_busPowerOnCtrl() problem. 

    Regards

    Andre

  • Hi Andre, 

    Please see the draft MMC register definition I sent over e-mail. You can also reference the AM263Px Register Addendum here: https://www.ti.com/lit/pdf/spruj57

    Let me know if that helps. 

    Thank you,

    -Randy