00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 #ifndef _SDMMC_H
00090 #define _SDMMC_H
00091
00092
00093
00094
00095
00096
00097
00098
00099 #include <stdint.h>
00100 #include "sdmmc_hal.h"
00101 #include "sdio.h"
00102
00103
00104
00105
00106
00107
00108 #define SD_BLOCK_SIZE 512
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 #define SD_BITS32(pDw, nbits, ibit, bits) \
00119 ( (((uint32_t*)(pDw))[(nbits)/32-(ibit)/32-1] >> ((ibit)%32)) & ((uint32_t)(1ul << (bits)) - 1 ) )
00120
00121 #define SD_BITS8(pB, nbits, ibit, bits) \
00122 ( (((uint8_t*)(pB))[(nbits)/8-(ibit)/8-1] >> ((ibit)%8)) & ((1 << (bits)) - 1) )
00123
00124 #define SD_U8(pD, nBytes, iByte) ( ((uint8_t*)(pD))[(iByte)] )
00125
00126 #define SD_U16(pD, nBytes, iByte) \
00127 ( (((uint8_t*)(pD))[(iByte)] << 0) +\
00128 (((uint8_t*)(pD))[(iByte) + 1] << 8) )
00129
00130 #define SD_U32(pD, nBytes, iByte) \
00131 ( (((uint8_t*)(pD))[(iByte) ] << 0) +\
00132 (((uint8_t*)(pD))[(iByte) + 1] << 8) +\
00133 (((uint8_t*)(pD))[(iByte) + 2] << 16) +\
00134 (((uint8_t*)(pD))[(iByte) + 3] << 24) )
00135
00136
00137
00138
00139
00140 #define SD_OCR_VDD_LOW (1ul << 7)
00141 #define MMC_OCR_VDD_170_195 (1ul << 7)
00142 #define MMC_OCR_VDD_200_260 (0x3Ful << 8)
00143 #define SD_OCR_VDD_20_21 (1ul << 8)
00144 #define SD_OCR_VDD_21_22 (1ul << 9)
00145 #define SD_OCR_VDD_22_23 (1ul << 10)
00146 #define SD_OCR_VDD_23_24 (1ul << 11)
00147 #define SD_OCR_VDD_24_25 (1ul << 12)
00148 #define SD_OCR_VDD_25_26 (1ul << 13)
00149 #define SD_OCR_VDD_26_27 (1ul << 14)
00150 #define SD_OCR_VDD_27_28 (1ul << 15)
00151 #define SD_OCR_VDD_28_29 (1ul << 16)
00152 #define SD_OCR_VDD_29_30 (1ul << 17)
00153 #define SD_OCR_VDD_30_31 (1ul << 18)
00154 #define SD_OCR_VDD_31_32 (1ul << 19)
00155 #define SD_OCR_VDD_32_33 (1ul << 20)
00156 #define SD_OCR_VDD_33_34 (1ul << 21)
00157 #define SD_OCR_VDD_34_35 (1ul << 22)
00158 #define SD_OCR_VDD_35_36 (1ul << 23)
00159
00160 #define SDIO_OCR_MP (0x1ul << 27)
00161 #define SDIO_OCR_NF (0x3ul << 28)
00162 #define MMC_OCR_ACCESS_MODE (0x3ul << 29)
00163 #define MMC_OCR_ACCESS_BYTE (0x0 << 29)
00164 #define MMC_OCR_ACCESS_SECTOR (0x2 << 29)
00165 #define SD_OCR_CCS (1ul << 30)
00166 #define SD_OCR_BUSY (1ul << 31)
00167
00168
00169 #define SD_HOST_VOLTAGE_RANGE (SD_OCR_VDD_27_28 +\
00170 SD_OCR_VDD_28_29 +\
00171 SD_OCR_VDD_29_30 +\
00172 SD_OCR_VDD_30_31 +\
00173 SD_OCR_VDD_31_32 +\
00174 SD_OCR_VDD_32_33 +\
00175 SD_OCR_VDD_33_34 +\
00176 SD_OCR_VDD_34_35 +\
00177 SD_OCR_VDD_35_36 )
00178
00179
00180
00181
00182
00183
00184 #define SD_CID(pCid, field, bits) SD_BITS32(pCid, 128, field, bits)
00185 #define SD_CID_MID(pCid) SD_CID(pCid, 120, 8)
00186 #define eMMC_CID_CBX(pCid) SD_CID(pCid, 112, 2)
00187 #define SD_CID_OID1(pCid) SD_CID(pCid, 112, 8)
00188 #define SD_CID_OID0(pCid) SD_CID(pCid, 104, 8)
00189 #define eMMC_CID_OID(pCid) SD_CID(pCid, 104, 8)
00190 #define SD_CID_PNM4(pCid) SD_CID(pCid, 96, 8)
00191 #define SD_CID_PNM3(pCid) SD_CID(pCid, 88, 8)
00192 #define SD_CID_PNM2(pCid) SD_CID(pCid, 80, 8)
00193 #define SD_CID_PNM1(pCid) SD_CID(pCid, 72, 8)
00194 #define SD_CID_PNM0(pCid) SD_CID(pCid, 64, 8)
00195 #define MMC_CID_PNM5(pCid) SD_CID(pCid, 96, 8)
00196 #define MMC_CID_PNM4(pCid) SD_CID(pCid, 88, 8)
00197 #define MMC_CID_PNM3(pCid) SD_CID(pCid, 80, 8)
00198 #define MMC_CID_PNM2(pCid) SD_CID(pCid, 72, 8)
00199 #define MMC_CID_PNM1(pCid) SD_CID(pCid, 64, 8)
00200 #define MMC_CID_PNM0(pCid) SD_CID(pCid, 56, 8)
00201
00202 #define SD_CID_PRV(pCid) SD_CID(pCid, 56, 8)
00203 #define MMC_CID_PRV(pCid) SD_CID(pCid, 48, 8)
00204
00205 #define SD_CID_PSN3(pCid) SD_CID(pCid, 48, 8)
00206 #define SD_CID_PSN2(pCid) SD_CID(pCid, 40, 8)
00207 #define SD_CID_PSN1(pCid) SD_CID(pCid, 32, 8)
00208 #define SD_CID_PSN0(pCid) SD_CID(pCid, 24, 8)
00209 #define MMC_CID_PSN3(pCid) SD_CID(pCid, 40, 8)
00210 #define MMC_CID_PSN2(pCid) SD_CID(pCid, 32, 8)
00211 #define MMC_CID_PSN1(pCid) SD_CID(pCid, 24, 8)
00212 #define MMC_CID_PSN0(pCid) SD_CID(pCid, 16, 8)
00213
00214 #define SD_CID_MDT_Y(pCid) SD_CID(pCid, 12, 8)
00215 #define MMC_CID_MDT_Y(pCid) SD_CID(pCid, 12, 4)
00216 #define SD_CID_MDT_M(pCid) SD_CID(pCid, 8, 4)
00217 #define SD_CID_CRC(pCid) SD_CID(pCid, 1, 7)
00218
00219
00220
00221
00222
00223
00224 #define SD_CSD(pCsd, field, bits) SD_BITS32(pCsd, 128, field, bits)
00225 #define SD_CSD_STRUCTURE(pCsd) SD_CSD(pCsd, 126, 2)
00226 #define SD_CSD_STRUCTURE_1_0 0
00227 #define SD_CSD_STRUCTURE_2_0 1
00228 #define MMC_CSD_STRUCTURE_1_0 0
00229 #define MMC_CSD_STRUCTURE_1_1 1
00230 #define MMC_CSD_STRUCTURE_1_2 2
00231 #define MMC_CSD_SPEC_VERS(pCsd) SD_CSD(pCsd, 122, 4)
00232 #define MMC_CSD_SPEC_VERS_1_0 0
00233 #define MMC_CSD_SPEC_VERS_1_4 1
00234 #define MMC_CSD_SPEC_VERS_2_0 2
00235 #define MMC_CSD_SPEC_VERS_3_1 3
00236 #define MMC_CSD_SPEC_VERS_4_0 4
00237 #define SD_CSD_TAAC(pCsd) SD_CSD(pCsd, 112, 8)
00238 #define SD_CSD_NSAC(pCsd) SD_CSD(pCsd, 104, 8)
00239 #define SD_CSD_TRAN_SPEED(pCsd) SD_CSD(pCsd, 96, 8)
00240 #define SD_CSD_CCC(pCsd) SD_CSD(pCsd, 84, 12)
00241 #define SD_CSD_READ_BL_LEN(pCsd) SD_CSD(pCsd, 80, 4)
00242 #define SD_CSD_READ_BL_PARTIAL(pCsd) SD_CSD(pCsd, 79, 1)
00243 #define SD_CSD_WRITE_BLK_MISALIGN(pCsd) SD_CSD(pCsd, 78, 1)
00244 #define SD_CSD_READ_BLK_MISALIGN(pCsd) SD_CSD(pCsd, 77, 1)
00245 #define SD_CSD_DSR_IMP(pCsd) SD_CSD(pCsd, 76, 1)
00246 #define SD_CSD_C_SIZE(pCsd) ((SD_CSD(pCsd, 72, 2) << 10) + \
00247 (SD_CSD(pCsd, 64, 8) << 2) + \
00248 SD_CSD(pCsd, 62, 2))
00249 #define SD2_CSD_C_SIZE(pCsd) ((SD_CSD(pCsd, 64, 6) << 16) + \
00250 (SD_CSD(pCsd, 56, 8) << 8) + \
00251 SD_CSD(pCsd, 48, 8))
00252 #define SD_CSD_VDD_R_CURR_MIN(pCsd) SD_CSD(pCsd, 59, 3)
00253 #define SD_CSD_VDD_R_CURR_MAX(pCsd) SD_CSD(pCsd, 56, 3)
00254 #define SD_CSD_VDD_W_CURR_MIN(pCsd) SD_CSD(pCsd, 53, 3)
00255 #define SD_CSD_VDD_W_CURR_MAX(pCsd) SD_CSD(pCsd, 50, 3)
00256 #define SD_CSD_C_SIZE_MULT(pCsd) SD_CSD(pCsd, 47, 3)
00257 #define SD_CSD_ERASE_BLK_EN(pCsd) SD_CSD(pCsd, 46, 1)
00258 #define MMC_CSD_ERASE_BLK_EN(pCsd) SD_CSD(pCsd, 46, 1)
00259 #define MMC_CSD_ERASE_GRP_SIZE(pCsd) SD_CSD(pCsd, 42, 4)
00260 #define SD_CSD_ERASE_GRP_MULT(pCsd) SD_CSD(pCsd, 37, 4)
00261 #define SD_CSD_SECTOR_SIZE(pCsd) ((SD_CSD(pCsd, 40, 6) << 1) \
00262 + SD_CSD(pCsd, 39, 1))
00263 #define SD_CSD_WP_GRP_SIZE(pCsd) SD_CSD(pCsd, 32, 7)
00264 #define SD_CSD_WP_GRP_ENABLE(pCsd) SD_CSD(pCsd, 31, 1)
00265 #define SD_CSD_R2W_FACTOR(pCsd) SD_CSD(pCsd, 26, 3)
00266 #define SD_CSD_WRITE_BL_LEN(pCsd) ((SD_CSD(pCsd, 24, 2) << 2) \
00267 + SD_CSD(pCsd, 22, 2))
00268 #define SD_CSD_WRITE_BL_PARTIAL(pCsd) SD_CSD(pCsd, 21, 1)
00269 #define SD_CSD_CONTENT_PROT_APP(pCsd) SD_CSD(pCsd, 16, 1)
00270 #define SD_CSD_FILE_FORMAT_GRP(pCsd) SD_CSD(pCsd, 15, 1)
00271 #define SD_CSD_COPY(pCsd) SD_CSD(pCsd, 14, 1)
00272 #define SD_CSD_PERM_WRITE_PROTECT(pCsd) SD_CSD(pCsd, 13, 1)
00273 #define SD_CSD_TMP_WRITE_PROTECT(pCsd) SD_CSD(pCsd, 12, 1)
00274 #define SD_CSD_FILE_FORMAT(pCsd) SD_CSD(pCsd, 10, 2)
00275 #define MMC_CSD_ECC(pCsd) SD_CSD(pCsd, 8, 2)
00276 #define MMC_CSD_ECC_NONE 0
00277 #define MMC_CSD_ECC_BCH 1
00278 #define SD_CSD_CRC(pCsd) SD_CSD(pCsd, 1, 7)
00279
00280 #define SD_CSD_MULT(pCsd) (1 << (SD_CSD_C_SIZE_MULT(pCsd) + 2))
00281 #define SD_CSD_BLOCKNR(pCsd) ((SD_CSD_C_SIZE(pCsd) + 1) * SD_CSD_MULT(pCsd))
00282 #define SD_CSD_BLOCKNR_HC(pCsd) ((SD2_CSD_C_SIZE(pCsd) + 1) * 1024)
00283 #define SD_CSD_BLOCK_LEN(pCsd) (1 << SD_CSD_READ_BL_LEN(pCsd))
00284 #define SD_CSD_TOTAL_SIZE(pCsd) (SD_CSD_BLOCKNR(pCsd) * SD_CSD_BLOCK_LEN(pCsd))
00285 #define SD_CSD_TOTAL_SIZE_HC(pCsd) ((SD2_CSD_C_SIZE(pCsd) + 1) * 512* 1024)
00286
00287
00288
00289
00290
00291
00292 #define SD_SCR(pScr, field, bits) SD_BITS32(pScr, 64, field, bits)
00293 #define SD_SCR_STRUCTURE(pScr) SD_SCR(pScr, 60, 4)
00294 #define SD_SCR_STRUCTURE_1_0 0
00295 #define SD_SCR_SD_SPEC(pScr) SD_SCR(pScr, 56, 4)
00296 #define SD_SCR_SD_SPEC_1_0 0
00297 #define SD_SCR_SD_SPEC_1_10 1
00298 #define SD_SCR_SD_SPEC_2_00 2
00299 #define SD_SCR_DATA_STAT_AFTER_ERASE(pScr) SD_SCR(pScr, 55, 1)
00300 #define SD_SCR_SD_SECURITY(pScr) SD_SCR(pScr, 52, 3)
00301 #define SD_SCR_SD_SECURITY_NO 0
00302 #define SD_SCR_SD_SECURITY_NOTUSED 1
00303 #define SD_SCR_SD_SECURITY_1_01 2
00304 #define SD_SCR_SD_SECURITY_2_00 3
00305 #define SD_SCR_SD_BUS_WIDTHS(pScr) SD_SCR(pScr, 48, 4)
00306 #define SD_SCR_SD_BUS_WIDTH_1BITS (1 << 0)
00307 #define SD_SCR_SD_BUS_WIDTH_4BITS (1 << 2)
00308
00309
00310
00311
00312
00313
00314 #define SD_CST_OUT_OF_RANGE (1UL << 31)
00315 #define SD_CST_ADDRESS_ERROR (1UL << 30)
00316 #define SD_CST_BLOCK_LEN_ERROR (1UL << 29)
00317 #define SD_CST_ERASE_SEQ_ERROR (1UL << 28)
00318 #define SD_CST_ERASE_PARAM (1UL << 27)
00319 #define SD_CST_WP_VIOLATION (1UL << 26)
00320 #define SD_CST_CARD_IS_LOCKED (1UL << 25)
00321 #define SD_CST_LOCK_UNLOCK_FAILED (1UL << 24)
00322 #define SD_CST_COM_CRC_ERROR (1UL << 23)
00323 #define SD_CST_ILLEGAL_COMMAND (1UL << 22)
00324 #define SD_CST_CARD_ECC_FAILED (1UL << 21)
00325 #define SD_CST_CC_ERROR (1UL << 20)
00326 #define SD_CST_ERROR (1UL << 19)
00327 #define MMC_CST_UNDERRUN (1UL << 18)
00328 #define MMC_CST_OVERRUN (1UL << 17)
00329 #define SD_CST_CSD_OVERWRITE (1UL << 16)
00330 #define SD_CST_WP_ERASE_SKIP (1UL << 15)
00331 #define SD_CST_ECC_DISABLED (1UL << 14)
00332 #define SD_CST_ERASE_RESET (1UL << 13)
00333 #define SD_CST_CURRENT_STATE (0xFUL << 9)
00334 #define SD_STATE_IDLE 0
00335 #define SD_STATE_READY 1
00336 #define SD_STATE_IDENT 2
00337 #define SD_STATE_STBY 3
00338 #define SD_STATE_TRAN 4
00339 #define SD_STATE_DATA 5
00340 #define SD_STATE_RCV 6
00341 #define SD_STATE_PRG 7
00342 #define SD_STATE_DIS 8
00343 #define MMC_STATE_BTST 9
00344 #define MMC_STATE_SLP 10
00345 #define SD_CST_STATE_IDLE (0x0UL << 9)
00346 #define SD_CST_STATE_READY (0x1UL << 9)
00347 #define SD_CST_STATE_IDENT (0x2UL << 9)
00348 #define SD_CST_STATE_STBY (0x3UL << 9)
00349 #define SD_CST_STATE_TRAN (0x4UL << 9)
00350 #define SD_CST_STATE_DATA (0x5UL << 9)
00351 #define SD_CST_STATE_RCV (0x6UL << 9)
00352 #define SD_CST_STATE_PRG (0x7UL << 9)
00353 #define SD_CST_STATE_DIS (0x8UL << 9)
00354 #define SD_CST_STATE_BTST (0x9UL << 9)
00355 #define SD_CST_STATE_SLP (0xAUL << 9)
00356 #define SD_CST_READY_FOR_DATA (1UL << 8)
00357 #define MMC_CST_SWITCH_ERROR (1UL << 7)
00358 #define SD_CST_APP_CMD (1UL << 5)
00359 #define SD_CST_AKE_SEQ_ERROR (1UL << 3)
00360
00361
00362
00363
00364
00365
00366 #define SD_ST(pSt, field, bits) SD_BITS32(pSt, 512, field, bits)
00367 #define SD_ST_DAT_BUS_WIDTH(pSt) SD_ST(pSt, 510, 2)
00368 #define SD_ST_DATA_BUS_WIDTH_1BIT 0x0
00369 #define SD_ST_DATA_BUS_WIDTH_4BIT 0x2
00370 #define SD_ST_SECURED_MODE(pSt) SD_ST(pSt, 509, 1)
00371 #define SD_ST_CARD_TYPE(pSt) SD_ST(pSt, 480, 16)
00372 #define SD_ST_CARD_TYPE_RW 0x0000
00373 #define SD_ST_CARD_TYPE_ROM 0x0001
00374 #define SD_ST_SIZE_OF_PROTECTED_AREA(pSt) SD_ST(pSt, 448, 32)
00375 #define SD_ST_SPEED_CLASS(pSt) SD_ST(pSt, 440, 8)
00376 #define SD_ST_SPEED_CLASS_0 0
00377 #define SD_ST_SPEED_CLASS_2 1 // >= 2MB/s
00378 #define SD_ST_SPEED_CLASS_4 2 // >= 4MB/s
00379 #define SD_ST_SPEED_CLASS_6 3 // >= 6MB/s
00380 #define SD_ST_PERFORMANCE_MOVE(pSt) SD_ST(pSt, 432, 8)
00381 #define SD_ST_AU_SIZE(pSt) SD_ST(pSt, 428, 4)
00382 #define SD_ST_AU_SIZE_16K 1
00383 #define SD_ST_AU_SIZE_32K 2
00384 #define SD_ST_AU_SIZE_64K 3
00385 #define SD_ST_AU_SIZE_128K 4
00386 #define SD_ST_AU_SIZE_256K 5
00387 #define SD_ST_AU_SIZE_512K 6
00388 #define SD_ST_AU_SIZE_1M 7
00389 #define SD_ST_AU_SIZE_2M 8
00390 #define SD_ST_AU_SIZE_4M 9
00391 #define SD_ST_ERASE_SIZE(pSt) SD_ST(pSt, 408, 16)
00392 #define SD_ST_ERASE_TIMEOUT(pSt) SD_ST(pSt, 402, 6)
00393 #define SD_ST_ERASE_OFFSET(pSt) SD_ST(pSt, 400, 2)
00394
00395
00396
00397
00398
00399
00400 #define SD_SWITCH_ST(p, field, bits) SD_BITS32(p, 512, field, bits)
00401 #define SD_SWITCH_ST_MAX_CURRENT_CONSUMPTION(p) SD_SWITCH_ST(p, 496, 16)
00402 #define SD_SWITCH_ST_FUN_GRP6_INFO(p) SD_SWITCH_ST(p, 480, 16)
00403 #define SD_SWITCH_ST_FUN_GRP5_INFO(p) SD_SWITCH_ST(p, 464, 16)
00404 #define SD_SWITCH_ST_FUN_GRP4_INFO(p) SD_SWITCH_ST(p, 448, 16)
00405 #define SD_SWITCH_ST_FUN_GRP3_INFO(p) SD_SWITCH_ST(p, 432, 16)
00406 #define SD_SWITCH_ST_FUN_GRP2_INFO(p) SD_SWITCH_ST(p, 416, 16)
00407 #define SD_SWITCH_ST_FUN_GRP1_INFO(p) SD_SWITCH_ST(p, 400, 16)
00408 #define SD_SWITCH_ST_FUN_GRP6_RC(p) SD_SWITCH_ST(p, 396, 4)
00409 #define SD_SWITCH_ST_FUN_GRP5_RC(p) SD_SWITCH_ST(p, 392, 4)
00410 #define SD_SWITCH_ST_FUN_GRP4_RC(p) SD_SWITCH_ST(p, 388, 4)
00411 #define SD_SWITCH_ST_FUN_GRP3_RC(p) SD_SWITCH_ST(p, 384, 4)
00412 #define SD_SWITCH_ST_FUN_GRP2_RC(p) SD_SWITCH_ST(p, 380, 4)
00413 #define SD_SWITCH_ST_FUN_GRP1_RC(p) SD_SWITCH_ST(p, 376, 4)
00414 #define SD_SWITCH_ST_FUN_GRP_RC_ERROR 0xF
00415 #define SD_SWITCH_ST_DATA_STRUCT_VER(p) SD_SWITCH_ST(p, 368, 8)
00416 #define SD_SWITCH_ST_FUN_GRP6_BUSY(p) SD_SWITCH_ST(p, 352, 16)
00417 #define SD_SWITCH_ST_FUN_GRP5_BUSY(p) SD_SWITCH_ST(p, 336, 16)
00418 #define SD_SWITCH_ST_FUN_GRP4_BUSY(p) SD_SWITCH_ST(p, 320, 16)
00419 #define SD_SWITCH_ST_FUN_GRP3_BUSY(p) SD_SWITCH_ST(p, 304, 16)
00420 #define SD_SWITCH_ST_FUN_GRP2_BUSY(p) SD_SWITCH_ST(p, 288, 16)
00421 #define SD_SWITCH_ST_FUN_GRP1_BUSY(p) SD_SWITCH_ST(p, 272, 16)
00422 #define SD_SWITCH_ST_FUN_GRP_FUN_BUSY(funNdx) (1 << (funNdx))
00423
00424
00425
00426
00427
00428
00429 #define MMC_EXT8(p, i) SD_U8(p, 512, i)
00430
00431 #define MMC_EXT32(p, i) SD_U32(p, 512, i)
00432 #define MMC_EXT_S_CMD_SET_I 504
00433 #define MMC_EXT_S_CMD_SET(p) MMC_EXT8(p, MMC_EXT_S_CMD_SET_I)
00434 #define MMC_EXT_BOOT_INFO_I 228
00435 #define MMC_EXT_BOOT_INFO(p) MMC_EXT8(p, MMC_EXT_BOOT_INFO_I)
00436 #define MMC_EXT_BOOT_SIZE_MULTI_I 226
00437 #define MMC_EXT_BOOT_SIZE_MULTI(p) MMC_EXT8(p, MMC_EXT_BOOT_SIZE_MULTI_I)
00438 #define MMC_EXT_ACC_SIZE_I 225
00439 #define MMC_EXT_ACC_SIZE(p) MMC_EXT8(p, MMC_EXT_ACC_SIZE_I)
00440 #define MMC_EXT_HC_ERASE_GRP_SIZE_I 224
00441 #define MMC_EXT_HC_ERASE_GRP_SIZE(p) MMC_EXT8(p, MMC_EXT_HC_ERASE_GRP_SIZE_I)
00442 #define MMC_EXT_ERASE_TIMEOUT_MULT_I 223
00443 #define MMC_EXT_ERASE_TIMEOUT_MULT(p) MMC_EXT8(p, MMC_EXT_ERASE_TIMEOUT_MULT_I)
00444 #define MMC_EXT_REL_WR_SEC_C_I 222
00445 #define MMC_EXT_REL_WR_SEC_C(p) MMC_EXT8(p, MMC_EXT_REL_WR_SEC_C_I)
00446 #define MMC_EXT_HC_WP_GRP_SIZE_I 221
00447 #define MMC_EXT_HC_WP_GRP_SIZE(p) MMC_EXT8(p, MMC_EXT_HC_WP_GRP_SIZE_I)
00448 #define MMC_EXT_S_C_VCC_I 220
00449 #define MMC_EXT_S_C_VCC(p) MMC_EXT8(p, MMC_EXT_S_C_VCC_I)
00450 #define MMC_EXT_S_C_VCCQ_I 219
00451 #define MMC_EXT_S_C_VCCQ(p) MMC_EXT8(p, MMC_EXT_S_C_VCCQ_I)
00452 #define MMC_EXT_S_A_TIMEOUT_I 217
00453 #define MMC_EXT_S_A_TIMEOUT(p) MMC_EXT8(p, MMC_EXT_S_A_TIMEOUT_I)
00454 #define MMC_EXT_SEC_COUNT_I 212
00455 #define MMC_EXT_SEC_COUNT(p) MMC_EXT32(p, MMC_EXT_SEC_COUNT_I)
00456 #define MMC_EXT_MIN_PERF_W_8_52_I 210
00457 #define MMC_EXT_MIN_PERF_W_8_52(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_W_8_52_I)
00458 #define MMC_EXT_MIN_PERF_R_8_52_I 209
00459 #define MMC_EXT_MIN_PERF_R_8_52(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_R_8_52_I)
00460 #define MMC_EXT_MIN_PERF_W_8_26_4_52_I 208
00461 #define MMC_EXT_MIN_PERF_W_8_26_4_52(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_W_8_26_4_52_I)
00462 #define MMC_EXT_MIN_PERF_R_8_26_4_52_I 207
00463 #define MMC_EXT_MIN_PERF_R_8_26_4_52(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_R_8_26_4_52_I)
00464 #define MMC_EXT_MIN_PERF_W_4_26_I 206
00465 #define MMC_EXT_MIN_PERF_W_4_26(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_W_4_26_I)
00466 #define MMC_EXT_MIN_PERF_R_4_26_I 205
00467 #define MMC_EXT_MIN_PERF_R_4_26(p) MMC_EXT8(p, MMC_EXT_MIN_PERF_R_4_26_I)
00468 #define MMC_EXT_PWR_CL_26_360_I 203
00469 #define MMC_EXT_PWR_CL_26_360(p) MMC_EXT8(p, MMC_EXT_PWR_CL_26_360_I)
00470 #define MMC_EXT_PWR_CL_52_360_I 202
00471 #define MMC_EXT_PWR_CL_52_360(p) MMC_EXT8(p, MMC_EXT_PWR_CL_52_360_I)
00472 #define MMC_EXT_PWR_CL_26_195_I 201
00473 #define MMC_EXT_PWR_CL_26_195(p) MMC_EXT8(p, MMC_EXT_PWR_CL_26_195_I)
00474 #define MMC_EXT_PWR_CL_52_195_I 200
00475 #define MMC_EXT_PWR_CL_52_195(p) MMC_EXT8(p, MMC_EXT_PWR_CL_52_195_I)
00476 #define MMC_EXT_CARD_TYPE_I 196
00477 #define MMC_EXT_CARD_TYPE(p) MMC_EXT8(p, MMC_EXT_CARD_TYPE_I)
00478 #define MMC_EXT_CSD_STRUCTURE_I 194
00479 #define MMC_EXT_CSD_STRUCTURE(p) MMC_EXT8(p, MMC_EXT_CSD_STRUCTURE_I)
00480 #define MMC_EXT_EXT_CSD_REV_I 192
00481 #define MMC_EXT_EXT_CSD_REV(p) MMC_EXT8(p, MMC_EXT_EXT_CSD_REV_I)
00482 #define MMC_EXT_CMD_SET_I 191
00483 #define MMC_EXT_CMD_SET(p) MMC_EXT8(p, MMC_EXT_CMD_SET_I)
00484 #define MMC_EXT_CMD_SET_REV_I 189
00485 #define MMC_EXT_CMD_SET_REV(p) MMC_EXT8(p, MMC_EXT_CMD_SET_REV_I)
00486 #define MMC_EXT_POWER_CLASS_I 187
00487 #define MMC_EXT_POWER_CLASS(p) MMC_EXT8(p, MMC_EXT_POWER_CLASS_I)
00488 #define MMC_EXT_HS_TIMING_I 185
00489 #define MMC_EXT_HS_TIMING(p) MMC_EXT8(p, MMC_EXT_HS_TIMING_I)
00490 #define MMC_EXT_HS_TIMING_EN 1
00491 #define MMC_EXT_HS_TIMING_DIS 0
00492 #define MMC_EXT_BUS_WIDTH_I 183
00493 #define MMC_EXT_BUS_WIDTH(p) MMC_EXT8(p, MMC_EXT_BUS_WIDTH_I)
00494 #define MMC_EXT_BUS_WIDTH_1BIT 0
00495 #define MMC_EXT_BUS_WIDTH_4BITS 1
00496 #define MMC_EXT_BUS_WIDTH_8BUTS 2
00497 #define MMC_EXT_ERASED_MEM_CONT_I 181
00498 #define MMC_EXT_ERASED_MEM_CONT(p) MMC_EXT8(p, MMC_EXT_ERASED_MEM_CONT_I)
00499 #define MMC_EXT_BOOT_CONFIG_I 179
00500 #define MMC_EXT_BOOT_CONFIG(p) MMC_EXT8(p, MMC_EXT_BOOT_CONFIG_I)
00501 #define MMC_EXT_BOOT_BUS_WIDTH_I 177
00502 #define MMC_EXT_BOOT_BUS_WIDTH(p) MMC_EXT8(p, MMC_EXT_BOOT_BUS_WIDTH_I)
00503 #define MMC_EXT_ERASE_GROUP_DEF_I 175
00504 #define MMC_EXT_ERASE_GROUP_DEF(p) MMC_EXT8(p, MMC_EXT_ERASE_GROUP_DEF_I)
00505
00506
00507
00508
00509
00510 #define SD_CMD8_VHS (0xFul << 8)
00511 #define SD_CMD8_VHS_27_36 (0x1ul << 8)
00512 #define SD_CMD8_VHS_LOW_VOL (0x2ul << 8)
00513 #define SD_CMD8_CHECK_PATTERN (0xAA << 0)
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527 extern uint8_t SD_Init(sSdCard *pSd);
00528 extern void SD_DeInit(sSdCard *pSd);
00529
00530 extern uint8_t SD_SetupBusMode(sSdCard *pSd, uint8_t bMode);
00531 extern uint8_t SD_SetupHSMode(sSdCard *pSd, uint8_t bMode);
00532
00533 extern uint8_t SD_GetCardType(sSdCard *pSd);
00534 extern uint32_t SD_GetNumberBlocks(sSdCard *pSd);
00535 extern uint32_t SD_GetBlockSize(sSdCard *pSd);
00536 extern uint32_t SD_GetTotalSizeKB(sSdCard *pSd);
00537
00538 extern uint8_t SD_ReadBlocks(sSdCard *pSd,
00539 uint32_t dwAddr,
00540 void *pData,
00541 uint32_t dwNbBlocks);
00542 extern uint8_t SD_WriteBlocks(sSdCard *pSd,
00543 uint32_t dwAddr,
00544 const void *pData,
00545 uint32_t dwNbBlocks);
00546
00547 extern uint8_t SD_Read(sSdCard *pSd,
00548 uint32_t dwAddr,
00549 void *pData,
00550 uint32_t dwNbBlocks,
00551 fSdmmcCallback fCallback,
00552 void *pArg);
00553 extern uint8_t SD_Write(sSdCard *pSd,
00554 uint32_t dwAddr,
00555 const void *pData,
00556 uint32_t dwNbBlocks,
00557 fSdmmcCallback fCallback,
00558 void *pArg);
00559
00560 extern uint8_t SDIO_ReadDirect(
00561 sSdCard * pSd,
00562 uint8_t bFunctionNum,
00563 uint32_t dwAddress,
00564 uint8_t * pData,
00565 uint32_t dwSize);
00566
00567 extern uint8_t SDIO_WriteDirect(
00568 sSdCard * pSd,
00569 uint8_t bFunctionNum,
00570 uint32_t dwAddress,
00571 uint8_t bDataByte);
00572
00573 extern uint8_t SDIO_ReadBytes(
00574 sSdCard * pSd,
00575 uint8_t bFunctionNum,
00576 uint32_t dwAddress,
00577 uint8_t bIsFixedAddress,
00578 uint8_t * pData,
00579 uint16_t wSize,
00580 fSdmmcCallback fCallback,
00581 void * pArg);
00582
00583 extern uint8_t SDIO_WriteBytes(
00584 sSdCard * pSd,
00585 uint8_t bFunctionNum,
00586 uint32_t dwAddress,
00587 uint8_t bIsFixedAddress,
00588 uint8_t * pData,
00589 uint16_t wSize,
00590 fSdmmcCallback fCallback,
00591 void * pArg);
00592
00593
00594 extern void _DumpREG(void* pREG, uint32_t dwSize);
00595
00596 extern void SDIO_DumpCardInformation(sSdCard * pSd);
00597
00598 extern void SD_DumpCID(void * pCID);
00599
00600 extern void SD_DumpCSD(void * pCSD);
00601
00602 extern void SD_DumpExtCSD(void * pExtCSD);
00603
00604 extern void SD_DumpSCR(void * pSCR);
00605
00606 extern void SD_DumpSdStatus(void * pSdST);
00607
00608
00609
00610
00611 #endif
00612