|
static uint32_t SD_PowerON(SD_HandleTypeDef *hsd)
{
__IO uint32_t count = 0;
uint32_t response = 0, validvoltage = 0;
uint32_t errorstate = HAL_SD_ERROR_NONE;
/* CMD0: GO_IDLE_STATE */
errorstate = SDMMC_CmdGoIdleState(hsd->Instance);
if(errorstate != HAL_SD_ERROR_NONE)
{
return errorstate;
}
/* CMD8: SEND_IF_COND: Command available only on V2.0 cards */
errorstate = SDMMC_CmdOperCond(hsd->Instance);
if(errorstate != HAL_SD_ERROR_NONE)
{
hsd->SdCard.CardVersion = CARD_V1_X;
errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); // 这是什么操作
errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0);
/* Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */
while(validvoltage == 0)
{
if(count++ == SDMMC_MAX_VOLT_TRIAL)
{
return HAL_SD_ERROR_INVALID_VOLTRANGE;
}
。。。
这是初始化SD卡的时候,SD_PowerON 函数,是ST的库文件, errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); 没有后填上的这句,命令就超时。
|
|