📄 sdcard.txt
字号:
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 + -