Hello,
I want to use an eMMC-Chip conntected to the MMC1 Interface of the AM3352. I use my own baremetal program an doesnt have any operating system.
When I turn on the Bus power (set SD_HCTL[SDBP] = 1) and poll for it, the SDBP will never be on.
In the TRM is mentions that If the host controller detects the No card state the bit is reset to 0.
But what causes this state or there are another reasons for the SDPB-Bit remains 0
Here is the code:
//Pin Mux
{
CONTROL_MODULE_GPMC_AD0_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD1_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD2_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD3_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD4_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD5_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD6_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_AD7_REG.B.PAD = 0x1;
CONTROL_MODULE_GPMC_CSN1_REG.B.PAD = 0x2;
CONTROL_MODULE_GPMC_CSN2_REG.B.PAD = 0x2;
}
//Enable Clocks
{
CM_PER_MMC1_CLKCTRL_REG |= 0x2;
CM_PER_L3_CLKCTRL_REG |= 0x2;
CM_PER_L4LS_CLKSTCTRL_REG |= 0x2;
CM_PER_CLKDIV32K_CLKCTRL_REG |= 0x2;
//enable clock for mmc1
CM_PER_MMC1_CLKCTRL_REG |= 0x0; //Enable Clock
CM_PER_MMC1_CLKCTRL_REG |= 0x2; //Enable Clock
while( (CM_PER_MMC1_CLKCTRL_REG & 0x2) != 0x2 )
asm volatile("nop");
}
//Soft Reset
{
MMC_X_SD_SYSCONFIG_REG(aMmcBase).B.SOFTRESET = 1;
while( MMC_X_SD_SYSSTATUS_REG(aMmcBase).RESETDONE != 0x1 )
asm volatile("nop");
}
//Set CAPA
{
MMC_X_SD_CAPA_REG(aMmcBase).B.VS18 = 1;
MMC_X_SD_CAPA_REG(aMmcBase).B.VS30 = 1;
MMC_X_SD_CAPA_REG(aMmcBase).B.VS33 = 1;
}
//Clock and Idle Config
{
MMC_X_SD_SYSCONFIG_REG(aMmcBase).B.AUTOIDLE = 0x0; //
MMC_X_SD_SYSCONFIG_REG(aMmcBase).B.ENAWAKEUP = 0x1; //Enabled
MMC_X_SD_SYSCONFIG_REG(aMmcBase).B.SIDLEMODE = 0x1; //???
MMC_X_SD_SYSCONFIG_REG(aMmcBase).B.CLOCKACTIVITY = 0x3; //Interface and Functional Clock [On]
MMC_X_SD_HCTL_REG(aMmcBase).B.IWE = 0x1; //Wakepu on card Interrupt
}
//MMC Host Configuration
{
MMC_X_SD_CON_REG(aMmcBase).B.DW8 = 0x0; //1-Bit Datatransfer
MMC_X_SD_HCTL_REG(aMmcBase).B.DTW = 0x0; //1-Bit Datatransfer
MMC_X_SD_HCTL_REG(aMmcBase).B.SDVS = 0x5; //Volt
MMC_X_SD_HCTL_REG(aMmcBase).B.SDBP = 0x1; //Power on Host Controller
while( MMC_X_SD_HCTL_REG(aMmcBase).B.SDBP != 0x1 )
asm volatile("nop");
}
Thanks in advance
Best Regards
Martin