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

📄 sdcard.txt

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