190 #ifdef HAL_SD_MODULE_ENABLED 200 #define DATA_BLOCK_SIZE ((uint32_t)(9 << 4)) 204 #define SDMMC_STATIC_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_CTIMEOUT |\ 205 SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_RXOVERR |\ 206 SDMMC_FLAG_CMDREND | SDMMC_FLAG_CMDSENT | SDMMC_FLAG_DATAEND |\ 209 #define SDMMC_CMD0TIMEOUT ((uint32_t)0x00010000U) 214 #define SD_OCR_ADDR_OUT_OF_RANGE ((uint32_t)0x80000000U) 215 #define SD_OCR_ADDR_MISALIGNED ((uint32_t)0x40000000U) 216 #define SD_OCR_BLOCK_LEN_ERR ((uint32_t)0x20000000U) 217 #define SD_OCR_ERASE_SEQ_ERR ((uint32_t)0x10000000U) 218 #define SD_OCR_BAD_ERASE_PARAM ((uint32_t)0x08000000U) 219 #define SD_OCR_WRITE_PROT_VIOLATION ((uint32_t)0x04000000U) 220 #define SD_OCR_LOCK_UNLOCK_FAILED ((uint32_t)0x01000000U) 221 #define SD_OCR_COM_CRC_FAILED ((uint32_t)0x00800000U) 222 #define SD_OCR_ILLEGAL_CMD ((uint32_t)0x00400000U) 223 #define SD_OCR_CARD_ECC_FAILED ((uint32_t)0x00200000U) 224 #define SD_OCR_CC_ERROR ((uint32_t)0x00100000U) 225 #define SD_OCR_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00080000U) 226 #define SD_OCR_STREAM_READ_UNDERRUN ((uint32_t)0x00040000U) 227 #define SD_OCR_STREAM_WRITE_OVERRUN ((uint32_t)0x00020000U) 228 #define SD_OCR_CID_CSD_OVERWRITE ((uint32_t)0x00010000U) 229 #define SD_OCR_WP_ERASE_SKIP ((uint32_t)0x00008000U) 230 #define SD_OCR_CARD_ECC_DISABLED ((uint32_t)0x00004000U) 231 #define SD_OCR_ERASE_RESET ((uint32_t)0x00002000U) 232 #define SD_OCR_AKE_SEQ_ERROR ((uint32_t)0x00000008U) 233 #define SD_OCR_ERRORBITS ((uint32_t)0xFDFFE008U) 238 #define SD_R6_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00002000U) 239 #define SD_R6_ILLEGAL_CMD ((uint32_t)0x00004000U) 240 #define SD_R6_COM_CRC_FAILED ((uint32_t)0x00008000U) 242 #define SD_VOLTAGE_WINDOW_SD ((uint32_t)0x80100000U) 243 #define SD_HIGH_CAPACITY ((uint32_t)0x40000000U) 244 #define SD_STD_CAPACITY ((uint32_t)0x00000000U) 245 #define SD_CHECK_PATTERN ((uint32_t)0x000001AAU) 247 #define SD_MAX_VOLT_TRIAL ((uint32_t)0x0000FFFFU) 248 #define SD_ALLZERO ((uint32_t)0x00000000U) 250 #define SD_WIDE_BUS_SUPPORT ((uint32_t)0x00040000U) 251 #define SD_SINGLE_BUS_SUPPORT ((uint32_t)0x00010000U) 252 #define SD_CARD_LOCKED ((uint32_t)0x02000000U) 254 #define SD_DATATIMEOUT ((uint32_t)0xFFFFFFFFU) 255 #define SD_0TO7BITS ((uint32_t)0x000000FFU) 256 #define SD_8TO15BITS ((uint32_t)0x0000FF00U) 257 #define SD_16TO23BITS ((uint32_t)0x00FF0000U) 258 #define SD_24TO31BITS ((uint32_t)0xFF000000U) 259 #define SD_MAX_DATA_LENGTH ((uint32_t)0x01FFFFFFU) 261 #define SD_HALFFIFO ((uint32_t)0x00000008U) 262 #define SD_HALFFIFOBYTES ((uint32_t)0x00000020U) 267 #define SD_CCCC_LOCK_UNLOCK ((uint32_t)0x00000080U) 268 #define SD_CCCC_WRITE_PROT ((uint32_t)0x00000040U) 269 #define SD_CCCC_ERASE ((uint32_t)0x00000020U) 275 #define SD_SDMMC_SEND_IF_COND ((uint32_t)SD_CMD_HS_SEND_EXT_CSD) 361 errorstate = SD_PowerON(hsd);
363 if(errorstate !=
SD_OK)
369 errorstate = SD_Initialize_Cards(hsd);
371 if (errorstate !=
SD_OK)
379 if (errorstate ==
SD_OK)
382 errorstate = SD_Select_Deselect(hsd, (uint32_t)(((uint32_t)SDCardInfo->
RCA) << 16));
474 uint32_t count = 0, *tempbuff = (uint32_t *)pReadBuffer;
486 sdmmc_cmdinitstructure.
Argument = (uint32_t) BlockSize;
496 if (errorstate !=
SD_OK)
503 sdmmc_datainitstructure.
DataLength = NumberOfBlocks * BlockSize;
510 if(NumberOfBlocks > 1)
521 sdmmc_cmdinitstructure.
Argument = (uint32_t)ReadAddr;
525 if(NumberOfBlocks > 1)
530 if (errorstate !=
SD_OK)
541 for (count = 0; count < 8; count++)
555 if (errorstate !=
SD_OK)
566 for (count = 0; count < 8; count++)
650 uint32_t totalnumberofbytes = 0, bytestransferred = 0, count = 0, restwords = 0;
651 uint32_t *tempbuff = (uint32_t *)pWriteBuffer;
652 uint8_t cardstate = 0;
664 sdmmc_cmdinitstructure.
Argument = (uint32_t)BlockSize;
674 if (errorstate !=
SD_OK)
679 if(NumberOfBlocks > 1)
690 sdmmc_cmdinitstructure.
Argument = (uint32_t)WriteAddr;
694 if(NumberOfBlocks > 1)
703 if (errorstate !=
SD_OK)
709 totalnumberofbytes = NumberOfBlocks * BlockSize;
713 sdmmc_datainitstructure.
DataLength = NumberOfBlocks * BlockSize;
721 if(NumberOfBlocks > 1)
727 if ((totalnumberofbytes - bytestransferred) < 32)
729 restwords = ((totalnumberofbytes - bytestransferred) % 4 == 0) ? ((totalnumberofbytes - bytestransferred) / 4) : (( totalnumberofbytes - bytestransferred) / 4 + 1);
732 for (count = 0; count < restwords; count++)
736 bytestransferred += 4;
742 for (count = 0; count < 8; count++)
748 bytestransferred += 32;
760 if ((totalnumberofbytes - bytestransferred) < 32)
762 restwords = ((totalnumberofbytes - bytestransferred) % 4 == 0) ? ((totalnumberofbytes - bytestransferred) / 4) : (( totalnumberofbytes - bytestransferred) / 4 + 1);
765 for (count = 0; count < restwords; count++)
769 bytestransferred += 4;
775 for (count = 0; count < 8; count++)
781 bytestransferred += 32;
832 errorstate = SD_IsCardProgramming(hsd, &cardstate);
836 errorstate = SD_IsCardProgramming(hsd, &cardstate);
870 if(NumberOfBlocks > 1)
902 sdmmc_cmdinitstructure.
Argument = (uint32_t)BlockSize;
912 if (errorstate !=
SD_OK)
919 sdmmc_datainitstructure.
DataLength = BlockSize * NumberOfBlocks;
927 if(NumberOfBlocks > 1)
938 sdmmc_cmdinitstructure.
Argument = (uint32_t)ReadAddr;
942 if(NumberOfBlocks > 1)
986 if(NumberOfBlocks > 1)
1018 sdmmc_cmdinitstructure.
Argument = (uint32_t)BlockSize;
1028 if (errorstate !=
SD_OK)
1034 if(NumberOfBlocks <= 1)
1045 sdmmc_cmdinitstructure.
Argument = (uint32_t)WriteAddr;
1049 if(NumberOfBlocks > 1)
1058 if (errorstate !=
SD_OK)
1065 sdmmc_datainitstructure.
DataLength = BlockSize * NumberOfBlocks;
1089 uint32_t timeout = Timeout;
1090 uint32_t tmp1, tmp2;
1098 while (((tmp1 & tmp2) == 0) && (tmp3 ==
SD_OK) && (timeout > 0))
1120 if ((timeout == 0) && (errorstate ==
SD_OK))
1149 uint32_t timeout = Timeout;
1150 uint32_t tmp1, tmp2;
1158 while (((tmp1 & tmp2) == 0) && (tmp3 ==
SD_OK) && (timeout > 0))
1180 if ((timeout == 0) && (errorstate ==
SD_OK))
1215 __IO uint32_t maxdelay = 0;
1216 uint8_t cardstate = 0;
1219 if (((hsd->
CSD[1] >> 20) & SD_CCCC_ERASE) == 0)
1227 maxdelay = 120000 / (((hsd->
Instance->CLKCR) & 0xFF) + 2);
1248 sdmmc_cmdinitstructure.
Argument =(uint32_t)startaddr;
1258 if (errorstate !=
SD_OK)
1264 sdmmc_cmdinitstructure.
Argument = (uint32_t)endaddr;
1271 if (errorstate !=
SD_OK)
1278 sdmmc_cmdinitstructure.
Argument = 0;
1285 if (errorstate !=
SD_OK)
1290 for (; delay < maxdelay; delay++)
1295 errorstate = SD_IsCardProgramming(hsd, &cardstate);
1301 errorstate = SD_IsCardProgramming(hsd, &cardstate);
1499 pCardInfo->
RCA = (uint16_t)(hsd->
RCA);
1502 tmp = (hsd->
CSD[0] & 0xFF000000U) >> 24;
1508 tmp = (hsd->
CSD[0] & 0x00FF0000) >> 16;
1512 tmp = (hsd->
CSD[0] & 0x0000FF00) >> 8;
1516 tmp = hsd->
CSD[0] & 0x000000FF;
1520 tmp = (hsd->
CSD[1] & 0xFF000000U) >> 24;
1524 tmp = (hsd->
CSD[1] & 0x00FF0000U) >> 16;
1529 tmp = (hsd->
CSD[1] & 0x0000FF00U) >> 8;
1541 tmp = (uint8_t)(hsd->
CSD[1] & 0x000000FFU);
1545 tmp = (uint8_t)((hsd->
CSD[2] & 0xFF000000U) >> 24);
1552 tmp = (uint8_t)((hsd->
CSD[2] & 0x00FF0000U) >> 16);
1557 tmp = (uint8_t)((hsd->
CSD[2] & 0x0000FF00U) >> 8);
1568 tmp = (uint8_t)(hsd->
CSD[1] & 0x000000FFU);
1572 tmp = (uint8_t)((hsd->
CSD[2] & 0xFF000000U) >> 24);
1577 tmp = (uint8_t)((hsd->
CSD[2] & 0x00FF0000U) >> 16);
1582 tmp = (uint8_t)((hsd->
CSD[2] & 0x0000FF00U) >> 8);
1597 tmp = (uint8_t)(hsd->
CSD[2] & 0x000000FF);
1602 tmp = (uint8_t)((hsd->
CSD[3] & 0xFF000000U) >> 24);
1609 tmp = (uint8_t)((hsd->
CSD[3] & 0x00FF0000) >> 16);
1616 tmp = (uint8_t)((hsd->
CSD[3] & 0x0000FF00) >> 8);
1625 tmp = (uint8_t)(hsd->
CSD[3] & 0x000000FF);
1630 tmp = (uint8_t)((hsd->
CID[0] & 0xFF000000U) >> 24);
1634 tmp = (uint8_t)((hsd->
CID[0] & 0x00FF0000) >> 16);
1638 tmp = (uint8_t)((hsd->
CID[0] & 0x000000FF00) >> 8);
1642 tmp = (uint8_t)(hsd->
CID[0] & 0x000000FF);
1646 tmp = (uint8_t)((hsd->
CID[1] & 0xFF000000U) >> 24);
1650 tmp = (uint8_t)((hsd->
CID[1] & 0x00FF0000) >> 16);
1654 tmp = (uint8_t)((hsd->
CID[1] & 0x0000FF00) >> 8);
1658 tmp = (uint8_t)(hsd->
CID[1] & 0x000000FF);
1662 tmp = (uint8_t)((hsd->
CID[2] & 0xFF000000U) >> 24);
1666 tmp = (uint8_t)((hsd->
CID[2] & 0x00FF0000) >> 16);
1670 tmp = (uint8_t)((hsd->
CID[2] & 0x0000FF00) >> 8);
1674 tmp = (uint8_t)(hsd->
CID[2] & 0x000000FF);
1678 tmp = (uint8_t)((hsd->
CID[3] & 0xFF000000U) >> 24);
1682 tmp = (uint8_t)((hsd->
CID[3] & 0x00FF0000) >> 16);
1687 tmp = (uint8_t)((hsd->
CID[3] & 0x0000FF00) >> 8);
1691 tmp = (uint8_t)(hsd->
CID[3] & 0x000000FF);
1730 errorstate = SD_WideBus_Enable(hsd);
1734 errorstate = SD_WideBus_Disable(hsd);
1742 if (errorstate ==
SD_OK)
1769 sdmmc_cmdinitstructure.
Argument = 0;
1796 uint8_t SD_hs[64] = {0};
1797 uint32_t SD_scr[2] = {0, 0};
1798 uint32_t SD_SPEC = 0 ;
1799 uint32_t count = 0, *tempbuff = (uint32_t *)SD_hs;
1805 errorstate = SD_FindSCR(hsd, SD_scr);
1807 if (errorstate !=
SD_OK)
1813 SD_SPEC = (SD_scr[1] & 0x01000000) | (SD_scr[1] & 0x02000000);
1815 if (SD_SPEC != SD_ALLZERO)
1818 sdmmc_cmdinitstructure.
Argument = (uint32_t)64;
1828 if (errorstate !=
SD_OK)
1843 sdmmc_cmdinitstructure.
Argument = 0x80FFFF01U;
1850 if (errorstate !=
SD_OK)
1859 for (count = 0; count < 8; count++)
1910 if ((SD_hs[13]& 2) != 2)
1961 sdmmc_cmdinitstructure.
Argument = 64;
1971 if (errorstate !=
SD_OK)
1977 sdmmc_cmdinitstructure.
Argument = (uint32_t)(hsd->
RCA << 16);
1984 if (errorstate !=
SD_OK)
1999 sdmmc_cmdinitstructure.
Argument = 0;
2006 if (errorstate !=
SD_OK)
2016 for (count = 0; count < 8; count++)
2078 cardstate = SD_GetState(hsd);
2106 uint32_t sd_status[16];
2110 if (errorstate !=
SD_OK)
2116 tmp = (sd_status[0] & 0xC0) >> 6;
2120 tmp = (sd_status[0] & 0x20) >> 5;
2124 tmp = (sd_status[0] & 0x00FF0000) >> 16;
2128 tmp = (sd_status[0] & 0xFF000000) >> 24;
2132 tmp = (sd_status[1] & 0xFF);
2136 tmp = (sd_status[1] & 0xFF00) >> 8;
2140 tmp = (sd_status[1] & 0xFF0000) >> 16;
2144 tmp = (sd_status[1] & 0xFF000000) >> 24;
2148 tmp = (sd_status[2] & 0xFF);
2152 tmp = (sd_status[2] & 0xFF00) >> 8;
2156 tmp = (sd_status[2] & 0xF00000) >> 20;
2157 pCardStatus->
AU_SIZE = (uint8_t)tmp;
2160 tmp = (sd_status[2] & 0xFF000000) >> 24;
2161 pCardStatus->
ERASE_SIZE = (uint16_t)(tmp << 8);
2164 tmp = (sd_status[3] & 0xFF);
2168 tmp = (sd_status[3] & 0xFC00) >> 10;
2172 tmp = (sd_status[3] & 0x0300) >> 8;
2278 if (SD_SendStatus(hsd, &resp1) !=
SD_OK)
2298 uint16_t sd_rca = 1;
2310 sdmmc_cmdinitstructure.
Argument = 0;
2318 errorstate = SD_CmdResp2Error(hsd);
2320 if(errorstate !=
SD_OK)
2344 if(errorstate !=
SD_OK)
2356 sdmmc_cmdinitstructure.
Argument = (uint32_t)(hsd->
RCA << 16);
2362 errorstate = SD_CmdResp2Error(hsd);
2364 if(errorstate !=
SD_OK)
2392 sdmmc_cmdinitstructure.
Argument = (uint32_t)addr;
2416 uint32_t response = 0, count = 0, validvoltage = 0;
2417 uint32_t sdtype = SD_STD_CAPACITY;
2435 sdmmc_cmdinitstructure.
Argument = 0;
2443 errorstate = SD_CmdError(hsd);
2445 if(errorstate !=
SD_OK)
2457 sdmmc_cmdinitstructure.
Argument = SD_CHECK_PATTERN;
2458 sdmmc_cmdinitstructure.
CmdIndex = SD_SDMMC_SEND_IF_COND;
2463 errorstate = SD_CmdResp7Error(hsd);
2465 if (errorstate ==
SD_OK)
2469 sdtype = SD_HIGH_CAPACITY;
2473 sdmmc_cmdinitstructure.
Argument = 0;
2483 if(errorstate ==
SD_OK)
2487 while((!validvoltage) && (count < SD_MAX_VOLT_TRIAL))
2491 sdmmc_cmdinitstructure.
Argument = 0;
2501 if(errorstate !=
SD_OK)
2507 sdmmc_cmdinitstructure.
Argument = SD_VOLTAGE_WINDOW_SD | sdtype;
2515 errorstate = SD_CmdResp3Error(hsd);
2517 if(errorstate !=
SD_OK)
2526 validvoltage = (((response >> 31) == 1) ? 1 : 0);
2531 if(count >= SD_MAX_VOLT_TRIAL)
2538 if((response & SD_HIGH_CAPACITY) == SD_HIGH_CAPACITY)
2575 if(pCardStatus ==
NULL)
2583 sdmmc_cmdinitstructure.
Argument = (uint32_t)(hsd->
RCA << 16);
2593 if(errorstate !=
SD_OK)
2612 uint32_t timeout, tmp;
2614 timeout = SDMMC_CMD0TIMEOUT;
2618 while((timeout > 0) && (!tmp))
2644 uint32_t timeout = SDMMC_CMD0TIMEOUT, tmp;
2648 while((!tmp) && (timeout > 0))
2656 if((timeout == 0) || tmp)
2688 uint32_t response_r1;
2725 if((response_r1 & SD_OCR_ERRORBITS) == SD_ALLZERO)
2730 if((response_r1 & SD_OCR_ADDR_OUT_OF_RANGE) == SD_OCR_ADDR_OUT_OF_RANGE)
2735 if((response_r1 & SD_OCR_ADDR_MISALIGNED) == SD_OCR_ADDR_MISALIGNED)
2740 if((response_r1 & SD_OCR_BLOCK_LEN_ERR) == SD_OCR_BLOCK_LEN_ERR)
2745 if((response_r1 & SD_OCR_ERASE_SEQ_ERR) == SD_OCR_ERASE_SEQ_ERR)
2750 if((response_r1 & SD_OCR_BAD_ERASE_PARAM) == SD_OCR_BAD_ERASE_PARAM)
2755 if((response_r1 & SD_OCR_WRITE_PROT_VIOLATION) == SD_OCR_WRITE_PROT_VIOLATION)
2760 if((response_r1 & SD_OCR_LOCK_UNLOCK_FAILED) == SD_OCR_LOCK_UNLOCK_FAILED)
2765 if((response_r1 & SD_OCR_COM_CRC_FAILED) == SD_OCR_COM_CRC_FAILED)
2770 if((response_r1 & SD_OCR_ILLEGAL_CMD) == SD_OCR_ILLEGAL_CMD)
2775 if((response_r1 & SD_OCR_CARD_ECC_FAILED) == SD_OCR_CARD_ECC_FAILED)
2780 if((response_r1 & SD_OCR_CC_ERROR) == SD_OCR_CC_ERROR)
2785 if((response_r1 & SD_OCR_GENERAL_UNKNOWN_ERROR) == SD_OCR_GENERAL_UNKNOWN_ERROR)
2790 if((response_r1 & SD_OCR_STREAM_READ_UNDERRUN) == SD_OCR_STREAM_READ_UNDERRUN)
2795 if((response_r1 & SD_OCR_STREAM_WRITE_OVERRUN) == SD_OCR_STREAM_WRITE_OVERRUN)
2800 if((response_r1 & SD_OCR_CID_CSD_OVERWRITE) == SD_OCR_CID_CSD_OVERWRITE)
2805 if((response_r1 & SD_OCR_WP_ERASE_SKIP) == SD_OCR_WP_ERASE_SKIP)
2810 if((response_r1 & SD_OCR_CARD_ECC_DISABLED) == SD_OCR_CARD_ECC_DISABLED)
2815 if((response_r1 & SD_OCR_ERASE_RESET) == SD_OCR_ERASE_RESET)
2820 if((response_r1 & SD_OCR_AKE_SEQ_ERROR) == SD_OCR_AKE_SEQ_ERROR)
2907 uint32_t response_r1;
2948 if((response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED)) == SD_ALLZERO)
2950 *pRCA = (uint16_t) (response_r1 >> 16);
2955 if((response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR) == SD_R6_GENERAL_UNKNOWN_ERROR)
2960 if((response_r1 & SD_R6_ILLEGAL_CMD) == SD_R6_ILLEGAL_CMD)
2965 if((response_r1 & SD_R6_COM_CRC_FAILED) == SD_R6_COM_CRC_FAILED)
2983 uint32_t scr[2] = {0, 0};
2993 errorstate = SD_FindSCR(hsd, scr);
2995 if(errorstate !=
SD_OK)
3001 if((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO)
3004 sdmmc_cmdinitstructure.
Argument = (uint32_t)(hsd->
RCA << 16);
3014 if(errorstate !=
SD_OK)
3020 sdmmc_cmdinitstructure.
Argument = 2;
3027 if(errorstate !=
SD_OK)
3052 uint32_t scr[2] = {0, 0};
3062 errorstate = SD_FindSCR(hsd, scr);
3064 if(errorstate !=
SD_OK)
3070 if((scr[1] & SD_SINGLE_BUS_SUPPORT) != SD_ALLZERO)
3073 sdmmc_cmdinitstructure.
Argument = (uint32_t)(hsd->
RCA << 16);
3083 if(errorstate !=
SD_OK)
3089 sdmmc_cmdinitstructure.
Argument = 0;
3096 if(errorstate !=
SD_OK)
3124 uint32_t tempscr[2] = {0, 0};
3128 sdmmc_cmdinitstructure.
Argument = (uint32_t)8;
3138 if(errorstate !=
SD_OK)
3144 sdmmc_cmdinitstructure.
Argument = (uint32_t)((hsd->
RCA) << 16);
3151 if(errorstate !=
SD_OK)
3164 sdmmc_cmdinitstructure.
Argument = 0;
3171 if(errorstate !=
SD_OK)
3217 *(pSCR + 1) = ((tempscr[0] & SD_0TO7BITS) << 24) | ((tempscr[0] & SD_8TO15BITS) << 8) |\
3218 ((tempscr[0] & SD_16TO23BITS) >> 8) | ((tempscr[0] & SD_24TO31BITS) >> 24);
3220 *(pSCR) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) |\
3221 ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24);
3236 __IO uint32_t responseR1 = 0;
3238 sdmmc_cmdinitstructure.
Argument = (uint32_t)(hsd->
RCA << 16);
3286 *pStatus = (uint8_t)((responseR1 >> 9) & 0x0000000F);
3288 if((responseR1 & SD_OCR_ERRORBITS) == SD_ALLZERO)
3293 if((responseR1 & SD_OCR_ADDR_OUT_OF_RANGE) == SD_OCR_ADDR_OUT_OF_RANGE)
3298 if((responseR1 & SD_OCR_ADDR_MISALIGNED) == SD_OCR_ADDR_MISALIGNED)
3303 if((responseR1 & SD_OCR_BLOCK_LEN_ERR) == SD_OCR_BLOCK_LEN_ERR)
3308 if((responseR1 & SD_OCR_ERASE_SEQ_ERR) == SD_OCR_ERASE_SEQ_ERR)
3313 if((responseR1 & SD_OCR_BAD_ERASE_PARAM) == SD_OCR_BAD_ERASE_PARAM)
3318 if((responseR1 & SD_OCR_WRITE_PROT_VIOLATION) == SD_OCR_WRITE_PROT_VIOLATION)
3323 if((responseR1 & SD_OCR_LOCK_UNLOCK_FAILED) == SD_OCR_LOCK_UNLOCK_FAILED)
3328 if((responseR1 & SD_OCR_COM_CRC_FAILED) == SD_OCR_COM_CRC_FAILED)
3333 if((responseR1 & SD_OCR_ILLEGAL_CMD) == SD_OCR_ILLEGAL_CMD)
3338 if((responseR1 & SD_OCR_CARD_ECC_FAILED) == SD_OCR_CARD_ECC_FAILED)
3343 if((responseR1 & SD_OCR_CC_ERROR) == SD_OCR_CC_ERROR)
3348 if((responseR1 & SD_OCR_GENERAL_UNKNOWN_ERROR) == SD_OCR_GENERAL_UNKNOWN_ERROR)
3353 if((responseR1 & SD_OCR_STREAM_READ_UNDERRUN) == SD_OCR_STREAM_READ_UNDERRUN)
3358 if((responseR1 & SD_OCR_STREAM_WRITE_OVERRUN) == SD_OCR_STREAM_WRITE_OVERRUN)
3363 if((responseR1 & SD_OCR_CID_CSD_OVERWRITE) == SD_OCR_CID_CSD_OVERWRITE)
3368 if((responseR1 & SD_OCR_WP_ERASE_SKIP) == SD_OCR_WP_ERASE_SKIP)
3373 if((responseR1 & SD_OCR_CARD_ECC_DISABLED) == SD_OCR_CARD_ECC_DISABLED)
3378 if((responseR1 & SD_OCR_ERASE_RESET) == SD_OCR_ERASE_RESET)
3383 if((responseR1 & SD_OCR_AKE_SEQ_ERROR) == SD_OCR_AKE_SEQ_ERROR)
__IO uint8_t PERFORMANCE_MOVE
__IO uint8_t MaxRdCurrentVDDMax
#define SECURE_DIGITAL_IO_CARD
HAL_StatusTypeDef SDMMC_DataConfig(SDMMC_TypeDef *SDMMCx, SDMMC_DataInitTypeDef *Data)
__IO uint32_t SdOperation
#define __HAL_SD_SDMMC_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the SD device interrupt.
#define SDMMC_FLAG_CCRCFAIL
__IO uint8_t MaxWrCurrentVDDMin
__IO uint8_t ERASE_TIMEOUT
__IO uint32_t SdTransferCplt
#define SECURE_DIGITAL_IO_COMBO_CARD
#define SDMMC_IT_TXFIFOHE
#define SDMMC_DPSM_ENABLE
__IO uint32_t SIZE_OF_PROTECTED_AREA
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
#define SDMMC_CLOCK_POWER_SAVE_DISABLE
__IO uint32_t DmaTransferCplt
__IO uint8_t MaxBusClkFrec
#define SDMMC_RESPONSE_NO
HAL_SD_ErrorTypedef HAL_SD_WideBusOperation_Config(SD_HandleTypeDef *hsd, uint32_t WideMode)
void HAL_Delay(__IO uint32_t Delay)
This function provides accurate delay (in milliseconds) based on variable incremented.
__IO uint8_t WrBlockMisalign
SDMMC Configuration Structure definition.
#define SDMMC_FLAG_DTIMEOUT
#define SD_CMD_STOP_TRANSMISSION
#define SDMMC_BUS_WIDE_4B
#define SD_CMD_SET_BLOCKLEN
__IO uint8_t MaxRdCurrentVDDMin
HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Timeout)
__IO uint8_t MaxWrCurrentVDDMax
SD specific error defines.
__IO uint8_t WriteBlockPaPartial
#define SDMMC_BUS_WIDE_8B
void HAL_SD_XferErrorCallback(SD_HandleTypeDef *hsd)
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
#define SD_CMD_READ_MULT_BLOCK
__IO uint8_t FileFormatGrouop
HAL_SD_ErrorTypedef HAL_SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
__IO uint8_t WrProtectGrEnable
#define SD_CMD_SD_APP_OP_COND
HAL_StatusTypeDef SDMMC_SendCommand(SDMMC_TypeDef *SDMMCx, SDMMC_CmdInitTypeDef *Command)
#define HIGH_CAPACITY_SD_CARD
HAL_StatusTypeDef SDMMC_WriteFIFO(SDMMC_TypeDef *SDMMCx, uint32_t *pWriteData)
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
#define SDMMC_INIT_CLK_DIV
#define SD_CMD_SD_APP_STATUS
HAL_SD_ErrorTypedef HAL_SD_Init(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *SDCardInfo)
HAL_SD_ErrorTypedef HAL_SD_Get_CardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *pCardInfo)
__IO uint8_t ContentProtectAppli
void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd)
void HAL_SD_DMA_TxCpltCallback(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef SDMMC_PowerState_OFF(SDMMC_TypeDef *SDMMCx)
__IO uint8_t MaxWrBlockLen
__IO uint8_t SECURED_MODE
#define SDMMC_FLAG_CMDREND
#define SD_CMD_SD_APP_SEND_SCR
#define SD_CMD_SD_ERASE_GRP_START
#define SDMMC_FLAG_RXOVERR
HAL_SD_TransferStateTypedef
#define SDMMC_FLAG_DCRCFAIL
HAL_SD_TransferStateTypedef HAL_SD_GetStatus(SD_HandleTypeDef *hsd)
#define SDMMC_IT_TXUNDERR
__IO uint32_t SdTransferErr
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
uint8_t SDMMC_GetCommandResponse(SDMMC_TypeDef *SDMMCx)
#define SDMMC_FLAG_RXDAVL
#define SDMMC_FLAG_TXUNDERR
#define SD_CMD_GO_IDLE_STATE
SD Commands Index.
void HAL_SD_DMA_TxErrorCallback(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef SDMMC_Init(SDMMC_TypeDef *SDMMCx, SDMMC_InitTypeDef Init)
#define SD_CMD_ALL_SEND_CID
#define SD_CMD_APP_SD_SET_BUSWIDTH
Following commands are SD Card Specific commands. SDMMC_APP_CMD should be sent before sending these c...
uint32_t WaitForInterrupt
__IO uint8_t WrProtectGrSize
HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd)
#define __HAL_SD_SDMMC_ENABLE(__HANDLE__)
Enable the SD device.
__IO uint8_t DeviceSizeMul
#define SDMMC_DATABLOCK_SIZE_512B
#define SDMMC_FLAG_CMDSENT
__IO uint8_t TempWrProtect
uint32_t SDMMC_GetPowerState(SDMMC_TypeDef *SDMMCx)
#define SDMMC_FLAG_RXFIFOHF
#define __HAL_SD_SDMMC_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the SD's pending flags.
HAL_SD_ErrorTypedef HAL_SD_HighSpeed(SD_HandleTypeDef *hsd)
uint32_t HardwareFlowControl
This file contains all the functions prototypes for the HAL module driver.
HAL_SD_ErrorTypedef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint64_t startaddr, uint64_t endaddr)
#define SDMMC_IT_RXFIFOHF
uint32_t SDMMC_GetResponse(SDMMC_TypeDef *SDMMCx, uint32_t Response)
HAL_SD_ErrorTypedef HAL_SD_CheckWriteOperation(SD_HandleTypeDef *hsd, uint32_t Timeout)
void HAL_SD_DMA_RxErrorCallback(DMA_HandleTypeDef *hdma)
#define __HAL_SD_SDMMC_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the SD device interrupt.
#define __HAL_SD_SDMMC_GET_FLAG(__HANDLE__, __FLAG__)
Check whether the specified SD flag is set or not.
__IO uint8_t PermWrProtect
__IO uint16_t OEM_AppliID
#define __HAL_SD_SDMMC_DISABLE(__HANDLE__)
Disable the SD device.
#define SDMMC_RESPONSE_SHORT
#define SD_CMD_SEND_STATUS
DMA_HandleTypeDef * hdmatx
#define SDMMC_RESPONSE_LONG
#define STD_CAPACITY_SD_CARD_V1_1
Supported SD Memory Cards.
#define SDMMC_FLAG_CTIMEOUT
#define SDMMC_HARDWARE_FLOW_CONTROL_DISABLE
__IO uint8_t SysSpecVersion
__IO uint16_t CardComdClasses
#define SDMMC_FLAG_DBCKEND
void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
#define SDMMC_CPSM_ENABLE
void HAL_SD_DMA_RxCpltCallback(DMA_HandleTypeDef *hdma)
#define SDMMC_DATABLOCK_SIZE_8B
#define SDMMC_FLAG_DATAEND
__IO uint8_t RdBlockMisalign
#define SDMMC_DATABLOCK_SIZE_64B
HAL_SD_ErrorTypedef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypedef *pCardStatus)
uint32_t SDMMC_ReadFIFO(SDMMC_TypeDef *SDMMCx)
HAL_SD_ErrorTypedef HAL_SD_StopTransfer(SD_HandleTypeDef *hsd)
#define SDMMC_TRANSFER_DIR_TO_SDMMC
__IO uint8_t ManufacturerID
DMA handle Structure definition.
#define __HAL_SD_SDMMC_DMA_ENABLE(__HANDLE__)
Enable the SDMMC DMA transfer.
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
#define SDMMC_TRANSFER_DIR_TO_CARD
HAL_StatusTypeDef SDMMC_PowerState_ON(SDMMC_TypeDef *SDMMCx)
#define SDMMC_BUS_WIDE_1B
#define SD_CMD_WRITE_SINGLE_BLOCK
#define STD_CAPACITY_SD_CARD_V2_0
#define SDMMC_FLAG_TXFIFOHE
#define SDMMC_IT_DCRCFAIL
#define SD_CMD_READ_SINGLE_BLOCK
__IO uint8_t DAT_BUS_WIDTH
#define SDMMC_TRANSFER_MODE_BLOCK
SDMMC Command Control structure.
#define SDMMC_CLOCK_EDGE_RISING
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
__IO uint16_t SD_CARD_TYPE
#define SD_CMD_WRITE_MULT_BLOCK
__IO uint8_t PartBlockRead
HAL_StatusTypeDef
HAL Status structures definition.
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
#define SD_CMD_SD_ERASE_GRP_END
__IO uint8_t ERASE_OFFSET
#define SD_CMD_SEL_DESEL_CARD
DMA_HandleTypeDef * hdmarx
#define SDMMC_IT_DTIMEOUT
#define SDMMC_CLOCK_BYPASS_DISABLE
__IO uint16_t ManufactDate
SDMMC Data Control structure.
void HAL_SD_XferCpltCallback(SD_HandleTypeDef *hsd)
void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd)
#define SD_CMD_SET_REL_ADDR