📄 sdcard.txt
字号:
0000fc f0010101 AND r1,r1,#1
000100 7781 STRB r1,[r0,#0x1e]
;;;528
;;;529 /* Byte 14 */
;;;530 tmp = (u8)((CSD_Tab[3] & 0x0000FF00) >> 8);
000102 f3c22107 UBFX r1,r2,#8,#8
;;;531 cardinfo->SD_csd.FileFormatGrouop = (tmp & 0x80) >> 7;
000106 09cc LSRS r4,r1,#7
000108 77c4 STRB r4,[r0,#0x1f]
;;;532 cardinfo->SD_csd.CopyFlag = (tmp & 0x40) >> 6;
00010a f3c11480 UBFX r4,r1,#6,#1
00010e f8804020 STRB r4,[r0,#0x20]
;;;533 cardinfo->SD_csd.PermWrProtect = (tmp & 0x20) >> 5;
000112 f3c11440 UBFX r4,r1,#5,#1
000116 f8804021 STRB r4,[r0,#0x21]
;;;534 cardinfo->SD_csd.TempWrProtect = (tmp & 0x10) >> 4;
00011a f3c11400 UBFX r4,r1,#4,#1
00011e f8804022 STRB r4,[r0,#0x22]
;;;535 cardinfo->SD_csd.FileFormat = (tmp & 0x0C) >> 2;
000122 f3c10481 UBFX r4,r1,#2,#2
000126 f8804023 STRB r4,[r0,#0x23]
;;;536 cardinfo->SD_csd.ECC = (tmp & 0x03);
00012a f0010103 AND r1,r1,#3
00012e f8801024 STRB r1,[r0,#0x24]
;;;537
;;;538 /* Byte 15 */
;;;539 tmp = (u8)(CSD_Tab[3] & 0x000000FF);
;;;540 cardinfo->SD_csd.CSD_CRC = (tmp & 0xFE) >> 1;
000132 f3c20146 UBFX r1,r2,#1,#7
000136 f8801025 STRB r1,[r0,#0x25]
;;;541 cardinfo->SD_csd.Reserved4 = 1;
00013a 2401 MOVS r4,#1
00013c f8804026 STRB r4,[r0,#0x26]
;;;542
;;;543
;;;544 /* Byte 0 */
;;;545 tmp = (u8)((CID_Tab[0] & 0xFF000000) >> 24);
000140 4a2a LDR r2,|L7.492|
000142 3210 ADDS r2,r2,#0x10
000144 6811 LDR r1,[r2,#0] ; CID_Tab
000146 0e0d LSRS r5,r1,#24
;;;546 cardinfo->SD_cid.ManufacturerID = tmp;
000148 f8805028 STRB r5,[r0,#0x28]
;;;547
;;;548 /* Byte 1 */
;;;549 tmp = (u8)((CID_Tab[0] & 0x00FF0000) >> 16);
00014c f3c14507 UBFX r5,r1,#16,#8
;;;550 cardinfo->SD_cid.OEM_AppliID = tmp << 8;
000150 022d LSLS r5,r5,#8
000152 8545 STRH r5,[r0,#0x2a]
;;;551
;;;552 /* Byte 2 */
;;;553 tmp = (u8)((CID_Tab[0] & 0x000000FF00) >> 8);
;;;554 cardinfo->SD_cid.OEM_AppliID |= tmp;
000154 8d46 LDRH r6,[r0,#0x2a]
000156 f3c12507 UBFX r5,r1,#8,#8 ;553
00015a 432e ORRS r6,r6,r5
00015c 8546 STRH r6,[r0,#0x2a]
;;;555
;;;556 /* Byte 3 */
;;;557 tmp = (u8)(CID_Tab[0] & 0x000000FF);
;;;558 cardinfo->SD_cid.ProdName1 = tmp << 24;
00015e 0609 LSLS r1,r1,#24
000160 62c1 STR r1,[r0,#0x2c]
;;;559
;;;560 /* Byte 4 */
;;;561 tmp = (u8)((CID_Tab[1] & 0xFF000000) >> 24);
000162 6851 LDR r1,[r2,#4] ; CID_Tab
;;;562 cardinfo->SD_cid.ProdName1 |= tmp << 16;
000164 6ac6 LDR r6,[r0,#0x2c]
000166 0e0d LSRS r5,r1,#24 ;561
000168 ea464505 ORR r5,r6,r5,LSL #16
00016c 62c5 STR r5,[r0,#0x2c]
;;;563
;;;564 /* Byte 5 */
;;;565 tmp = (u8)((CID_Tab[1] & 0x00FF0000) >> 16);
;;;566 cardinfo->SD_cid.ProdName1 |= tmp << 8;
00016e 6ac6 LDR r6,[r0,#0x2c]
000170 f3c14507 UBFX r5,r1,#16,#8 ;565
000174 ea462505 ORR r5,r6,r5,LSL #8
000178 62c5 STR r5,[r0,#0x2c]
;;;567
;;;568 /* Byte 6 */
;;;569 tmp = (u8)((CID_Tab[1] & 0x0000FF00) >> 8);
;;;570 cardinfo->SD_cid.ProdName1 |= tmp;
00017a 6ac6 LDR r6,[r0,#0x2c]
00017c f3c12507 UBFX r5,r1,#8,#8 ;569
000180 432e ORRS r6,r6,r5
000182 62c6 STR r6,[r0,#0x2c]
;;;571
;;;572 /* Byte 7 */
;;;573 tmp = (u8)(CID_Tab[1] & 0x000000FF);
;;;574 cardinfo->SD_cid.ProdName2 = tmp;
000184 f8801030 STRB r1,[r0,#0x30]
;;;575
;;;576 /* Byte 8 */
;;;577 tmp = (u8)((CID_Tab[2] & 0xFF000000) >> 24);
000188 6891 LDR r1,[r2,#8] ; CID_Tab
00018a 0e0d LSRS r5,r1,#24
;;;578 cardinfo->SD_cid.ProdRev = tmp;
00018c f8805031 STRB r5,[r0,#0x31]
;;;579
;;;580 /* Byte 9 */
;;;581 tmp = (u8)((CID_Tab[2] & 0x00FF0000) >> 16);
000190 f3c14507 UBFX r5,r1,#16,#8
;;;582 cardinfo->SD_cid.ProdSN = tmp << 24;
000194 062d LSLS r5,r5,#24
000196 6345 STR r5,[r0,#0x34]
;;;583
;;;584 /* Byte 10 */
;;;585 tmp = (u8)((CID_Tab[2] & 0x0000FF00) >> 8);
;;;586 cardinfo->SD_cid.ProdSN |= tmp << 16;
000198 6b46 LDR r6,[r0,#0x34]
00019a f3c12507 UBFX r5,r1,#8,#8 ;585
00019e ea464505 ORR r5,r6,r5,LSL #16
0001a2 6345 STR r5,[r0,#0x34]
;;;587
;;;588 /* Byte 11 */
;;;589 tmp = (u8)(CID_Tab[2] & 0x000000FF);
;;;590 cardinfo->SD_cid.ProdSN |= tmp << 8;
0001a4 6b45 LDR r5,[r0,#0x34]
0001a6 b2c9 UXTB r1,r1 ;589
0001a8 ea452101 ORR r1,r5,r1,LSL #8
0001ac 6341 STR r1,[r0,#0x34]
;;;591
;;;592 /* Byte 12 */
;;;593 tmp = (u8)((CID_Tab[3] & 0xFF000000) >> 24);
;;;594 cardinfo->SD_cid.ProdSN |= tmp;
0001ae 68d1 LDR r1,[r2,#0xc] ; CID_Tab
0001b0 6b45 LDR r5,[r0,#0x34]
0001b2 ea456511 ORR r5,r5,r1,LSR #24
0001b6 6345 STR r5,[r0,#0x34]
;;;595
;;;596 /* Byte 13 */
;;;597 tmp = (u8)((CID_Tab[3] & 0x00FF0000) >> 16);
;;;598 cardinfo->SD_cid.Reserved1 |= (tmp & 0xF0) >> 4;
0001b8 f8905038 LDRB r5,[r0,#0x38]
0001bc f3c14207 UBFX r2,r1,#16,#8 ;597
0001c0 ea451512 ORR r5,r5,r2,LSR #4
0001c4 f8805038 STRB r5,[r0,#0x38]
;;;599 cardinfo->SD_cid.ManufactDate = (tmp & 0x0F) << 8;
0001c8 0712 LSLS r2,r2,#28
0001ca 0d12 LSRS r2,r2,#20
0001cc 8742 STRH r2,[r0,#0x3a]
;;;600
;;;601 /* Byte 14 */
;;;602 tmp = (u8)((CID_Tab[3] & 0x0000FF00) >> 8);
;;;603 cardinfo->SD_cid.ManufactDate |= tmp;
0001ce 8f45 LDRH r5,[r0,#0x3a]
0001d0 f3c12207 UBFX r2,r1,#8,#8 ;602
0001d4 4315 ORRS r5,r5,r2
0001d6 8745 STRH r5,[r0,#0x3a]
;;;604
;;;605 /* Byte 15 */
;;;606 tmp = (u8)(CID_Tab[3] & 0x000000FF);
;;;607 cardinfo->SD_cid.CID_CRC = (tmp & 0xFE) >> 1;
0001d8 f3c10146 UBFX r1,r1,#1,#7
0001dc f880103c STRB r1,[r0,#0x3c]
;;;608 cardinfo->SD_cid.Reserved2 = 1;
0001e0 f880403d STRB r4,[r0,#0x3d]
;;;609
;;;610 return(errorstatus);
0001e4 4618 MOV r0,r3
;;;611 }
0001e6 bd70 POP {r4-r6,pc}
;;;612
ENDP
|L7.488|
0001e8 00000000 DCD ||.data||
|L7.492|
0001ec 00000000 DCD ||.bss||
AREA ||i.FindSCR||, CODE, READONLY, ALIGN=2
FindSCR PROC
;;;2676 static SD_Error FindSCR(u16 rca, u32 *pscr)
;;;2677 {
000000 e92d5ffc PUSH {r2-r12,lr}
;;;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 466f MOV r7,sp
00000a 4620 MOV r0,r4
00000c 4621 MOV r1,r4
00000e e8870003 STM r7,{r0,r1}
;;;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;
000012 f8df8120 LDR r8,|L8.308|
;;;2685 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_SET_BLOCKLEN;
;;;2686 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2687 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;2688 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
000016 f44f6b80 MOV r11,#0x400
;;;2689 SDIO_SendCommand(&SDIO_CmdInitStructure);
00001a e9c84b03 STRD r4,r11,[r8,#0xc]
00001e 2010 MOVS r0,#0x10 ;2685
000020 f04f0940 MOV r9,#0x40 ;2686
000024 e9c80901 STRD r0,r9,[r8,#4]
000028 2508 MOVS r5,#8 ;2684
00002a 46a2 MOV r10,r4 ;2687
00002c f8c85000 STR r5,[r8,#0] ; SDIO_CmdInitStructure
000030 4640 MOV r0,r8
000032 f7fffffe BL SDIO_SendCommand
;;;2690
;;;2691 errorstatus = CmdResp1Error(SDIO_SET_BLOCKLEN);
000036 2010 MOVS r0,#0x10
000038 f7fffffe BL CmdResp1Error
;;;2692
;;;2693 if (errorstatus != SD_OK)
00003c 282a CMP r0,#0x2a
00003e d130 BNE |L8.162|
;;;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;
000040 483d LDR r0,|L8.312|
000042 6880 LDR r0,[r0,#8] ; RCA
000044 0400 LSLS r0,r0,#16
;;;2700 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
000046 f8c80000 STR r0,[r8,#0] ; SDIO_CmdInitStructure
00004a 2037 MOVS r0,#0x37
;;;2701 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2702 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
;;;2703 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;2704 SDIO_SendCommand(&SDIO_CmdInitStructure);
00004c e9c8ab03 STRD r10,r11,[r8,#0xc]
000050 e9c80901 STRD r0,r9,[r8,#4]
000054 4640 MOV r0,r8
000056 f7fffffe BL SDIO_SendCommand
;;;2705
;;;2706 errorstatus = CmdResp1Error(SDIO_APP_CMD);
00005a 2037 MOVS r0,#0x37
00005c f7fffffe BL CmdResp1Error
;;;2707
;;;2708 if (errorstatus != SD_OK)
000060 282a CMP r0,#0x2a
000062 d11e BNE |L8.162|
;;;2709 {
;;;2710 return(errorstatus);
;;;2711 }
;;;2712 SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;
000064 4935 LDR r1,|L8.316|
000066 f1080014 ADD r0,r8,#0x14
;;;2713 SDIO_DataInitStructure.SDIO_DataLength = 8;
;;;2714 SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_8b;
00006a e9c01500 STRD r1,r5,[r0,#0]
00006e 2130 MOVS r1,#0x30
;;;2715 SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;
000070 6081 STR r1,[r0,#8] ; SDIO_DataInitStructure
000072 2102 MOVS r1,#2
;;;2716 SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;
;;;2717 SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
000074 e9c01a03 STRD r1,r10,[r0,#0xc]
000078 2101 MOVS r1,#1
;;;2718 SDIO_DataConfig(&SDIO_DataInitStructure);
00007a 6141 STR r1,[r0,#0x14] ; SDIO_DataInitStructure
00007c 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;
000080 2033 MOVS r0,#0x33
;;;2724 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2725 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
000082 e9c8a000 STRD r10,r0,[r8,#0]
;;;2726 SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
;;;2727 SDIO_SendCommand(&SDIO_CmdInitStructure);
000086 e9c8ab03 STRD r10,r11,[r8,#0xc]
00008a 4640 MOV r0,r8
00008c f8c89008 STR r9,[r8,#8] ; SDIO_CmdInitStructure
000090 f7fffffe BL SDIO_SendCommand
;;;2728
;;;2729 errorstatus = CmdResp1Error(SDIO_SD_APP_SEND_SCR);
000094 2033 MOVS r0,#0x33
000096 f7fffffe BL CmdResp1Error
00009a 4605 MOV r5,r0
;;;2730
;;;2731 if (errorstatus != SD_OK)
00009c 282a CMP r0,#0x2a
00009e d00c BEQ |L8.186|
|L8.160|
;;;2732 {
;;;2733 return(errorstatus);
0000a0 4628 MOV r0,r5
|L8.162|
;;;2734
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -