Hi,
My custom board can't boot up in SD boot mode.
I have tested the SD card can boot on tda2xx RVP board when setting the SD boot mode.
I don't know if the hardware is good so I load the sd boot image
VSDK_03_07\vision_sdk\binaries\apps\tda2xx_rvp_bios_all\sbl\sd\opp_nom\tda2xx-rvp\sbl_sd_opp_nom_a15_0_debug.xa15fg
It will open the AppImage file in SD card.
When debug in CCS, the log below.
TDA2xx SBL Boot
DPLL Configuration Completed
Clock Domain Configuration Completed
Module Enable Configuration Completed
TI EVM PAD Config Completed
ERROR: HW-Leveling time-out
DDR Config Completed
App Image Download Begins
(it stop here)
----------------------------------------------------------------
I found when execute MMCSDCardInit() step , it get stuck in
HSMMCSDXferStatusGet() while loop.
hsmmcsd_API.c:
static uint32_t HSMMCSDXferStatusGet(mmcsdCtrlInfo *ctrl)
{
volatile uint32_t status = 0;
volatile uint32_t temp;
volatile uint32_t i = 0, i_max = 0;
volatile unsigned char *dst_bfr = hsmmcsd_buffer;
while (1)
{
status = HSMMCSDStatusGet();
if (status & HS_MMCSD_STAT_BUFRDRDY)
{
HSMMCSDIntrStatusClear(ctrlInfo.memBase,
HS_MMCSD_STAT_BUFRDRDY);
if (dst_bfr != NULL)
{
if (hsmmcsd_dataLen < ctrl->blocksize)
{
i_max = hsmmcsd_dataLen;
}
else
{
i_max = ctrl->blocksize;
}
/*Input data bfr will not be 4-byte aligned*/
for (i = 0; i < i_max; i += 4)
{
temp = HW_RD_REG32(ctrlInfo.memBase + MMC_DATA);
dst_bfr[i] = *((char *) &temp);
dst_bfr[i + 1] = *((char *) &temp + 1);
dst_bfr[i + 2] = *((char *) &temp + 2);
dst_bfr[i + 3] = *((char *) &temp + 3);
}
dst_bfr += i_max;
}
}
if (status & HS_MMCSD_STAT_BUFWRRDY)
{
HSMMCSDIntrStatusClear(ctrlInfo.memBase,
HS_MMCSD_STAT_BUFWRRDY);
if (hsmmcsd_buffer != NULL)
{
for (i = 0; i < hsmmcsd_dataLen; i += 4)
{
*((char *) &temp) = hsmmcsd_buffer[i];
*((char *) &temp + 1) = hsmmcsd_buffer[i + 1];
*((char *) &temp + 2) = hsmmcsd_buffer[i + 2];
*((char *) &temp + 3) = hsmmcsd_buffer[i + 3];
HW_WR_REG32(ctrlInfo.memBase + MMC_DATA, temp);
}
}
}
if (status & HS_MMCSD_STAT_DATATIMEOUT)
{
HSMMCSDIntrStatusClear(ctrlInfo.memBase,
HS_MMCSD_STAT_DATATIMEOUT);
status = 0;
xferPend = 0;
break;
}
if (status & HS_MMCSD_STAT_TRNFCOMP)
{
HSMMCSDIntrStatusClear(ctrlInfo.memBase,
HS_MMCSD_STAT_TRNFCOMP);
status = 1;
xferPend = 0;
break;
}
}
return status;
}
The HSMMCSDStatusGet() return the MMCHS_STAT register value.
MMCHS_STAT always return zero and no condition leave the while loop.
The pins mmc1_clk and mmc1_cmd have signals and the other data pins have no signals.
Do you have any suggestions for this issue?
Thanks,
Terry