第一。 在函数 local_GetAndWriteFileData()中,为什么在写入块和回读以进行验证之间插入如此长的延迟?
//验证写入的数据,一次一个块
对于(i = 0;i< numBlks;i++)
{
if (SDMMC_MEM_writeBytes (hSdmmcMemInfo、
目的地地址、
hSdmmcMemInfo->hSDMMCInfo->dataBytesPerBlk、
&appPtR[i*hSdlmcMemInfo->hSDMMCInfo->dataBytesPerBlk])!= E_PASS)
{
Debug_printString ("\aar:写入 SDMMC 失败。\r\n");
返回 E_FAIL;
}
Util_waitLoop (100000);
if (SDMMC_MEM_verifyBytes (hSdmmcMemInfo、
目的地地址、
hSdmmcMemInfo->hSDMMCInfo->dataBytesPerBlk、
&appPtR[i*hSdlmcMemInfo->hSDMMCInfo->dataBytesPerBlk],
gMemRx)!= E_PASS)
{
Debug_printString ("\aar:验证 SDMMC 失败。\r\n");
返回 E_FAIL;
}
destAddr += hSdmmcMemInfo->hSDMMCInfo->dataBytesPerBlk;
}
2。 在 SDMMC_MEM_writeBytes 中、已存在状态检查。
//等待状态显示完成
while (SDMMMC->MMCST0 & SDMMC_MMCST0_DATDNE_MASK = 0);
3号。 但是、如果删除延迟 UTIL_waitLoop (100000);SDMMMC->MMCST0将为0、程序将在循环中永远等待。
uint32 SDMMC_readNWords (SDMMC_InfoHandle hSDMMCInfo、uint32 *数据、uint32数字字节)
{
DEVICE_SDMMCRegs * SDMMC =(DEVICE_SDMMCRegs *) hSDMMCInfo->regs;
uint16 i=0、j=0;
uint32状态;
uint32 fifoReadItrCount、wordItrCount;
//设置 FIFO 迭代和字迭代的计数器
fifoReadItrCount= numofBytes >> hSDMMCInfo->dataBytesPerOpPower2;
wordItrCount = hSDMMCInfo->dataBytesPerOp >> 2;
for (i=0;<fifoReadItrCount; i++)
{
//等待 DRRDY 或某种错误/超时
操作
{
status=SDMMMC->MMCST0;
IF (STATUS &(SDMMC_MMCST0_CRD_MASK | SDMMC_MMCST0_TOUTRD_MASK))
{
返回 E_FAIL;
}
}
while ((status & SDMMC_MMCST0_DRRDY_MASK)=0);
//读取数据,一次一个字
对于(j=0、<wordItrCount; j++)
{
*DATA++= SDMMMC->MMCDRR;
}
}
返回 E_PASS;
}
4. 如果延迟保持不变、则 MMCST0返回0x400。 然后从 FIFO 读回数据。
问题:
为什么需要如此长的延迟? 如何确定所需的延迟周期?