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

📄 sdcard.txt

📁 stm32.rar
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;218      SDIO_SendCommand(&SDIO_CmdInitStructure);
000040  e9c7b003          STRD     r11,r0,[r7,#0xc]
000044  4638              MOV      r0,r7
000046  f7fffffe          BL       SDIO_SendCommand
00004a  f2427a10          MOV      r10,#0x2710
00004e  f04f092a          MOV      r9,#0x2a
000052  46d0              MOV      r8,r10
000054  e003              B        |L4.94|
000056  bf00              NOP      
                  |L4.88|
000058  f1b80801          SUBS     r8,r8,#1
00005c  d007              BEQ      |L4.110|
                  |L4.94|
00005e  2080              MOVS     r0,#0x80
000060  f7fffffe          BL       SDIO_GetFlagStatus
000064  2800              CMP      r0,#0
000066  d0f7              BEQ      |L4.88|
000068  f1b80f00          CMP      r8,#0
00006c  d101              BNE      |L4.114|
                  |L4.110|
00006e  2003              MOVS     r0,#3
000070  e004              B        |L4.124|
                  |L4.114|
000072  f24050ff          MOV      r0,#0x5ff
000076  f7fffffe          BL       SDIO_ClearFlag
00007a  4648              MOV      r0,r9
                  |L4.124|
;;;219    
;;;220      errorstatus = CmdError();
;;;221    
;;;222      if (errorstatus != SD_OK)
00007c  282a              CMP      r0,#0x2a
00007e  d178              BNE      |L4.370|
;;;223      {
;;;224        /* CMD Response TimeOut (wait for CMDSENT flag) */
;;;225        return(errorstatus);
;;;226      }
;;;227    
;;;228      /* CMD8: SEND_IF_COND --------------------------------------------------------*/
;;;229      /* Send CMD8 to verify SD card interface operating condition */
;;;230      /* Argument: - [31:12]: Reserved (shall be set to '0')
;;;231                   - [11:8]: Supply Voltage (VHS) 0x1 (Range: 2.7-3.6 V)
;;;232                   - [7:0]: Check Pattern (recommended 0xAA) */
;;;233      /* CMD Response: R7 */
;;;234      SDIO_CmdInitStructure.SDIO_Argument = SD_CHECK_PATTERN;
000080  f44f70d5          MOV      r0,#0x1aa
;;;235      SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SEND_IF_COND;
000084  6038              STR      r0,[r7,#0]  ; SDIO_CmdInitStructure
;;;236      SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;237      SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;238      SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
000086  f44f6980          MOV      r9,#0x400
;;;239      SDIO_SendCommand(&SDIO_CmdInitStructure);
00008a  e9c7b903          STRD     r11,r9,[r7,#0xc]
00008e  2008              MOVS     r0,#8                 ;235
000090  f04f0840          MOV      r8,#0x40              ;236
000094  e9c70801          STRD     r0,r8,[r7,#4]
000098  4847              LDR      r0,|L4.440|
00009a  3018              ADDS     r0,r0,#0x18
00009c  f7fffffe          BL       SDIO_SendCommand
0000a0  4650              MOV      r0,r10
0000a2  222a              MOVS     r2,#0x2a
0000a4  f8dfa114          LDR      r10,|L4.444|
0000a8  e000              B        |L4.172|
                  |L4.170|
0000aa  1e40              SUBS     r0,r0,#1
                  |L4.172|
0000ac  f8da1034          LDR      r1,[r10,#0x34]
0000b0  f0110f45          TST      r1,#0x45
0000b4  d102              BNE      |L4.188|
0000b6  2800              CMP      r0,#0
0000b8  d1f7              BNE      |L4.170|
0000ba  e002              B        |L4.194|
                  |L4.188|
0000bc  b108              CBZ      r0,|L4.194|
0000be  0748              LSLS     r0,r1,#29
0000c0  d506              BPL      |L4.208|
                  |L4.194|
0000c2  2203              MOVS     r2,#3
0000c4  2004              MOVS     r0,#4
0000c6  9200              STR      r2,[sp,#0]
0000c8  f7fffffe          BL       SDIO_ClearFlag
0000cc  9a00              LDR      r2,[sp,#0]
0000ce  e002              B        |L4.214|
                  |L4.208|
0000d0  0648              LSLS     r0,r1,#25
0000d2  d500              BPL      |L4.214|
0000d4  222a              MOVS     r2,#0x2a
                  |L4.214|
;;;240    
;;;241      errorstatus = CmdResp7Error();
;;;242    
;;;243      if (errorstatus == SD_OK)
0000d6  2a2a              CMP      r2,#0x2a
0000d8  d101              BNE      |L4.222|
;;;244      {
;;;245        SDType = SD_HIGH_CAPACITY; /* SD Card 2.0 */
0000da  0755              LSLS     r5,r2,#29
0000dc  e00d              B        |L4.250|
                  |L4.222|
;;;246      }
;;;247      else
;;;248      {
;;;249        /* CMD55 */
;;;250        SDIO_CmdInitStructure.SDIO_Argument = 0x00;
;;;251        SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
0000de  2037              MOVS     r0,#0x37
;;;252        SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;253        SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
0000e0  e9c7b000          STRD     r11,r0,[r7,#0]
;;;254        SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;255        SDIO_SendCommand(&SDIO_CmdInitStructure);
0000e4  e9c7b903          STRD     r11,r9,[r7,#0xc]
0000e8  4833              LDR      r0,|L4.440|
0000ea  f8c78008          STR      r8,[r7,#8]  ; SDIO_CmdInitStructure
0000ee  3018              ADDS     r0,r0,#0x18
0000f0  f7fffffe          BL       SDIO_SendCommand
;;;256        errorstatus = CmdResp1Error(SDIO_APP_CMD);
0000f4  2037              MOVS     r0,#0x37
0000f6  f7fffffe          BL       CmdResp1Error
                  |L4.250|
;;;257      }
;;;258      /* CMD55 */
;;;259      SDIO_CmdInitStructure.SDIO_Argument = 0x00;
0000fa  2000              MOVS     r0,#0
;;;260      SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
0000fc  2137              MOVS     r1,#0x37
;;;261      SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;262      SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
0000fe  e8870103          STM      r7,{r0,r1,r8}
;;;263      SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;264      SDIO_SendCommand(&SDIO_CmdInitStructure);
000102  e9c70903          STRD     r0,r9,[r7,#0xc]
000106  482c              LDR      r0,|L4.440|
000108  3018              ADDS     r0,r0,#0x18
00010a  f7fffffe          BL       SDIO_SendCommand
;;;265      errorstatus = CmdResp1Error(SDIO_APP_CMD);
00010e  2037              MOVS     r0,#0x37
000110  f7fffffe          BL       CmdResp1Error
000114  4683              MOV      r11,r0
;;;266    
;;;267      /* If errorstatus is Command TimeOut, it is a MMC card */
;;;268      /* If errorstatus is SD_OK it is a SD card: SD card 2.0 (voltage range mismatch)
;;;269         or SD card 1.x */
;;;270      if (errorstatus == SD_OK)
000116  282a              CMP      r0,#0x2a
000118  d14c              BNE      |L4.436|
00011a  e037              B        |L4.396|
                  |L4.284|
;;;271      {
;;;272        /* SD CARD */
;;;273        /* Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */
;;;274        while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL))
;;;275        {
;;;276    
;;;277          /* SEND CMD55 APP_CMD with RCA as 0 */
;;;278          SDIO_CmdInitStructure.SDIO_Argument = 0x00;
00011c  2600              MOVS     r6,#0
;;;279          SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
00011e  2037              MOVS     r0,#0x37
;;;280          SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;281          SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
000120  e9c76000          STRD     r6,r0,[r7,#0]
;;;282          SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;283          SDIO_SendCommand(&SDIO_CmdInitStructure);
000124  e9c76903          STRD     r6,r9,[r7,#0xc]
000128  4823              LDR      r0,|L4.440|
00012a  f8c78008          STR      r8,[r7,#8]  ; SDIO_CmdInitStructure
00012e  3018              ADDS     r0,r0,#0x18
000130  f7fffffe          BL       SDIO_SendCommand
;;;284    
;;;285          errorstatus = CmdResp1Error(SDIO_APP_CMD);
000134  2037              MOVS     r0,#0x37
000136  f7fffffe          BL       CmdResp1Error
;;;286    
;;;287          if (errorstatus != SD_OK)
00013a  282a              CMP      r0,#0x2a
00013c  d130              BNE      |L4.416|
;;;288          {
;;;289            return(errorstatus);
;;;290          }
;;;291          SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType;
00013e  4820              LDR      r0,|L4.448|
000140  4328              ORRS     r0,r0,r5
;;;292          SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SD_APP_OP_COND;
000142  6038              STR      r0,[r7,#0]  ; SDIO_CmdInitStructure
;;;293          SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;294          SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;295          SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;296          SDIO_SendCommand(&SDIO_CmdInitStructure);
000144  e9c76903          STRD     r6,r9,[r7,#0xc]
000148  2029              MOVS     r0,#0x29              ;292
00014a  e9c70801          STRD     r0,r8,[r7,#4]
00014e  481a              LDR      r0,|L4.440|
000150  3018              ADDS     r0,r0,#0x18
000152  f7fffffe          BL       SDIO_SendCommand
000156  f04f0b2a          MOV      r11,#0x2a
00015a  bf00              NOP      
                  |L4.348|
00015c  f8da0034          LDR      r0,[r10,#0x34]
000160  f0100f45          TST      r0,#0x45
000164  d0fa              BEQ      |L4.348|
000166  0740              LSLS     r0,r0,#29
000168  d504              BPL      |L4.372|
00016a  f04f0b03          MOV      r11,#3
00016e  2004              MOVS     r0,#4
000170  e002              B        |L4.376|
                  |L4.370|
000172  e015              B        |L4.416|
                  |L4.372|
000174  f24050ff          MOV      r0,#0x5ff
                  |L4.376|
000178  f7fffffe          BL       SDIO_ClearFlag
;;;297    
;;;298          errorstatus = CmdResp3Error();
;;;299          if (errorstatus != SD_OK)
00017c  f1bb0f2a          CMP      r11,#0x2a
000180  d118              BNE      |L4.436|
;;;300          {
;;;301            return(errorstatus);
;;;302          }
;;;303    
;;;304          response = SDIO_GetResponse(SDIO_RESP1);
000182  2000              MOVS     r0,#0
000184  f7fffffe          BL       SDIO_GetResponse
;;;305          validvoltage = (bool) (((response >> 31) == 1) ? 1 : 0);
000188  0fc6              LSRS     r6,r0,#31
;;;306          count++;
00018a  1c64              ADDS     r4,r4,#1
                  |L4.396|
00018c  b91e              CBNZ     r6,|L4.406|
00018e  f64f70ff          MOV      r0,#0xffff            ;274
000192  4284              CMP      r4,r0                 ;274
000194  d3c2              BCC      |L4.284|
                  |L4.406|
;;;307        }
;;;308        if (count >= SD_MAX_VOLT_TRIAL)
000196  f64f70ff          MOV      r0,#0xffff
00019a  4284              CMP      r4,r0
00019c  d302              BCC      |L4.420|
;;;309        {
;;;310          errorstatus = SD_INVALID_VOLTRANGE;
00019e  201b              MOVS     r0,#0x1b
                  |L4.416|
;;;311          return(errorstatus);
;;;312        }
;;;313    
;;;314        if (SDType == SD_HIGH_CAPACITY)
;;;315        {
;;;316          CardType = SDIO_HIGH_CAPACITY_SD_CARD;
;;;317        }
;;;318        else
;;;319        {
;;;320          CardType = SDIO_SECURE_DIGITAL_CARD;
;;;321        }
;;;322      }/* else MMC Card */
;;;323    
;;;324      return(errorstatus);
;;;325    }
0001a0  e8bd8ff8          POP      {r3-r11,pc}
                  |L4.420|
0001a4  4807              LDR      r0,|L4.452|
0001a6  f1b54f80          CMP      r5,#0x40000000        ;314
0001aa  d101              BNE      |L4.432|
0001ac  2105              MOVS     r1,#5                 ;316
0001ae  e000              B        |L4.434|
                  |L4.432|
0001b0  2101              MOVS     r1,#1                 ;320
                  |L4.434|
0001b2  6041              STR      r1,[r0,#4]            ;316  ; CardType
                  |L4.436|
0001b4  4658              MOV      r0,r11                ;324
0001b6  e7f3              B        |L4.416|
;;;326    
                          ENDP

                  |L4.440|
0001b8  00000020          DCD      ||.bss||+0x20
                  |L4.444|
0001bc  40018000          DCD      0x40018000
                  |L4.448|
0001c0  80100000          DCD      0x80100000
                  |L4.452|
0001c4  00000000          DCD      ||.data||

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

                  SD_Init PROC
;;;136    SD_Error SD_Init(void)
;;;137    {
000000  b538              PUSH     {r3-r5,lr}
000002  2101              MOVS     r1,#1
000004  2030              MOVS     r0,#0x30
000006  f7fffffe          BL       RCC_APB2PeriphClockCmd
00000a  f44f50f8          MOV      r0,#0x1f00
00000e  f8ad0000          STRH     r0,[sp,#0]
000012  2003              MOVS     r0,#3
000014  f88d0002          STRB     r0,[sp,#2]

⌨️ 快捷键说明

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