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

📄 sdcard.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:

000052  0000              DCW      0x0000
                  |L5.84|
                          DCD      0x1000f000
                  |L5.88|
                          DCD      0x40020444
                  |L5.92|
                          DCD      0x40018080

                          AREA ||i.FindSCR||, CODE, READONLY, ALIGN=2

                  FindSCR PROC
;;;2675   *******************************************************************************/
;;;2676   static SD_Error FindSCR(u16 rca, u32 *pscr)
000000  e92d5ffc          PUSH     {r2-r12,lr}
;;;2677   {
;;;2678     u32 index = 0;
000004  2400              MOVS     r4,#0
000006  460e              MOV      r6,r1                 ;2677
;;;2679     SD_Error errorstatus = SD_OK;
;;;2680     u32 tempscr[2] = {0, 0};
000008  4668              MOV      r0,sp
00000a  4621              MOV      r1,r4
00000c  4622              MOV      r2,r4
00000e  c006              STM      r0!,{r1,r2}
;;;2681   
;;;2682     /* Set Block Size To 8 Bytes */
;;;2683     /* Send CMD55 APP_CMD with argument as card's RCA */
;;;2684     SDIO_CmdInitStructure.SDIO_Argument = (u32)8;
000010  4f49              LDR      r7,|L6.312|
000012  f04f0b08          MOV      r11,#8
;;;2685     SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SET_BLOCKLEN;
000016  2010              MOVS     r0,#0x10
;;;2686     SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2687     SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;2688     SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;2689     SDIO_SendCommand(&SDIO_CmdInitStructure);
000018  e9c7b000          STRD     r11,r0,[r7,#0]
00001c  f04f0a40          MOV      r10,#0x40             ;2686
000020  e9c7a402          STRD     r10,r4,[r7,#8]
000024  f44f6880          MOV      r8,#0x400             ;2688
000028  4625              MOV      r5,r4                 ;2687
00002a  f8c78010          STR      r8,[r7,#0x10]  ; SDIO_CmdInitStructure
00002e  4638              MOV      r0,r7
000030  f7fffffe          BL       SDIO_SendCommand
;;;2690   
;;;2691     errorstatus = CmdResp1Error(SDIO_SET_BLOCKLEN);
000034  2010              MOVS     r0,#0x10
000036  f7fffffe          BL       CmdResp1Error
;;;2692   
;;;2693     if (errorstatus != SD_OK)
00003a  282a              CMP      r0,#0x2a
00003c  d133              BNE      |L6.166|
;;;2694     {
;;;2695       return(errorstatus);
;;;2696     }
;;;2697   
;;;2698     /* Send CMD55 APP_CMD with argument as card's RCA */
;;;2699     SDIO_CmdInitStructure.SDIO_Argument = (u32) RCA << 16;
00003e  483f              LDR      r0,|L6.316|
000040  46b9              MOV      r9,r7
000042  6880              LDR      r0,[r0,#8]  ; RCA
000044  0401              LSLS     r1,r0,#16
;;;2700     SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
000046  6039              STR      r1,[r7,#0]  ; SDIO_CmdInitStructure
;;;2701     SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2702     SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;2703     SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
000048  e9c7a502          STRD     r10,r5,[r7,#8]
00004c  2137              MOVS     r1,#0x37              ;2700
00004e  4638              MOV      r0,r7                 ;2699
000050  6079              STR      r1,[r7,#4]  ; SDIO_CmdInitStructure
;;;2704     SDIO_SendCommand(&SDIO_CmdInitStructure);
000052  f8c08010          STR      r8,[r0,#0x10]  ; SDIO_CmdInitStructure
000056  4647              MOV      r7,r8                 ;2703
000058  4837              LDR      r0,|L6.312|
00005a  f7fffffe          BL       SDIO_SendCommand
;;;2705   
;;;2706     errorstatus = CmdResp1Error(SDIO_APP_CMD);
00005e  2037              MOVS     r0,#0x37
000060  f7fffffe          BL       CmdResp1Error
;;;2707   
;;;2708     if (errorstatus != SD_OK)
000064  282a              CMP      r0,#0x2a
000066  d11e              BNE      |L6.166|
;;;2709     {
;;;2710       return(errorstatus);
;;;2711     }
;;;2712     SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
000068  4833              LDR      r0,|L6.312|
00006a  4935              LDR      r1,|L6.320|
00006c  3014              ADDS     r0,r0,#0x14
;;;2713     SDIO_DataInitStructure.SDIO_DataLength = 8;
;;;2714     SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_8b;
00006e  e9c01b00          STRD     r1,r11,[r0,#0]
000072  2130              MOVS     r1,#0x30
;;;2715     SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;
000074  6081              STR      r1,[r0,#8]  ; SDIO_DataInitStructure
000076  2102              MOVS     r1,#2
;;;2716     SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
;;;2717     SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
000078  e9c01503          STRD     r1,r5,[r0,#0xc]
00007c  2101              MOVS     r1,#1
;;;2718     SDIO_DataConfig(&SDIO_DataInitStructure);
00007e  6141              STR      r1,[r0,#0x14]  ; SDIO_DataInitStructure
000080  f7fffffe          BL       SDIO_DataConfig
;;;2719   
;;;2720   
;;;2721     /* Send ACMD51 SD_APP_SEND_SCR with argument as 0 */
;;;2722     SDIO_CmdInitStructure.SDIO_Argument = 0x0;
;;;2723     SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SD_APP_SEND_SCR;
000084  2133              MOVS     r1,#0x33
;;;2724     SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2725     SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
000086  e9c95100          STRD     r5,r1,[r9,#0]
;;;2726     SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;2727     SDIO_SendCommand(&SDIO_CmdInitStructure);
00008a  e9c9a502          STRD     r10,r5,[r9,#8]
00008e  482a              LDR      r0,|L6.312|
000090  f8c97010          STR      r7,[r9,#0x10]  ; SDIO_CmdInitStructure
000094  f7fffffe          BL       SDIO_SendCommand
;;;2728   
;;;2729     errorstatus = CmdResp1Error(SDIO_SD_APP_SEND_SCR);
000098  2033              MOVS     r0,#0x33
00009a  f7fffffe          BL       CmdResp1Error
00009e  4605              MOV      r5,r0
;;;2730   
;;;2731     if (errorstatus != SD_OK)
0000a0  282a              CMP      r0,#0x2a
0000a2  d00c              BEQ      |L6.190|
                  |L6.164|
;;;2732     {
;;;2733       return(errorstatus);
0000a4  4628              MOV      r0,r5
                  |L6.166|
;;;2734     }
;;;2735   
;;;2736     while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
;;;2737     {
;;;2738       if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
;;;2739       {
;;;2740         *(tempscr + index) = SDIO_ReadData();
;;;2741         index++;
;;;2742       }
;;;2743     }
;;;2744   
;;;2745     if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET)
;;;2746     {
;;;2747       SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT);
;;;2748       errorstatus = SD_DATA_TIMEOUT;
;;;2749       return(errorstatus);
;;;2750     }
;;;2751     else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET)
;;;2752     {
;;;2753       SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL);
;;;2754       errorstatus = SD_DATA_CRC_FAIL;
;;;2755       return(errorstatus);
;;;2756     }
;;;2757     else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET)
;;;2758     {
;;;2759       SDIO_ClearFlag(SDIO_FLAG_RXOVERR);
;;;2760       errorstatus = SD_RX_OVERRUN;
;;;2761       return(errorstatus);
;;;2762     }
;;;2763     else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)
;;;2764     {
;;;2765       SDIO_ClearFlag(SDIO_FLAG_STBITERR);
;;;2766       errorstatus = SD_START_BIT_ERR;
;;;2767       return(errorstatus);
;;;2768     }
;;;2769   
;;;2770     /* Clear all the static flags */
;;;2771     SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2772   
;;;2773     *(pscr + 1) = ((tempscr[0] & SD_0TO7BITS) << 24) | ((tempscr[0] & SD_8TO15BITS) << 8) | ((tempscr[0] & SD_16TO23BITS) >> 8) | ((tempscr[0] & SD_24TO31BITS) >> 24);
;;;2774   
;;;2775     *(pscr) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) | ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24);
;;;2776   
;;;2777     return(errorstatus);
;;;2778   }
0000a6  e8bd9ffc          POP      {r2-r12,pc}
                  |L6.170|
0000aa  4650              MOV      r0,r10                ;2738
0000ac  f7fffffe          BL       SDIO_GetFlagStatus
0000b0  b160              CBZ      r0,|L6.204|
0000b2  f7fffffe          BL       SDIO_ReadData
0000b6  f8470024          STR      r0,[r7,r4,LSL #2]     ;2740
0000ba  1c64              ADDS     r4,r4,#1              ;2741
0000bc  e006              B        |L6.204|
                  |L6.190|
0000be  f8df8084          LDR      r8,|L6.324|
0000c2  f44f1a00          MOV      r10,#0x200000         ;2738
0000c6  466f              MOV      r7,sp                 ;2680
0000c8  f240692a          MOV      r9,#0x62a             ;2736
                  |L6.204|
0000cc  f8d80034          LDR      r0,[r8,#0x34]         ;2736
0000d0  ea100f09          TST      r0,r9                 ;2736
0000d4  d0e9              BEQ      |L6.170|
0000d6  2008              MOVS     r0,#8                 ;2745
0000d8  f7fffffe          BL       SDIO_GetFlagStatus
0000dc  b120              CBZ      r0,|L6.232|
0000de  2008              MOVS     r0,#8                 ;2747
0000e0  f7fffffe          BL       SDIO_ClearFlag
0000e4  2004              MOVS     r0,#4                 ;2748
0000e6  e7de              B        |L6.166|
                  |L6.232|
0000e8  2002              MOVS     r0,#2                 ;2751
0000ea  f7fffffe          BL       SDIO_GetFlagStatus
0000ee  b120              CBZ      r0,|L6.250|
0000f0  2002              MOVS     r0,#2                 ;2753
0000f2  f7fffffe          BL       SDIO_ClearFlag
0000f6  2002              MOVS     r0,#2                 ;2754
0000f8  e7d5              B        |L6.166|
                  |L6.250|
0000fa  2020              MOVS     r0,#0x20              ;2757
0000fc  f7fffffe          BL       SDIO_GetFlagStatus
000100  b120              CBZ      r0,|L6.268|
000102  2020              MOVS     r0,#0x20              ;2759
000104  f7fffffe          BL       SDIO_ClearFlag
000108  2006              MOVS     r0,#6                 ;2760
00010a  e7cc              B        |L6.166|
                  |L6.268|
00010c  f44f7400          MOV      r4,#0x200             ;2763
000110  4620              MOV      r0,r4                 ;2763
000112  f7fffffe          BL       SDIO_GetFlagStatus
000116  b120              CBZ      r0,|L6.290|
000118  4620              MOV      r0,r4                 ;2765
00011a  f7fffffe          BL       SDIO_ClearFlag
00011e  2007              MOVS     r0,#7                 ;2766
000120  e7c1              B        |L6.166|
                  |L6.290|
000122  f24050ff          MOV      r0,#0x5ff             ;2771
000126  f7fffffe          BL       SDIO_ClearFlag
00012a  9800              LDR      r0,[sp,#0]            ;2773
00012c  ba00              REV      r0,r0                 ;2773
00012e  6070              STR      r0,[r6,#4]            ;2775
000130  9801              LDR      r0,[sp,#4]            ;2775
000132  ba00              REV      r0,r0                 ;2775
000134  6030              STR      r0,[r6,#0]            ;2777
000136  e7b5              B        |L6.164|
;;;2779   
                          ENDP

                  |L6.312|
                          DCD      ||.bss||+0x38
                  |L6.316|
                          DCD      ||.data||
                  |L6.320|
                          DCD      0x000fffff
                  |L6.324|
                          DCD      0x40018000

                          AREA ||i.IsCardProgramming||, CODE, READONLY, ALIGN=2

                  IsCardProgramming PROC
;;;2514   *******************************************************************************/
;;;2515   static SD_Error IsCardProgramming(u8 *pstatus)
000000  b570              PUSH     {r4-r6,lr}
;;;2516   {
000002  4604              MOV      r4,r0
;;;2517     SD_Error errorstatus = SD_OK;
;;;2518     vu32 respR1 = 0, status = 0;
;;;2519   
;;;2520     SDIO_CmdInitStructure.SDIO_Argument = (u32) RCA << 16;
000004  4840              LDR      r0,|L7.264|
000006  252a              MOVS     r5,#0x2a              ;2517
000008  6880              LDR      r0,[r0,#8]  ; RCA
00000a  0401              LSLS     r1,r0,#16
00000c  483f              LDR      r0,|L7.268|
;;;2521     SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_STATUS;
00000e  6001              STR      r1,[r0,#0]  ; SDIO_CmdInitStructure
000010  210d              MOVS     r1,#0xd
;;;2522     SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
000012  6041              STR      r1,[r0,#4]  ; SDIO_CmdInitStructure
000014  2140              MOVS     r1,#0x40
;;;2523     SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
000016  6081              STR      r1,[r0,#8]  ; SDIO_CmdInitStructure
000018  2100              MOVS     r1,#0
;;;2524     SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
00001a  60c1              STR      r1,[r0,#0xc]  ; SDIO_CmdInitStructure
00001c  f44f6180          MOV      r1,#0x400
;;;2525     SDIO_SendCommand(&SDIO_CmdInitStructure);
000020  6101              STR      r1,[r0,#0x10]  ; SDIO_CmdInitStructure
000022  f7fffffe          BL       SDIO_SendCommand
;;;2526   
;;;2527     status = SDIO->STA;
000026  493a              LDR      r1,|L7.272|
                  |L7.40|
;;;2528     while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
;;;2529     {
;;;2530       status = SDIO->STA;
000028  6b48              LDR      r0,[r1,#0x34]
00002a  f0100f45          TST      r0,#0x45              ;2528
00002e  d0fb              BEQ      |L7.40|
;;;2531     }
;;;2532   
;;;2533     if (status & SDIO_FLAG_CTIMEOUT)
000030  0741              LSLS     r1,r0,#29
000032  d502              BPL      |L7.58|
;;;2534     {
;;;2535       errorstatus = SD_CMD_RSP_TIMEOUT;
000034  2403              MOVS     r4,#3
;;;2536       SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);
000036  2004              MOVS     r0,#4
;;;2537       return(errorstatus);
000038  e003              B        |L7.66|
                  |L7.58|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -