static int SDHC_CMD6_SwitchFunction(uint32_t modes)
{
uint32_t xfertyp;
uint32_t status[16];
int result;
Serial.println("SDHC_CMD6_SwitchFunction");
// SDHC_IRQSTAT = 0xffff;
#if defined(__IMXRT1062__)
SDHC_MIX_CTRL |= SDHC_MIX_CTRL_DTDSEL;
#endif
SDHC_CMDARG = modes;
SDHC_BLKATTR = SDHC_BLKATTR_BLKCNT(1) | SDHC_BLKATTR_BLKSIZE(64);
xfertyp = (SDHC_XFERTYP_CMDINX(SDHC_CMD6) | SDHC_XFERTYP_CICEN |
SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(SDHC_XFERTYP_RSPTYP_48) |
SDHC_XFERTYP_DTDSEL | SDHC_XFERTYP_DPSEL);
result = SDHC_CMD_Do(xfertyp);
Serial.print("SDHC_CMD_Do result was: ");
Serial.println(result, HEX);
if(result != SDHC_RESULT_OK) return result;
result = SDHC_Read(status, 16);
Serial.print("SDHC_Read result was: ");
Serial.println(result, HEX);
// receive status
while (!(SDHC_IRQSTAT & SDHC_IRQSTAT_TC)) { } // wait for transfer to complete
SDHC_IRQSTAT = (SDHC_IRQSTAT_TC | SDHC_IRQSTAT_BRR | SDHC_IRQSTAT_AC12E);
if (result == SDHC_RESULT_OK) {
//(void)SDHC_CMDRSP0;
uint8_t* statusBytes = (uint8_t*) status;
sdCardDesc.accessMode = statusBytes[13];
sdCardDesc.cmdSystem = statusBytes[11];
sdCardDesc.drvStrength = statusBytes[9];
sdCardDesc.current = statusBytes[7];
Serial.print("SDIO Access Mode: ");
Serial.println(sdCardDesc.accessMode, HEX);
Serial.print("SDIO Command System: ");
Serial.println(sdCardDesc.cmdSystem, HEX);
Serial.print("SDIO Driver Strength: ");
Serial.println(sdCardDesc.drvStrength, HEX);
Serial.print("SDIO Current: ");
Serial.println(sdCardDesc.current, HEX);
}
return result;
}