📄 sdcard.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Int_Flash\sdcard.o --depend=.\Int_Flash\sdcard.d --device=DARMSTM --apcs=interwork -O3 -I..\include -I..\..\..\..\..\INC\ST\STM32F10x\USB -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB --omf_browse=.\Int_Flash\sdcard.crf ..\source\sdcard.c]
THUMB
AREA ||i.CmdResp2Error||, CODE, READONLY, ALIGN=2
CmdResp2Error PROC
;;;2286 static SD_Error CmdResp2Error(void)
;;;2287 {
000000 b510 PUSH {r4,lr}
;;;2288 SD_Error errorstatus = SD_OK;
;;;2289 u32 status;
;;;2290
;;;2291 status = SDIO->STA;
000002 490b LDR r1,|L1.48|
000004 242a MOVS r4,#0x2a ;2288
|L1.6|
;;;2292
;;;2293 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND)))
;;;2294 {
;;;2295 status = SDIO->STA;
000006 6b48 LDR r0,[r1,#0x34]
000008 f0100f45 TST r0,#0x45 ;2293
00000c d0fb BEQ |L1.6|
;;;2296 }
;;;2297
;;;2298 if (status & SDIO_FLAG_CTIMEOUT)
00000e 0741 LSLS r1,r0,#29
000010 d502 BPL |L1.24|
;;;2299 {
;;;2300 errorstatus = SD_CMD_RSP_TIMEOUT;
000012 2403 MOVS r4,#3
;;;2301 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000014 2004 MOVS r0,#4
;;;2302 return(errorstatus);
000016 e003 B |L1.32|
|L1.24|
;;;2303 }
;;;2304 else if (status & SDIO_FLAG_CCRCFAIL)
000018 07c0 LSLS r0,r0,#31
00001a d005 BEQ |L1.40|
;;;2305 {
;;;2306 errorstatus = SD_CMD_CRC_FAIL;
00001c 2401 MOVS r4,#1
;;;2307 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
00001e 4620 MOV r0,r4
|L1.32|
;;;2308 return(errorstatus);
;;;2309 }
;;;2310
;;;2311 /* Clear all the static flags */
;;;2312 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
000020 f7fffffe BL SDIO_ClearFlag
;;;2313
;;;2314 return(errorstatus);
000024 4620 MOV r0,r4
;;;2315 }
000026 bd10 POP {r4,pc}
|L1.40|
000028 f24050ff MOV r0,#0x5ff ;2312
00002c e7f8 B |L1.32|
;;;2316
ENDP
00002e 0000 DCW 0x0000
|L1.48|
000030 40018000 DCD 0x40018000
AREA ||i.SD_InitializeCards||, CODE, READONLY, ALIGN=2
SD_InitializeCards PROC
;;;352 SD_Error SD_InitializeCards(void)
;;;353 {
000000 e92d43f8 PUSH {r3-r9,lr}
;;;354 SD_Error errorstatus = SD_OK;
;;;355 u16 rca = 0x01;
000004 2001 MOVS r0,#1
;;;356
;;;357 if (SDIO_GetPowerState() == SDIO_PowerState_OFF)
000006 9000 STR r0,[sp,#0]
000008 f7fffffe BL SDIO_GetPowerState
00000c b910 CBNZ r0,|L2.20|
;;;358 {
;;;359 errorstatus = SD_REQUEST_NOT_APPLICABLE;
00000e 2025 MOVS r0,#0x25
|L2.16|
;;;360 return(errorstatus);
;;;361 }
;;;362
;;;363 if (SDIO_SECURE_DIGITAL_IO_CARD != CardType)
;;;364 {
;;;365 /* Send CMD2 ALL_SEND_CID */
;;;366 SDIO_CmdInitStructure.SDIO_Argument = 0x0;
;;;367 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_ALL_SEND_CID;
;;;368 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long;
;;;369 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;370 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;371 SDIO_SendCommand(&SDIO_CmdInitStructure);
;;;372
;;;373 errorstatus = CmdResp2Error();
;;;374
;;;375 if (SD_OK != errorstatus)
;;;376 {
;;;377 return(errorstatus);
;;;378 }
;;;379
;;;380 CID_Tab[0] = SDIO_GetResponse(SDIO_RESP1);
;;;381 CID_Tab[1] = SDIO_GetResponse(SDIO_RESP2);
;;;382 CID_Tab[2] = SDIO_GetResponse(SDIO_RESP3);
;;;383 CID_Tab[3] = SDIO_GetResponse(SDIO_RESP4);
;;;384 }
;;;385 if ((SDIO_SECURE_DIGITAL_CARD == CardType) || (SDIO_SECURE_DIGITAL_IO_CARD == CardType) || (SDIO_SECURE_DIGITAL_IO_COMBO_CARD == CardType)
;;;386 || (SDIO_HIGH_CAPACITY_SD_CARD == CardType))
;;;387 {
;;;388 /* Send CMD3 SET_REL_ADDR with argument 0 */
;;;389 /* SD Card publishes its RCA. */
;;;390 SDIO_CmdInitStructure.SDIO_Argument = 0x00;
;;;391 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SET_REL_ADDR;
;;;392 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;393 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;394 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;395 SDIO_SendCommand(&SDIO_CmdInitStructure);
;;;396
;;;397 errorstatus = CmdResp6Error(SDIO_SET_REL_ADDR, &rca);
;;;398
;;;399 if (SD_OK != errorstatus)
;;;400 {
;;;401 return(errorstatus);
;;;402 }
;;;403 }
;;;404
;;;405 if (SDIO_SECURE_DIGITAL_IO_CARD != CardType)
;;;406 {
;;;407 RCA = rca;
;;;408
;;;409 /* Send CMD9 SEND_CSD with argument as card's RCA */
;;;410 SDIO_CmdInitStructure.SDIO_Argument = (u32)(rca << 16);
;;;411 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_CSD;
;;;412 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Long;
;;;413 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;414 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;415 SDIO_SendCommand(&SDIO_CmdInitStructure);
;;;416
;;;417 errorstatus = CmdResp2Error();
;;;418
;;;419 if (SD_OK != errorstatus)
;;;420 {
;;;421 return(errorstatus);
;;;422 }
;;;423
;;;424 CSD_Tab[0] = SDIO_GetResponse(SDIO_RESP1);
;;;425 CSD_Tab[1] = SDIO_GetResponse(SDIO_RESP2);
;;;426 CSD_Tab[2] = SDIO_GetResponse(SDIO_RESP3);
;;;427 CSD_Tab[3] = SDIO_GetResponse(SDIO_RESP4);
;;;428 }
;;;429
;;;430 errorstatus = SD_OK; /* All cards get intialized */
;;;431
;;;432 return(errorstatus);
;;;433 }
000010 e8bd83f8 POP {r3-r9,pc}
|L2.20|
000014 4e36 LDR r6,|L2.240|
000016 2700 MOVS r7,#0 ;363
000018 6870 LDR r0,[r6,#4] ;363 ; CardType
00001a 4d36 LDR r5,|L2.244|
00001c f04f09c0 MOV r9,#0xc0 ;363
000020 f44f6880 MOV r8,#0x400 ;363
000024 2802 CMP r0,#2 ;363
000026 d028 BEQ |L2.122|
000028 2002 MOVS r0,#2 ;367
00002a e9c57000 STRD r7,r0,[r5,#0] ;369
00002e e9c59702 STRD r9,r7,[r5,#8] ;371
000032 4628 MOV r0,r5 ;371
000034 f8c58010 STR r8,[r5,#0x10] ;371 ; SDIO_CmdInitStructure
000038 f7fffffe BL SDIO_SendCommand
00003c f7fffffe BL CmdResp2Error
000040 282a CMP r0,#0x2a ;375
000042 d1e5 BNE |L2.16|
000044 2000 MOVS r0,#0 ;380
000046 f7fffffe BL SDIO_GetResponse
00004a f1a50428 SUB r4,r5,#0x28 ;380
00004e 6020 STR r0,[r4,#0] ;381 ; CID_Tab
000050 2004 MOVS r0,#4 ;381
000052 f7fffffe BL SDIO_GetResponse
000056 6060 STR r0,[r4,#4] ;382 ; CID_Tab
000058 2008 MOVS r0,#8 ;382
00005a f7fffffe BL SDIO_GetResponse
00005e 60a0 STR r0,[r4,#8] ;383 ; CID_Tab
000060 200c MOVS r0,#0xc ;383
000062 f7fffffe BL SDIO_GetResponse
000066 60e0 STR r0,[r4,#0xc] ;385 ; CID_Tab
000068 6870 LDR r0,[r6,#4] ;385 ; CardType
00006a 2801 CMP r0,#1 ;385
00006c d005 BEQ |L2.122|
00006e 2802 CMP r0,#2 ;385
000070 d003 BEQ |L2.122|
000072 2804 CMP r0,#4 ;385
000074 d001 BEQ |L2.122|
000076 2805 CMP r0,#5 ;386
000078 d113 BNE |L2.162|
|L2.122|
00007a 2003 MOVS r0,#3 ;391
00007c e9c57000 STRD r7,r0,[r5,#0] ;392
000080 e9c57803 STRD r7,r8,[r5,#0xc] ;395
000084 2040 MOVS r0,#0x40 ;392
000086 60a8 STR r0,[r5,#8] ;395 ; SDIO_CmdInitStructure
000088 481a LDR r0,|L2.244|
00008a f7fffffe BL SDIO_SendCommand
00008e 4669 MOV r1,sp ;397
000090 2003 MOVS r0,#3 ;397
000092 f7fffffe BL CmdResp6Error
000096 4604 MOV r4,r0 ;397
000098 282a CMP r0,#0x2a ;399
00009a d127 BNE |L2.236|
00009c 6870 LDR r0,[r6,#4] ;405 ; CardType
00009e 2802 CMP r0,#2 ;405
0000a0 d024 BEQ |L2.236|
|L2.162|
0000a2 f8bd0000 LDRH r0,[sp,#0] ;407
0000a6 60b0 STR r0,[r6,#8] ;410 ; RCA
0000a8 0400 LSLS r0,r0,#16 ;410
0000aa 6028 STR r0,[r5,#0] ;411 ; SDIO_CmdInitStructure
0000ac e9c59702 STRD r9,r7,[r5,#8] ;415
0000b0 2009 MOVS r0,#9 ;411
0000b2 f8c58010 STR r8,[r5,#0x10] ;415 ; SDIO_CmdInitStructure
0000b6 6068 STR r0,[r5,#4] ;415 ; SDIO_CmdInitStructure
0000b8 480e LDR r0,|L2.244|
0000ba f7fffffe BL SDIO_SendCommand
0000be f7fffffe BL CmdResp2Error
0000c2 4604 MOV r4,r0 ;417
0000c4 282a CMP r0,#0x2a ;419
0000c6 d111 BNE |L2.236|
0000c8 2000 MOVS r0,#0 ;424
0000ca f7fffffe BL SDIO_GetResponse
0000ce 4d09 LDR r5,|L2.244|
0000d0 3d38 SUBS r5,r5,#0x38 ;424
0000d2 6028 STR r0,[r5,#0] ;425 ; CSD_Tab
0000d4 2004 MOVS r0,#4 ;425
0000d6 f7fffffe BL SDIO_GetResponse
0000da 6068 STR r0,[r5,#4] ;426 ; CSD_Tab
0000dc 2008 MOVS r0,#8 ;426
0000de f7fffffe BL SDIO_GetResponse
0000e2 60a8 STR r0,[r5,#8] ;427 ; CSD_Tab
0000e4 200c MOVS r0,#0xc ;427
0000e6 f7fffffe BL SDIO_GetResponse
0000ea 60e8 STR r0,[r5,#0xc] ;427 ; CSD_Tab
|L2.236|
0000ec 4620 MOV r0,r4 ;432
0000ee e78f B |L2.16|
;;;434
ENDP
|L2.240|
0000f0 00000000 DCD ||.data||
|L2.244|
0000f4 00000038 DCD ||.bss||+0x38
AREA ||i.CmdResp1Error||, CODE, READONLY, ALIGN=2
CmdResp1Error PROC
;;;2106 static SD_Error CmdResp1Error(u8 cmd)
;;;2107 {
000000 b570 PUSH {r4-r6,lr}
;;;2108 SD_Error errorstatus = SD_OK;
;;;2109 u32 status;
;;;2110 u32 response_r1;
;;;2111
;;;2112 status = SDIO->STA;
000002 4937 LDR r1,|L3.224|
000004 4605 MOV r5,r0 ;2107
000006 242a MOVS r4,#0x2a ;2108
|L3.8|
;;;2113
;;;2114 while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
;;;2115 {
;;;2116 status = SDIO->STA;
000008 6b48 LDR r0,[r1,#0x34]
00000a f0100f45 TST r0,#0x45 ;2114
00000e d0fb BEQ |L3.8|
;;;2117 }
;;;2118
;;;2119 if (status & SDIO_FLAG_CTIMEOUT)
000010 0741 LSLS r1,r0,#29
000012 d502 BPL |L3.26|
;;;2120 {
;;;2121 errorstatus = SD_CMD_RSP_TIMEOUT;
000014 2403 MOVS r4,#3
;;;2122 SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000016 2004 MOVS r0,#4
;;;2123 return(errorstatus);
000018 e003 B |L3.34|
|L3.26|
;;;2124 }
;;;2125 else if (status & SDIO_FLAG_CCRCFAIL)
00001a 07c0 LSLS r0,r0,#31
00001c d004 BEQ |L3.40|
;;;2126 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -