📄 sdcard.txt
字号:
000018 2018 MOVS r0,#0x18
00001a f88d0003 STRB r0,[sp,#3]
00001e 4669 MOV r1,sp
000020 4814 LDR r0,|L5.116|
000022 f7fffffe BL GPIO_Init
000026 2004 MOVS r0,#4
000028 f8ad0000 STRH r0,[sp,#0]
00002c 4669 MOV r1,sp
00002e 4812 LDR r0,|L5.120|
000030 f7fffffe BL GPIO_Init
;;;138 SD_Error errorstatus = SD_OK;
;;;139
;;;140 /* Configure SDIO interface GPIO */
;;;141 GPIO_Configuration();
;;;142
;;;143 /* Enable the SDIO AHB Clock */
;;;144 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
000034 2101 MOVS r1,#1
000036 0288 LSLS r0,r1,#10
000038 f7fffffe BL RCC_AHBPeriphClockCmd
;;;145
;;;146 /* Enable the DMA2 Clock */
;;;147 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
00003c 2101 MOVS r1,#1
00003e 2002 MOVS r0,#2
000040 f7fffffe BL RCC_AHBPeriphClockCmd
;;;148
;;;149 SDIO_DeInit();
000044 f7fffffe BL SDIO_DeInit
;;;150
;;;151 errorstatus = SD_PowerON();
000048 f7fffffe BL SD_PowerON
;;;152
;;;153 if (errorstatus != SD_OK)
00004c 282a CMP r0,#0x2a
00004e d110 BNE |L5.114|
;;;154 {
;;;155 /* CMD Response TimeOut (wait for CMDSENT flag) */
;;;156 return(errorstatus);
;;;157 }
;;;158
;;;159 errorstatus = SD_InitializeCards();
000050 f7fffffe BL SD_InitializeCards
000054 4604 MOV r4,r0
;;;160
;;;161 if (errorstatus != SD_OK)
000056 282a CMP r0,#0x2a
000058 d10a BNE |L5.112|
;;;162 {
;;;163 /* CMD Response TimeOut (wait for CMDSENT flag) */
;;;164 return(errorstatus);
;;;165 }
;;;166
;;;167 /* Configure the SDIO peripheral */
;;;168 /* HCLK = 72 MHz, SDIOCLK = 72 MHz, SDIO_CK = HCLK/(2 + 1) = 24 MHz */
;;;169 SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
00005a 4808 LDR r0,|L5.124|
00005c 2101 MOVS r1,#1
00005e 7001 STRB r1,[r0,#0] ; SDIO_InitStructure
;;;170 SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
000060 2100 MOVS r1,#0
;;;171 SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
000062 6041 STR r1,[r0,#4] ; SDIO_InitStructure
;;;172 SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
000064 6081 STR r1,[r0,#8] ; SDIO_InitStructure
;;;173 SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
000066 60c1 STR r1,[r0,#0xc] ; SDIO_InitStructure
;;;174 SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
000068 6101 STR r1,[r0,#0x10] ; SDIO_InitStructure
;;;175 SDIO_Init(&SDIO_InitStructure);
00006a 6141 STR r1,[r0,#0x14] ; SDIO_InitStructure
00006c f7fffffe BL SDIO_Init
|L5.112|
000070 4620 MOV r0,r4 ;164
|L5.114|
;;;176
;;;177 return(errorstatus);
;;;178 }
000072 bd38 POP {r3-r5,pc}
;;;179
ENDP
|L5.116|
000074 40011000 DCD 0x40011000
|L5.120|
000078 40011400 DCD 0x40011400
|L5.124|
00007c 00000020 DCD ||.bss||+0x20
AREA ||i.SD_PowerOFF||, CODE, READONLY, ALIGN=1
SD_PowerOFF PROC
;;;334 SD_Error SD_PowerOFF(void)
;;;335 {
000000 b510 PUSH {r4,lr}
;;;336 SD_Error errorstatus = SD_OK;
000002 242a MOVS r4,#0x2a
;;;337
;;;338 /* Set Power State to OFF */
;;;339 SDIO_SetPowerState(SDIO_PowerState_OFF);
000004 2000 MOVS r0,#0
000006 f7fffffe BL SDIO_SetPowerState
;;;340
;;;341 return(errorstatus);
00000a 4620 MOV r0,r4
;;;342 }
00000c bd10 POP {r4,pc}
;;;343
ENDP
AREA ||i.SD_GetCardInfo||, CODE, READONLY, ALIGN=2
SD_GetCardInfo PROC
;;;443 SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo)
;;;444 {
000000 b570 PUSH {r4-r6,lr}
;;;445 SD_Error errorstatus = SD_OK;
;;;446 u8 tmp = 0;
;;;447
;;;448 cardinfo->CardType = (u8)CardType;
000002 4a79 LDR r2,|L7.488|
;;;449 cardinfo->RCA = (u16)RCA;
;;;450
;;;451 /* Byte 0 */
;;;452 tmp = (u8)((CSD_Tab[0] & 0xFF000000) >> 24);
000004 4c79 LDR r4,|L7.492|
000006 6851 LDR r1,[r2,#4] ;448 ; CardType
000008 f8801040 STRB r1,[r0,#0x40] ;448
00000c 6891 LDR r1,[r2,#8] ;449 ; RCA
00000e f8a01042 STRH r1,[r0,#0x42] ;449
000012 6821 LDR r1,[r4,#0] ; CSD_Tab
000014 232a MOVS r3,#0x2a ;445
000016 0e0a LSRS r2,r1,#24
;;;453 cardinfo->SD_csd.CSDStruct = (tmp & 0xC0) >> 6;
000018 0995 LSRS r5,r2,#6
00001a 7005 STRB r5,[r0,#0]
;;;454 cardinfo->SD_csd.SysSpecVersion = (tmp & 0x3C) >> 2;
00001c f3c20583 UBFX r5,r2,#2,#4
000020 7045 STRB r5,[r0,#1]
;;;455 cardinfo->SD_csd.Reserved1 = tmp & 0x03;
000022 f0020203 AND r2,r2,#3
000026 7082 STRB r2,[r0,#2]
;;;456
;;;457 /* Byte 1 */
;;;458 tmp = (u8)((CSD_Tab[0] & 0x00FF0000) >> 16);
000028 0c0a LSRS r2,r1,#16
;;;459 cardinfo->SD_csd.TAAC = tmp;
00002a 70c2 STRB r2,[r0,#3]
;;;460
;;;461 /* Byte 2 */
;;;462 tmp = (u8)((CSD_Tab[0] & 0x0000FF00) >> 8);
00002c 0a0a LSRS r2,r1,#8
;;;463 cardinfo->SD_csd.NSAC = tmp;
00002e 7102 STRB r2,[r0,#4]
;;;464
;;;465 /* Byte 3 */
;;;466 tmp = (u8)(CSD_Tab[0] & 0x000000FF);
;;;467 cardinfo->SD_csd.MaxBusClkFrec = tmp;
000030 7141 STRB r1,[r0,#5]
;;;468
;;;469 /* Byte 4 */
;;;470 tmp = (u8)((CSD_Tab[1] & 0xFF000000) >> 24);
000032 6862 LDR r2,[r4,#4] ; CSD_Tab
000034 0e11 LSRS r1,r2,#24
;;;471 cardinfo->SD_csd.CardComdClasses = tmp << 4;
000036 0109 LSLS r1,r1,#4
000038 80c1 STRH r1,[r0,#6]
;;;472
;;;473 /* Byte 5 */
;;;474 tmp = (u8)((CSD_Tab[1] & 0x00FF0000) >> 16);
;;;475 cardinfo->SD_csd.CardComdClasses |= (tmp & 0xF0) >> 4;
00003a 88c5 LDRH r5,[r0,#6]
00003c f3c24107 UBFX r1,r2,#16,#8 ;474
000040 ea451511 ORR r5,r5,r1,LSR #4
000044 80c5 STRH r5,[r0,#6]
;;;476 cardinfo->SD_csd.RdBlockLen = tmp & 0x0F;
000046 f001010f AND r1,r1,#0xf
00004a 7201 STRB r1,[r0,#8]
;;;477
;;;478 /* Byte 6 */
;;;479 tmp = (u8)((CSD_Tab[1] & 0x0000FF00) >> 8);
00004c f3c22107 UBFX r1,r2,#8,#8
;;;480 cardinfo->SD_csd.PartBlockRead = (tmp & 0x80) >> 7;
000050 09cd LSRS r5,r1,#7
000052 7245 STRB r5,[r0,#9]
;;;481 cardinfo->SD_csd.WrBlockMisalign = (tmp & 0x40) >> 6;
000054 f3c11580 UBFX r5,r1,#6,#1
000058 7285 STRB r5,[r0,#0xa]
;;;482 cardinfo->SD_csd.RdBlockMisalign = (tmp & 0x20) >> 5;
00005a f3c11540 UBFX r5,r1,#5,#1
00005e 72c5 STRB r5,[r0,#0xb]
;;;483 cardinfo->SD_csd.DSRImpl = (tmp & 0x10) >> 4;
000060 f3c11500 UBFX r5,r1,#4,#1
000064 7305 STRB r5,[r0,#0xc]
;;;484 cardinfo->SD_csd.Reserved2 = 0; /* Reserved */
000066 2500 MOVS r5,#0
000068 7345 STRB r5,[r0,#0xd]
;;;485 cardinfo->SD_csd.DeviceSize = (tmp & 0x03) << 10;
00006a 0789 LSLS r1,r1,#30
00006c 0d09 LSRS r1,r1,#20
00006e 81c1 STRH r1,[r0,#0xe]
;;;486
;;;487 /* Byte 7 */
;;;488 tmp = (u8)(CSD_Tab[1] & 0x000000FF);
000070 b2d1 UXTB r1,r2
;;;489 cardinfo->SD_csd.DeviceSize |= (tmp) << 2;
000072 89c2 LDRH r2,[r0,#0xe]
000074 ea420181 ORR r1,r2,r1,LSL #2
000078 81c1 STRH r1,[r0,#0xe]
;;;490
;;;491 /* Byte 8 */
;;;492 tmp = (u8)((CSD_Tab[2] & 0xFF000000) >> 24);
00007a 68a1 LDR r1,[r4,#8] ; CSD_Tab
;;;493
;;;494 cardinfo->SD_csd.DeviceSize |= (tmp & 0xC0) >> 6;
00007c 89c6 LDRH r6,[r0,#0xe]
00007e 0e0a LSRS r2,r1,#24 ;492
000080 ea461692 ORR r6,r6,r2,LSR #6
000084 81c6 STRH r6,[r0,#0xe]
;;;495 cardinfo->SD_csd.MaxRdCurrentVDDMin = (tmp & 0x38) >> 3;
000086 f3c206c2 UBFX r6,r2,#3,#3
00008a 7406 STRB r6,[r0,#0x10]
;;;496 cardinfo->SD_csd.MaxRdCurrentVDDMax = (tmp & 0x07);
00008c f0020207 AND r2,r2,#7
000090 7442 STRB r2,[r0,#0x11]
;;;497
;;;498 /* Byte 9 */
;;;499 tmp = (u8)((CSD_Tab[2] & 0x00FF0000) >> 16);
000092 f3c14207 UBFX r2,r1,#16,#8
;;;500 cardinfo->SD_csd.MaxWrCurrentVDDMin = (tmp & 0xE0) >> 5;
000096 0956 LSRS r6,r2,#5
000098 7486 STRB r6,[r0,#0x12]
;;;501 cardinfo->SD_csd.MaxWrCurrentVDDMax = (tmp & 0x1C) >> 2;
00009a f3c20682 UBFX r6,r2,#2,#3
00009e 74c6 STRB r6,[r0,#0x13]
;;;502 cardinfo->SD_csd.DeviceSizeMul = (tmp & 0x03) << 1;
0000a0 0792 LSLS r2,r2,#30
0000a2 0f52 LSRS r2,r2,#29
0000a4 7502 STRB r2,[r0,#0x14]
;;;503
;;;504 /* Byte 10 */
;;;505 tmp = (u8)((CSD_Tab[2] & 0x0000FF00) >> 8);
;;;506 cardinfo->SD_csd.DeviceSizeMul |= (tmp & 0x80) >> 7;
0000a6 7d06 LDRB r6,[r0,#0x14]
0000a8 f3c12207 UBFX r2,r1,#8,#8 ;505
0000ac ea4616d2 ORR r6,r6,r2,LSR #7
0000b0 7506 STRB r6,[r0,#0x14]
;;;507 cardinfo->SD_csd.EraseGrSize = (tmp & 0x40) >> 6;
0000b2 f3c21680 UBFX r6,r2,#6,#1
0000b6 7546 STRB r6,[r0,#0x15]
;;;508 cardinfo->SD_csd.EraseGrMul = (tmp & 0x3F) << 1;
0000b8 0692 LSLS r2,r2,#26
0000ba 0e52 LSRS r2,r2,#25
0000bc 7582 STRB r2,[r0,#0x16]
;;;509
;;;510 /* Byte 11 */
;;;511 tmp = (u8)(CSD_Tab[2] & 0x000000FF);
;;;512 cardinfo->SD_csd.EraseGrMul |= (tmp & 0x80) >> 7;
0000be 7d82 LDRB r2,[r0,#0x16]
0000c0 b2c9 UXTB r1,r1 ;511
0000c2 ea4212d1 ORR r2,r2,r1,LSR #7
0000c6 7582 STRB r2,[r0,#0x16]
;;;513 cardinfo->SD_csd.WrProtectGrSize = (tmp & 0x7F);
0000c8 f001017f AND r1,r1,#0x7f
0000cc 75c1 STRB r1,[r0,#0x17]
;;;514
;;;515 /* Byte 12 */
;;;516 tmp = (u8)((CSD_Tab[3] & 0xFF000000) >> 24);
0000ce 68e2 LDR r2,[r4,#0xc] ; CSD_Tab
0000d0 0e11 LSRS r1,r2,#24
;;;517 cardinfo->SD_csd.WrProtectGrEnable = (tmp & 0x80) >> 7;
0000d2 09cc LSRS r4,r1,#7
0000d4 7604 STRB r4,[r0,#0x18]
;;;518 cardinfo->SD_csd.ManDeflECC = (tmp & 0x60) >> 5;
0000d6 f3c11441 UBFX r4,r1,#5,#2
0000da 7644 STRB r4,[r0,#0x19]
;;;519 cardinfo->SD_csd.WrSpeedFact = (tmp & 0x1C) >> 2;
0000dc f3c10482 UBFX r4,r1,#2,#3
0000e0 7684 STRB r4,[r0,#0x1a]
;;;520 cardinfo->SD_csd.MaxWrBlockLen = (tmp & 0x03) << 2;
0000e2 0789 LSLS r1,r1,#30
0000e4 0f09 LSRS r1,r1,#28
0000e6 76c1 STRB r1,[r0,#0x1b]
;;;521
;;;522 /* Byte 13 */
;;;523 tmp = (u8)((CSD_Tab[3] & 0x00FF0000) >> 16);
;;;524 cardinfo->SD_csd.MaxWrBlockLen |= (tmp & 0xC0) >> 6;
0000e8 7ec4 LDRB r4,[r0,#0x1b]
0000ea f3c24107 UBFX r1,r2,#16,#8 ;523
0000ee ea441491 ORR r4,r4,r1,LSR #6
0000f2 76c4 STRB r4,[r0,#0x1b]
;;;525 cardinfo->SD_csd.WriteBlockPaPartial = (tmp & 0x20) >> 5;
0000f4 f3c11440 UBFX r4,r1,#5,#1
0000f8 7704 STRB r4,[r0,#0x1c]
;;;526 cardinfo->SD_csd.Reserved3 = 0;
0000fa 7745 STRB r5,[r0,#0x1d]
;;;527 cardinfo->SD_csd.ContentProtectAppli = (tmp & 0x01);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -