⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdcard.txt

📁 stm32.rar
💻 TXT
📖 第 1 页 / 共 5 页
字号:
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 + -