📄 sdmmc.cod
字号:
DCB 0x0, "e", 0x0, " ", 0x0, "n", 0x0, "u", 0x0, "m", 0x0, "b"
DCB 0x0, "e", 0x0, "r", 0x0, " ", 0x0, "o", 0x0, "f", 0x0, " "
DCB 0x0, "i", 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "%"
DCB 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1FG@OKKD@?$AAa?$AAs?$AAs?$AAs?$AAi?$AAg?$AAn?$AA?5?$AAR?$AAC?$AAA?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAs@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FG@OKKD@?$AAa?$AAs?$AAs?$AAs?$AAi?$AAg?$AAn?$AA?5?$AAR?$AAC?$AAA?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAs@| DCB "a"
DCB 0x0, "s", 0x0, "s", 0x0, "s", 0x0, "i", 0x0, "g", 0x0, "n"
DCB 0x0, " ", 0x0, "R", 0x0, "C", 0x0, "A", 0x0, " ", 0x0, "i"
DCB 0x0, "s", 0x0, " ", 0x0, "n", 0x0, "o", 0x0, "t", 0x0, " "
DCB 0x0, "s", 0x0, "u", 0x0, "c", 0x0, "e", 0x0, "s", 0x0, "s"
DCB 0x0, "f", 0x0, "u", 0x0, "l", 0x0, "!", 0x0, " ", 0x0, "w"
DCB 0x0, "i", 0x0, "t", 0x0, "h", 0x0, " ", 0x0, "I", 0x0, "D"
DCB 0x0, " ", 0x0, "%", 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
DCB 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1CG@DHEP@?$AAN?$AAo?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAu?$AAn?$AAd?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CG@DHEP@?$AAN?$AAo?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAu?$AAn?$AAd?$AA?$AN?$AA?6?$AA?$AA@| DCB "N"
DCB 0x0, "o", 0x0, " ", 0x0, "c", 0x0, "a", 0x0, "r", 0x0, "d"
DCB 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "f", 0x0, "o"
DCB 0x0, "u", 0x0, "n", 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
DCB 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1DG@DFMO@?$AAd?$AAe?$AAv?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAl?$AAl?$AAo?$AAw?$AAi?$AAn@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DG@DFMO@?$AAd?$AAe?$AAv?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAl?$AAl?$AAo?$AAw?$AAi?$AAn@| DCB "d"
DCB 0x0, "e", 0x0, "v", 0x0, "C", 0x0, "o", 0x0, "u", 0x0, "n"
DCB 0x0, "t", 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "f"
DCB 0x0, "o", 0x0, "l", 0x0, "l", 0x0, "o", 0x0, "w", 0x0, "i"
DCB 0x0, "n", 0x0, "g", 0x0, " ", 0x0, "%", 0x0, "d", 0x0, 0xd
DCB 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1EG@HFPL@?$AAm?$AAm?$AAc?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AAR?$AAe?$AAs?$AAE?$AAr?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAa@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EG@HFPL@?$AAm?$AAm?$AAc?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AAR?$AAe?$AAs?$AAE?$AAr?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAa@| DCB "m"
DCB 0x0, "m", 0x0, "c", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "e"
DCB 0x0, "t", 0x0, " ", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "E"
DCB 0x0, "r", 0x0, "r", 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " "
DCB 0x0, "a", 0x0, "s", 0x0, " ", 0x0, "f", 0x0, "o", 0x0, "l"
DCB 0x0, "l", 0x0, "o", 0x0, "w", 0x0, "s", 0x0, " ", 0x0, "%"
DCB 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |mmcReset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |mmcReset| PROC
; 201 : {
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd014 sub sp, sp, #0x14
00008 |$M37248|
00008 e1a05000 mov r5, r0
0000c e58d5010 str r5, [sp, #0x10]
00010 e1a06001 mov r6, r1
; 202 : UINT32 cardType;
; 203 : MMC_CC resErr;
; 204 : UINT16 sdFlag;
; 205 : UINT16 readyFlag;
; 206 :
; 207 : #if (USE_SPI || USE_SPI_EMULATION)
; 208 : INT16 ChipNum;
; 209 :
; 210 : ChipNum = (INT16)setupInfo;
; 211 : pc->timer = (RESET_DELAY << 2);
; 212 : cardType = NO;
; 213 : readyFlag = NO;
; 214 : resErr = MMC_NO_ERROR;
; 215 : pc->drive_active = ChipNum;
; 216 :
; 217 :
; 218 : selectChip( ChipNum );
; 219 :
; 220 :
; 221 : resErr = mmcCommandAndResponse ( pc,
; 222 : 0L,
; 223 : GO_IDLE_STATE,
; 224 : 0,
; 225 : R1 );
; 226 :
; 227 :
; 228 : deSelectChip ( ChipNum );
; 229 :
; 230 :
; 231 : if ( (resErr != MMC_CARD_IS_NOT_READY) )
; 232 : {
; 233 :
; 234 : pc->error_code = MMC_INTERFACE_ERROR;
; 235 : return MMC_INTERFACE_ERROR;
; 236 : }
; 237 :
; 238 :
; 242 : #if (USE_SD)
; 243 : sdFlag = YES;
; 244 : #else
; 245 : sdFlag = NO;
; 246 : #endif
; 247 : while ( pc->timer )
; 248 : {
; 249 :
; 255 :
; 256 : #if (USE_SD)
; 257 :
; 258 : if (sdFlag)
; 259 : {
; 260 :
; 261 : resErr = mmcSDApplCmd(pc, SDNULL, 0L, 0, 0, R1, SD_SEND_OP_COND);
; 262 :
; 263 :
; 264 : if (resErr == MMC_COMUNC_ILLEG_COM)
; 265 : {
; 266 :
; 271 : sdFlag = NO;
; 272 : }
; 273 : else if (resErr == MMC_NO_ERROR)
; 274 : {
; 275 :
; 276 : cardType = SD_TYPE;
; 277 : readyFlag = CARD_READY_FLAG;
; 278 :
; 279 :
; 280 : #if 0
; 281 :
; 284 : selectChip( ChipNum );
; 285 : resErr = mmcCommandAndResponse ( pc,
; 286 : 0L,
; 287 : SD_READ_OCR,
; 288 : 0,
; 289 : R3 );
; 290 : deSelectChip ( ChipNum );
; 291 :
; 292 : if (resErr == MMC_NO_ERROR)
; 293 : {
; 294 :
; 295 : readyFlag = to_WORD((UCHAR *)&pc->LastResponse[1]);
; 296 : if (!(readyFlag & CARD_READY_FLAG))
; 297 : {
; 298 :
; 299 : resErr = MMC_CARD_IS_NOT_READY;
; 300 : }
; 301 : }
; 302 : #endif
; 303 : }
; 304 : }
; 305 : #endif
; 306 :
; 307 :
; 308 : if (!sdFlag)
; 309 : {
; 310 :
; 311 : RETAILMSG(1, (TEXT(" Before sending SEND_OP_COND command"\r\n")));
; 312 :
; 313 : resErr = mmcCommandAndResponse ( pc,
; 314 : 0L,
; 315 : SEND_OP_COND,
; 316 : 0,
; 317 : R1 );
; 318 :
; 319 :
; 320 :
; 321 : if ( (resErr == MMC_CARD_IS_NOT_READY) || (resErr == MMC_NO_ERROR) )
; 322 : {
; 323 :
; 324 : cardType = SPI_TYPE;
; 325 :
; 326 : sdFlag = NO;
; 327 : RETAILMSG(1, (TEXT(" After sending SEND_OP_COND command, MMC_CARD_NOT_READY\r\n")));
; 328 : }
; 329 : }
; 330 :
; 331 :
; 332 : if ( (resErr != MMC_CARD_IS_NOT_READY) && resErr )
; 333 : {
; 334 : pc->error_code = (UINT16)resErr;
; 335 : return resErr;
; 336 : }
; 337 :
; 338 :
; 339 : if ( resErr == MMC_CARD_IS_NOT_READY )
; 340 : {
; 341 : pc->timer--;
; 342 : OS_WAIT(1);
; 343 : if ( !pc->timer )
; 344 : {
; 345 : pc->error_code = MMC_CARD_IS_NOT_READY;
; 346 : return MMC_CARD_IS_NOT_READY;
; 347 : }
; 348 : }
; 349 : else if (resErr == MMC_NO_ERROR)
; 350 : {
; 351 :
; 352 : pc->drive[ChipNum].drv_type = cardType;
; 353 :
; 354 :
; 355 : pc->drive[ChipNum].RCA = (UINT16)ChipNum;
; 356 : break;
; 357 : }
; 358 : }
; 359 :
; 360 : #else
; 361 : UINT16 i, bInterface;
; 362 : UINT16 devCount;
; 363 : RETAILMSG(1, (TEXT("mmcReset() entered \r\n")));
00014 e59f0438 ldr r0, [pc, #0x438]
00018 eb000000 bl NKDbgPrintfW
; 364 : pc->timer = (RESET_DELAY << 2);
; 365 : cardType = NO;
; 366 : readyFlag = NO;
; 367 : resErr = MMC_NO_ERROR;
; 368 :
; 369 :
; 370 :
; 376 : bInterface = 0;
; 377 : devCount = 0;
; 378 :
; 379 : sdFlag = NO;
; 380 :
; 381 : #if (USE_SD)
; 382 : RETAILMSG(1, (TEXT("user_sd\r\n")));
0001c e59f042c ldr r0, [pc, #0x42C]
00020 e3a02000 mov r2, #0
00024 e3a03078 mov r3, #0x78
00028 e1a04002 mov r4, r2
0002c e1c531b8 strh r3, [r5, #0x18]
00030 e1a08002 mov r8, r2
00034 e58d400c str r4, [sp, #0xC]
00038 e1a07002 mov r7, r2
0003c e1a0a002 mov r10, r2
00040 e1a0b002 mov r11, r2
00044 e1a09002 mov r9, r2
00048 eb000000 bl NKDbgPrintfW
0004c |$DO_ALL_BUS_INTERFACE$36570|
; 383 : #endif
; 384 : #if (USE_SD)
; 385 : DO_ALL_BUS_INTERFACE:
; 386 : #endif
; 387 : for (i = 0; i < (CID_BYTE_LENGTH/2); pc->LastResponse[i++] = 0);
0004c e3a02000 mov r2, #0
00050 e1a01002 mov r1, r2
; 528 : {
; 529 : RETAILMSG(1, (TEXT("asssign RCA is not sucessful! with ID %d\r\n"), i));
00054 ea000000 b |$L36571|
00058 |$L37246|
00058 e3a02000 mov r2, #0
0005c |$L36571|
; 383 : #endif
; 384 : #if (USE_SD)
; 385 : DO_ALL_BUS_INTERFACE:
; 386 : #endif
; 387 : for (i = 0; i < (CID_BYTE_LENGTH/2); pc->LastResponse[i++] = 0);
0005c e0850081 add r0, r5, r1, lsl #1
00060 e2811001 add r1, r1, #1
00064 e1c022b8 strh r2, [r0, #0x28]
00068 e1a00801 mov r0, r1, lsl #16
0006c e1a02820 mov r2, r0, lsr #16
00070 e1a01802 mov r1, r2, lsl #16
00074 e1a01821 mov r1, r1, lsr #16
00078 e3510008 cmp r1, #8
0007c 3afffff5 bcc |$L37246|
; 388 :
; 389 :
; 390 : OS_WAIT(25);
00080 e3a00019 mov r0, #0x19
00084 eb000000 bl platform_delayms
; 391 :
; 392 :
; 393 : while (pc->timer)
00088 e1d531b8 ldrh r3, [r5, #0x18]
0008c e1a00803 mov r0, r3, lsl #16
00090 e1b01820 movs r1, r0, lsr #16
00094 0a000066 beq |$L36576|
00098 |$L36575|
; 394 : {
; 395 :
; 402 :
; 403 : if (!sdFlag)
00098 e1a00809 mov r0, r9, lsl #16
0009c e1b01820 movs r1, r0, lsr #16
000a0 1a00002c bne |$L36585|
; 404 : {
; 405 :
; 406 : resErr = mmcCommandAndResponse ( pc,
; 407 : setupInfo,
; 408 : SEND_OP_COND,
; 409 : 0,
; 410 : R3 );
000a4 e3a00003 mov r0, #3
000a8 e58d0000 str r0, [sp]
000ac e3a03000 mov r3, #0
000b0 e3a02001 mov r2, #1
000b4 e1a01006 mov r1, r6
000b8 e1a00005 mov r0, r5
000bc eb000000 bl mmcCommandAndResponse
000c0 e1b04000 movs r4, r0
000c4 e58d400c str r4, [sp, #0xC]
; 411 :
; 412 :
; 413 : if (resErr == MMC_NO_ERROR)
000c8 1a000008 bne |$L36578|
; 414 : {
; 415 :
; 416 :
; 417 : cardType = MMC_TYPE;
; 418 : readyFlag = to_WORD((UCHAR *)&pc->LastResponse[0]);
000cc e2850028 add r0, r5, #0x28
000d0 e3a08101 mov r8, #1, 2
000d4 eb000000 bl to_WORD
000d8 e1a07000 mov r7, r0
; 419 : RETAILMSG(1, (TEXT("is the card ready? %x\r\n"), readyFlag));
000dc e1a00807 mov r0, r7, lsl #16
000e0 e1a01820 mov r1, r0, lsr #16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -