📄 sdcard.txt
字号:
;;;2538 }
;;;2539 else if (status & SDIO_FLAG_CCRCFAIL)
00003a 07c0 LSLS r0,r0,#31
00003c d005 BEQ |L7.74|
;;;2540 {
;;;2541 errorstatus = SD_CMD_CRC_FAIL;
00003e 2401 MOVS r4,#1
;;;2542 SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);
000040 4620 MOV r0,r4
|L7.66|
000042 f7fffffe BL SDIO_ClearFlag
;;;2543 return(errorstatus);
000046 4620 MOV r0,r4
;;;2544 }
;;;2545
;;;2546 status = (u32)SDIO_GetCommandResponse();
;;;2547
;;;2548 /* Check response received is of desired command */
;;;2549 if (status != SDIO_SEND_STATUS)
;;;2550 {
;;;2551 errorstatus = SD_ILLEGAL_CMD;
;;;2552 return(errorstatus);
;;;2553 }
;;;2554
;;;2555 /* Clear all the static flags */
;;;2556 SDIO_ClearFlag(SDIO_STATIC_FLAGS);
;;;2557
;;;2558
;;;2559 /* We have received response, retrieve it for analysis */
;;;2560 respR1 = SDIO_GetResponse(SDIO_RESP1);
;;;2561
;;;2562 /* Find out card status */
;;;2563 *pstatus = (u8) ((respR1 >> 9) & 0x0000000F);
;;;2564
;;;2565 if ((respR1 & SD_OCR_ERRORBITS) == SD_ALLZERO)
;;;2566 {
;;;2567 return(errorstatus);
;;;2568 }
;;;2569
;;;2570 if (respR1 & SD_OCR_ADDR_OUT_OF_RANGE)
;;;2571 {
;;;2572 return(SD_ADDR_OUT_OF_RANGE);
;;;2573 }
;;;2574
;;;2575 if (respR1 & SD_OCR_ADDR_MISALIGNED)
;;;2576 {
;;;2577 return(SD_ADDR_MISALIGNED);
;;;2578 }
;;;2579
;;;2580 if (respR1 & SD_OCR_BLOCK_LEN_ERR)
;;;2581 {
;;;2582 return(SD_BLOCK_LEN_ERR);
;;;2583 }
;;;2584
;;;2585 if (respR1 & SD_OCR_ERASE_SEQ_ERR)
;;;2586 {
;;;2587 return(SD_ERASE_SEQ_ERR);
;;;2588 }
;;;2589
;;;2590 if (respR1 & SD_OCR_BAD_ERASE_PARAM)
;;;2591 {
;;;2592 return(SD_BAD_ERASE_PARAM);
;;;2593 }
;;;2594
;;;2595 if (respR1 & SD_OCR_WRITE_PROT_VIOLATION)
;;;2596 {
;;;2597 return(SD_WRITE_PROT_VIOLATION);
;;;2598 }
;;;2599
;;;2600 if (respR1 & SD_OCR_LOCK_UNLOCK_FAILED)
;;;2601 {
;;;2602 return(SD_LOCK_UNLOCK_FAILED);
;;;2603 }
;;;2604
;;;2605 if (respR1 & SD_OCR_COM_CRC_FAILED)
;;;2606 {
;;;2607 return(SD_COM_CRC_FAILED);
;;;2608 }
;;;2609
;;;2610 if (respR1 & SD_OCR_ILLEGAL_CMD)
;;;2611 {
;;;2612 return(SD_ILLEGAL_CMD);
;;;2613 }
;;;2614
;;;2615 if (respR1 & SD_OCR_CARD_ECC_FAILED)
;;;2616 {
;;;2617 return(SD_CARD_ECC_FAILED);
;;;2618 }
;;;2619
;;;2620 if (respR1 & SD_OCR_CC_ERROR)
;;;2621 {
;;;2622 return(SD_CC_ERROR);
;;;2623 }
;;;2624
;;;2625 if (respR1 & SD_OCR_GENERAL_UNKNOWN_ERROR)
;;;2626 {
;;;2627 return(SD_GENERAL_UNKNOWN_ERROR);
;;;2628 }
;;;2629
;;;2630 if (respR1 & SD_OCR_STREAM_READ_UNDERRUN)
;;;2631 {
;;;2632 return(SD_STREAM_READ_UNDERRUN);
;;;2633 }
;;;2634
;;;2635 if (respR1 & SD_OCR_STREAM_WRITE_OVERRUN)
;;;2636 {
;;;2637 return(SD_STREAM_WRITE_OVERRUN);
;;;2638 }
;;;2639
;;;2640 if (respR1 & SD_OCR_CID_CSD_OVERWRIETE)
;;;2641 {
;;;2642 return(SD_CID_CSD_OVERWRITE);
;;;2643 }
;;;2644
;;;2645 if (respR1 & SD_OCR_WP_ERASE_SKIP)
;;;2646 {
;;;2647 return(SD_WP_ERASE_SKIP);
;;;2648 }
;;;2649
;;;2650 if (respR1 & SD_OCR_CARD_ECC_DISABLED)
;;;2651 {
;;;2652 return(SD_CARD_ECC_DISABLED);
;;;2653 }
;;;2654
;;;2655 if (respR1 & SD_OCR_ERASE_RESET)
;;;2656 {
;;;2657 return(SD_ERASE_RESET);
;;;2658 }
;;;2659
;;;2660 if (respR1 & SD_OCR_AKE_SEQ_ERROR)
;;;2661 {
;;;2662 return(SD_AKE_SEQ_ERROR);
;;;2663 }
;;;2664
;;;2665 return(errorstatus);
;;;2666 }
000048 bd70 POP {r4-r6,pc}
|L7.74|
00004a f7fffffe BL SDIO_GetCommandResponse
00004e 280d CMP r0,#0xd ;2549
000050 d12e BNE |L7.176|
000052 f24050ff MOV r0,#0x5ff ;2556
000056 f7fffffe BL SDIO_ClearFlag
00005a 2000 MOVS r0,#0 ;2560
00005c f7fffffe BL SDIO_GetResponse
000060 f3c02143 UBFX r1,r0,#9,#4 ;2563
000064 7021 STRB r1,[r4,#0] ;2563
000066 492b LDR r1,|L7.276|
000068 4208 TST r0,r1 ;2565
00006a d04b BEQ |L7.260|
00006c 2800 CMP r0,#0 ;2570
00006e da01 BGE |L7.116|
000070 201c MOVS r0,#0x1c ;2572
000072 bd70 POP {r4-r6,pc}
|L7.116|
000074 0041 LSLS r1,r0,#1 ;2575
000076 d501 BPL |L7.124|
000078 2009 MOVS r0,#9 ;2577
00007a bd70 POP {r4-r6,pc}
|L7.124|
00007c 0081 LSLS r1,r0,#2
00007e d501 BPL |L7.132|
000080 200a MOVS r0,#0xa ;2582
000082 bd70 POP {r4-r6,pc}
|L7.132|
000084 00c1 LSLS r1,r0,#3
000086 d501 BPL |L7.140|
000088 200b MOVS r0,#0xb ;2587
00008a bd70 POP {r4-r6,pc}
|L7.140|
00008c 0101 LSLS r1,r0,#4
00008e d501 BPL |L7.148|
000090 200c MOVS r0,#0xc ;2592
000092 bd70 POP {r4-r6,pc}
|L7.148|
000094 0141 LSLS r1,r0,#5 ;2595
000096 d501 BPL |L7.156|
000098 200d MOVS r0,#0xd ;2597
00009a bd70 POP {r4-r6,pc}
|L7.156|
00009c 01c1 LSLS r1,r0,#7 ;2600
00009e d501 BPL |L7.164|
0000a0 200e MOVS r0,#0xe ;2602
0000a2 bd70 POP {r4-r6,pc}
|L7.164|
0000a4 0201 LSLS r1,r0,#8 ;2605
0000a6 d501 BPL |L7.172|
0000a8 200f MOVS r0,#0xf ;2607
0000aa bd70 POP {r4-r6,pc}
|L7.172|
0000ac 0241 LSLS r1,r0,#9 ;2610
0000ae d501 BPL |L7.180|
|L7.176|
0000b0 2010 MOVS r0,#0x10 ;2612
0000b2 bd70 POP {r4-r6,pc}
|L7.180|
0000b4 0281 LSLS r1,r0,#10 ;2615
0000b6 d501 BPL |L7.188|
0000b8 2011 MOVS r0,#0x11 ;2617
0000ba bd70 POP {r4-r6,pc}
|L7.188|
0000bc 02c1 LSLS r1,r0,#11 ;2620
0000be d501 BPL |L7.196|
0000c0 2012 MOVS r0,#0x12 ;2622
0000c2 bd70 POP {r4-r6,pc}
|L7.196|
0000c4 0301 LSLS r1,r0,#12 ;2625
0000c6 d501 BPL |L7.204|
0000c8 2013 MOVS r0,#0x13 ;2627
0000ca bd70 POP {r4-r6,pc}
|L7.204|
0000cc 0341 LSLS r1,r0,#13 ;2630
0000ce d501 BPL |L7.212|
0000d0 2014 MOVS r0,#0x14 ;2632
0000d2 bd70 POP {r4-r6,pc}
|L7.212|
0000d4 0381 LSLS r1,r0,#14 ;2635
0000d6 d501 BPL |L7.220|
0000d8 2015 MOVS r0,#0x15 ;2637
0000da bd70 POP {r4-r6,pc}
|L7.220|
0000dc 03c1 LSLS r1,r0,#15 ;2640
0000de d501 BPL |L7.228|
0000e0 2016 MOVS r0,#0x16 ;2642
0000e2 bd70 POP {r4-r6,pc}
|L7.228|
0000e4 0401 LSLS r1,r0,#16 ;2645
0000e6 d501 BPL |L7.236|
0000e8 2017 MOVS r0,#0x17 ;2647
0000ea bd70 POP {r4-r6,pc}
|L7.236|
0000ec 0441 LSLS r1,r0,#17 ;2650
0000ee d501 BPL |L7.244|
0000f0 2018 MOVS r0,#0x18 ;2652
0000f2 bd70 POP {r4-r6,pc}
|L7.244|
0000f4 0481 LSLS r1,r0,#18 ;2655
0000f6 d501 BPL |L7.252|
0000f8 2019 MOVS r0,#0x19 ;2657
0000fa bd70 POP {r4-r6,pc}
|L7.252|
0000fc 0700 LSLS r0,r0,#28 ;2660
0000fe d501 BPL |L7.260|
000100 201a MOVS r0,#0x1a ;2662
000102 bd70 POP {r4-r6,pc}
|L7.260|
000104 4628 MOV r0,r5 ;2665
000106 bd70 POP {r4-r6,pc}
;;;2667
ENDP
|L7.264|
DCD ||.data||
|L7.268|
DCD ||.bss||+0x38
|L7.272|
DCD 0x40018000
|L7.276|
DCD 0xfdffe008
AREA ||i.SDEnWideBus||, CODE, READONLY, ALIGN=2
SDEnWideBus PROC
;;;2397 *******************************************************************************/
;;;2398 static SD_Error SDEnWideBus(FunctionalState NewState)
000000 e92d47fc PUSH {r2-r10,lr}
;;;2399 {
000004 4681 MOV r9,r0
;;;2400 SD_Error errorstatus = SD_OK;
;;;2401
;;;2402 u32 scr[2] = {0, 0};
000006 2100 MOVS r1,#0
000008 4668 MOV r0,sp
00000a 460a MOV r2,r1
00000c c006 STM r0!,{r1,r2}
;;;2403
;;;2404 if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED)
00000e 4608 MOV r0,r1
000010 f7fffffe BL SDIO_GetResponse
000014 0180 LSLS r0,r0,#6
000016 d502 BPL |L8.30|
;;;2405 {
;;;2406 errorstatus = SD_LOCK_UNLOCK_FAILED;
000018 200e MOVS r0,#0xe
|L8.26|
;;;2407 return(errorstatus);
;;;2408 }
;;;2409
;;;2410 /* Get SCR Register */
;;;2411 errorstatus = FindSCR(RCA, scr);
;;;2412
;;;2413 if (errorstatus != SD_OK)
;;;2414 {
;;;2415 return(errorstatus);
;;;2416 }
;;;2417
;;;2418 /* If wide bus operation to be enabled */
;;;2419 if (NewState == ENABLE)
;;;2420 {
;;;2421 /* If requested card supports wide bus operation */
;;;2422 if ((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO)
;;;2423 {
;;;2424 /* Send CMD55 APP_CMD with argument as card's RCA.*/
;;;2425 SDIO_CmdInitStructure.SDIO_Argument = (u32) RCA << 16;
;;;2426 SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_APP_CMD;
;;;2427 SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
;;;2428 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -