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

📄 sdmmc.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:
|??_C@_1EA@FIDN@?$AAt?$AAr?$AA?5?$AAt?$AAo?$AA?5?$AAa?$AAs?$AAs?$AAs?$AAi?$AAg?$AAn?$AA?5?$AAR?$AAC?$AAA?$AA?5?$AA?5?$AAw@| DCB "t"
	DCB	0x0, "r", 0x0, " ", 0x0, "t", 0x0, "o", 0x0, " ", 0x0, "a"
	DCB	0x0, "s", 0x0, "s", 0x0, "s", 0x0, "i", 0x0, "g", 0x0, "n"
	DCB	0x0, " ", 0x0, "R", 0x0, "C", 0x0, "A", 0x0, " ", 0x0, " "
	DCB	0x0, "w", 0x0, "i", 0x0, "t", 0x0, "h", 0x0, " ", 0x0, "I"
	DCB	0x0, "D", 0x0, " ", 0x0, "%", 0x0, "d", 0x0, 0xd, 0x0, 0xa
	DCB	0x0, 0x0, 0x0				; `string'

  00000			 AREA	 |.rdata| { |??_C@_1FE@BKCB@?$AAa?$AAf?$AAt?$AAe?$AAr?$AA?5?$AAs?$AAu?$AAc?$AAc?$AAe?$AAs?$AAs?$AAf?$AAu?$AAl?$AAl?$AAy?$AA?5?$AAa@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FE@BKCB@?$AAa?$AAf?$AAt?$AAe?$AAr?$AA?5?$AAs?$AAu?$AAc?$AAc?$AAe?$AAs?$AAs?$AAf?$AAu?$AAl?$AAl?$AAy?$AA?5?$AAa@| DCB "a"
	DCB	0x0, "f", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, " ", 0x0, "s"
	DCB	0x0, "u", 0x0, "c", 0x0, "c", 0x0, "e", 0x0, "s", 0x0, "s"
	DCB	0x0, "f", 0x0, "u", 0x0, "l", 0x0, "l", 0x0, "y", 0x0, " "
	DCB	0x0, "a", 0x0, "s", 0x0, "s", 0x0, "i", 0x0, "g", 0x0, "n"
	DCB	0x0, " ", 0x0, "R", 0x0, "C", 0x0, "A", 0x0, ",", 0x0, " "
	DCB	0x0, "c", 0x0, "o", 0x0, "n", 0x0, "t", 0x0, "i", 0x0, "n"
	DCB	0x0, "u", 0x0, "e", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_1EM@DOL@?$AAm?$AAm?$AAc?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AA?9?$AA?9?$AA?5?$AAI?$AAt?$AA?5?$AAe?$AAn?$AAt?$AAe?$AAr@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EM@DOL@?$AAm?$AAm?$AAc?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AA?9?$AA?9?$AA?5?$AAI?$AAt?$AA?5?$AAe?$AAn?$AAt?$AAe?$AAr@| DCB "m"
	DCB	0x0, "m", 0x0, "c", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "e"
	DCB	0x0, "t", 0x0, " ", 0x0, "-", 0x0, "-", 0x0, " ", 0x0, "I"
	DCB	0x0, "t", 0x0, " ", 0x0, "e", 0x0, "n", 0x0, "t", 0x0, "e"
	DCB	0x0, "r", 0x0, "e", 0x0, "d", 0x0, " ", 0x0, "S", 0x0, "D"
	DCB	0x0, " ", 0x0, "C", 0x0, "a", 0x0, "r", 0x0, "d", 0x0, " "
	DCB	0x0, "a", 0x0, "r", 0x0, "e", 0x0, "a", 0x0, 0xd, 0x0, 0xa
	DCB	0x0, 0x0, 0x0				; `string'

  00000			 AREA	 |.rdata| { |??_C@_1CC@MGHJ@?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAs?$AA?5?$AAr?$AAe?$AAa?$AAd?$AAy?$AA?$CB?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CC@MGHJ@?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAs?$AA?5?$AAr?$AAe?$AAa?$AAd?$AAy?$AA?$CB?$AA?$AN?$AA?6?$AA?$AA@| DCB "c"
	DCB	0x0, "a", 0x0, "r", 0x0, "d", 0x0, " ", 0x0, "i", 0x0, "s"
	DCB	0x0, " ", 0x0, "r", 0x0, "e", 0x0, "a", 0x0, "d", 0x0, "y"
	DCB	0x0, "!", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_1EE@PPN@?$AAM?$AAM?$AAC?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AA?9?$AA?5?$AAp?$AAc?$AA?9?$AA?$DO?$AAd?$AAr?$AAi?$AAv?$AAe@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EE@PPN@?$AAM?$AAM?$AAC?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AA?9?$AA?5?$AAp?$AAc?$AA?9?$AA?$DO?$AAd?$AAr?$AAi?$AAv?$AAe@| DCB "M"
	DCB	0x0, "M", 0x0, "C", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "e"
	DCB	0x0, "t", 0x0, " ", 0x0, "-", 0x0, " ", 0x0, "p", 0x0, "c"
	DCB	0x0, "-", 0x0, ">", 0x0, "d", 0x0, "r", 0x0, "i", 0x0, "v"
	DCB	0x0, "e", 0x0, "-", 0x0, ">", 0x0, "R", 0x0, "C", 0x0, "A"
	DCB	0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "%", 0x0, "d"
	DCB	0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0	; `string'

  00000			 AREA	 |.rdata| { |??_C@_1DK@LFHM@?$AAn?$AAo?$AAw?$AA?0?$AA?5?$AAt?$AAh?$AAe?$AA?5?$AAn?$AAu?$AAm?$AAb?$AAe?$AAr?$AA?5?$AAo?$AAf?$AA?5?$AAi@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DK@LFHM@?$AAn?$AAo?$AAw?$AA?0?$AA?5?$AAt?$AAh?$AAe?$AA?5?$AAn?$AAu?$AAm?$AAb?$AAe?$AAr?$AA?5?$AAo?$AAf?$AA?5?$AAi@| DCB "n"
	DCB	0x0, "o", 0x0, "w", 0x0, ",", 0x0, " ", 0x0, "t", 0x0, "h"
	DCB	0x0, "e", 0x0, " ", 0x0, "n", 0x0, "u", 0x0, "m", 0x0, "b"
	DCB	0x0, "e", 0x0, "r", 0x0, " ", 0x0, "o", 0x0, "f", 0x0, " "
	DCB	0x0, "i", 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "%"
	DCB	0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_1FG@OKKD@?$AAa?$AAs?$AAs?$AAs?$AAi?$AAg?$AAn?$AA?5?$AAR?$AAC?$AAA?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAs@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FG@OKKD@?$AAa?$AAs?$AAs?$AAs?$AAi?$AAg?$AAn?$AA?5?$AAR?$AAC?$AAA?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAs@| DCB "a"
	DCB	0x0, "s", 0x0, "s", 0x0, "s", 0x0, "i", 0x0, "g", 0x0, "n"
	DCB	0x0, " ", 0x0, "R", 0x0, "C", 0x0, "A", 0x0, " ", 0x0, "i"
	DCB	0x0, "s", 0x0, " ", 0x0, "n", 0x0, "o", 0x0, "t", 0x0, " "
	DCB	0x0, "s", 0x0, "u", 0x0, "c", 0x0, "e", 0x0, "s", 0x0, "s"
	DCB	0x0, "f", 0x0, "u", 0x0, "l", 0x0, "!", 0x0, " ", 0x0, "w"
	DCB	0x0, "i", 0x0, "t", 0x0, "h", 0x0, " ", 0x0, "I", 0x0, "D"
	DCB	0x0, " ", 0x0, "%", 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
	DCB	0x0					; `string'

  00000			 AREA	 |.rdata| { |??_C@_1CG@DHEP@?$AAN?$AAo?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAu?$AAn?$AAd?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CG@DHEP@?$AAN?$AAo?$AA?5?$AAc?$AAa?$AAr?$AAd?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAu?$AAn?$AAd?$AA?$AN?$AA?6?$AA?$AA@| DCB "N"
	DCB	0x0, "o", 0x0, " ", 0x0, "c", 0x0, "a", 0x0, "r", 0x0, "d"
	DCB	0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "f", 0x0, "o"
	DCB	0x0, "u", 0x0, "n", 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
	DCB	0x0					; `string'

  00000			 AREA	 |.rdata| { |??_C@_1DG@DFMO@?$AAd?$AAe?$AAv?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAl?$AAl?$AAo?$AAw?$AAi?$AAn@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DG@DFMO@?$AAd?$AAe?$AAv?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?5?$AAi?$AAs?$AA?5?$AAf?$AAo?$AAl?$AAl?$AAo?$AAw?$AAi?$AAn@| DCB "d"
	DCB	0x0, "e", 0x0, "v", 0x0, "C", 0x0, "o", 0x0, "u", 0x0, "n"
	DCB	0x0, "t", 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "f"
	DCB	0x0, "o", 0x0, "l", 0x0, "l", 0x0, "o", 0x0, "w", 0x0, "i"
	DCB	0x0, "n", 0x0, "g", 0x0, " ", 0x0, "%", 0x0, "d", 0x0, 0xd
	DCB	0x0, 0xa, 0x0, 0x0, 0x0			; `string'

  00000			 AREA	 |.rdata| { |??_C@_1EG@HFPL@?$AAm?$AAm?$AAc?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AAR?$AAe?$AAs?$AAE?$AAr?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAa@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EG@HFPL@?$AAm?$AAm?$AAc?$AAR?$AAe?$AAs?$AAe?$AAt?$AA?5?$AAR?$AAe?$AAs?$AAE?$AAr?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAa@| DCB "m"
	DCB	0x0, "m", 0x0, "c", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "e"
	DCB	0x0, "t", 0x0, " ", 0x0, "R", 0x0, "e", 0x0, "s", 0x0, "E"
	DCB	0x0, "r", 0x0, "r", 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " "
	DCB	0x0, "a", 0x0, "s", 0x0, " ", 0x0, "f", 0x0, "o", 0x0, "l"
	DCB	0x0, "l", 0x0, "o", 0x0, "w", 0x0, "s", 0x0, " ", 0x0, "%"
	DCB	0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |mmcReset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |mmcReset| PROC

; 204  : {

  00000	e92d4ff0	 stmdb     sp!, {r4 - r11, lr}
  00004	e24dd014	 sub       sp, sp, #0x14
  00008		 |$M37264|
  00008	e1a05000	 mov       r5, r0
  0000c	e58d5010	 str       r5, [sp, #0x10]
  00010	e1a06001	 mov       r6, r1

; 205  :         UINT32  cardType;
; 206  :     MMC_CC  resErr;
; 207  :         UINT16  sdFlag;
; 208  :         UINT16  readyFlag;
; 209  : 	
; 210  : #if (USE_SPI || USE_SPI_EMULATION)
; 211  :     INT16   ChipNum;
; 212  : 
; 213  :     ChipNum = (INT16)setupInfo;
; 214  :     pc->timer = (RESET_DELAY << 2);
; 215  :         cardType = NO;
; 216  :         readyFlag = NO;
; 217  :         resErr = MMC_NO_ERROR;
; 218  :         pc->drive_active = ChipNum;
; 219  : 
; 220  :     
; 221  :     selectChip( ChipNum );
; 222  : 
; 223  :         
; 224  :     resErr = mmcCommandAndResponse ( pc,
; 225  :                 0L,
; 226  :                 GO_IDLE_STATE,
; 227  :                 0,
; 228  :                 R1 );
; 229  : 
; 230  :         
; 231  :     deSelectChip ( ChipNum );
; 232  : 
; 233  :         
; 234  :         if ( (resErr != MMC_CARD_IS_NOT_READY) )
; 235  :         {
; 236  :                 
; 237  :         pc->error_code = MMC_INTERFACE_ERROR;
; 238  :         return MMC_INTERFACE_ERROR;
; 239  :     }
; 240  : 
; 241  :         
; 245  : #if (USE_SD)
; 246  :         sdFlag = YES;           
; 247  : #else
; 248  :         sdFlag = NO;
; 249  : #endif
; 250  :     while ( pc->timer )
; 251  :     {
; 252  :                    
; 258  : 
; 259  : #if (USE_SD)
; 260  :                 
; 261  :                 if (sdFlag)
; 262  :         {
; 263  :                         
; 264  :                         resErr = mmcSDApplCmd(pc, SDNULL, 0L, 0, 0, R1, SD_SEND_OP_COND);
; 265  : 
; 266  :                         
; 267  :                         if (resErr == MMC_COMUNC_ILLEG_COM)
; 268  :             {
; 269  :                                 
; 274  :                                 sdFlag = NO;
; 275  :                         }
; 276  :                         else if (resErr == MMC_NO_ERROR)
; 277  :                         {
; 278  :                                 
; 279  :                                 cardType = SD_TYPE;     
; 280  :                                 readyFlag = CARD_READY_FLAG;
; 281  : 
; 282  : 
; 283  : #if 0
; 284  :                                 
; 287  :                                 selectChip( ChipNum );
; 288  :                                 resErr = mmcCommandAndResponse ( pc,
; 289  :                                                         0L,
; 290  :                                                         SD_READ_OCR,
; 291  :                                                         0,
; 292  :                                                         R3 );
; 293  :                                 deSelectChip ( ChipNum );
; 294  : 
; 295  :                                 if (resErr == MMC_NO_ERROR)
; 296  :                                 {
; 297  :                                         
; 298  :                                         readyFlag = to_WORD((UCHAR *)&pc->LastResponse[1]);
; 299  :                                         if (!(readyFlag & CARD_READY_FLAG))
; 300  :                                         {
; 301  :                                                 
; 302  :                                                 resErr = MMC_CARD_IS_NOT_READY;
; 303  :                                         }
; 304  :                                 }
; 305  : #endif
; 306  :             }
; 307  :         }
; 308  : #endif 
; 309  : 
; 310  :                 
; 311  :                 if (!sdFlag)    
; 312  :         {
; 313  :                         
; 314  :                         RETAILMSG(1, (TEXT("Before sending SEND_OP_COND command \r\n")));
; 315  : 

; 316  :       

; 317  :             resErr = mmcCommandAndResponse ( pc,
; 318  :                     0L,
; 319  :                     SEND_OP_COND,
; 320  :                                         0,
; 321  :                                         R1 );
; 322  :     

; 323  : 
; 324  :                         
; 325  :                         if ( (resErr == MMC_CARD_IS_NOT_READY) || (resErr == MMC_NO_ERROR) )
; 326  :                         {
; 327  :                                 
; 328  :                                 cardType = SPI_TYPE;
; 329  : 
; 330  :                                 sdFlag = NO;
; 331  : 								RETAILMSG(1, (TEXT(" After sending SEND_OP_COND command, MMC_CARD_NOT_READY\r\n")));
; 332  :                         }
; 333  :         }                
; 334  : 
; 335  :                 
; 336  :         if ( (resErr != MMC_CARD_IS_NOT_READY) && resErr )
; 337  :         {
; 338  :             pc->error_code = (UINT16)resErr;
; 339  :             return resErr;
; 340  :         }
; 341  : 
; 342  :                 
; 343  :         if ( resErr == MMC_CARD_IS_NOT_READY )
; 344  :         {
; 345  :             pc->timer--;
; 346  :             OS_WAIT(1);     
; 347  :             if ( !pc->timer )
; 348  :             {
; 349  :                 pc->error_code = MMC_CARD_IS_NOT_READY;
; 350  :                 return MMC_CARD_IS_NOT_READY;
; 351  :             }
; 352  :         }
; 353  :                 else if (resErr == MMC_NO_ERROR)
; 354  :                 {
; 355  :                         
; 356  :                         pc->drive[ChipNum].drv_type = cardType;
; 357  : 
; 358  :                         
; 359  :                         pc->drive[ChipNum].RCA = (UINT16)ChipNum;
; 360  :                         break;
; 361  :                 }
; 362  :     }
; 363  :     
; 364  : #else 
; 365  :         UINT16  i, bInterface;
; 366  :         UINT16  devCount;
; 367  : 	RETAILMSG(1, (TEXT("mmcReset() entered \r\n")));

  00014	e59f0460	 ldr       r0, [pc, #0x460]
  00018	eb000000	 bl        NKDbgPrintfW

; 368  :     pc->timer = (RESET_DELAY << 2);
; 369  :         cardType = NO;
; 370  :         readyFlag = NO;
; 371  :         resErr = MMC_NO_ERROR;
; 372  : 
; 373  :         
; 374  :  
; 380  :         bInterface = 0;
; 381  :         devCount = 0;
; 382  : 
; 383  :         sdFlag = NO;
; 384  : 
; 385  : #if (USE_SD)
; 386  : RETAILMSG(1, (TEXT("user_sd\r\n")));

  0001c	e59f0454	 ldr       r0, [pc, #0x454]
  00020	e3a02000	 mov       r2, #0
  00024	e3a03078	 mov       r3, #0x78
  00028	e1a04002	 mov       r4, r2
  0002c	e1c531b8	 strh      r3, [r5, #0x18]
  00030	e1a08002	 mov       r8, r2
  00034	e58d400c	 str       r4, [sp, #0xC]
  00038	e1a07002	 mov       r7, r2
  0003c	e1a0a002	 mov       r10, r2
  00040	e1a0b002	 mov       r11, r2
  00044	e1a09002	 mov       r9, r2
  00048	eb000000	 bl        NKDbgPrintfW
  0004c		 |$DO_ALL_BUS_INTERFACE$36570|

; 387  : #endif
; 388  : #if (USE_SD)
; 389  : DO_ALL_BUS_INTERFACE:
; 390  : #endif
; 391  :     for (i = 0; i < (CID_BYTE_LENGTH/2); pc->LastResponse[i++] = 0); 

  0004c	e3a02000	 mov       r2, #0
  00050	e1a01002	 mov       r1, r2

; 535  :         {
; 536  : 			RETAILMSG(1, (TEXT("asssign RCA is not sucessful! with ID %d\r\n"), i));

  00054	ea000000	 b         |$L36571|
  00058		 |$L37262|
  00058	e3a02000	 mov       r2, #0
  0005c		 |$L36571|

; 387  : #endif
; 388  : #if (USE_SD)
; 389  : DO_ALL_BUS_INTERFACE:
; 390  : #endif
; 391  :     for (i = 0; i < (CID_BYTE_LENGTH/2); pc->LastResponse[i++] = 0); 

  0005c	e0850081	 add       r0, r5, r1, lsl #1
  00060	e2811001	 add       r1, r1, #1
  00064	e1c022b8	 strh      r2, [r0, #0x28]
  00068	e1a00801	 mov       r0, r1, lsl #16
  0006c	e1a02820	 mov       r2, r0, lsr #16
  00070	e1a01802	 mov       r1, r2, lsl #16
  00074	e1a01821	 mov       r1, r1, lsr #16
  00078	e3510008	 cmp       r1, #8
  0007c	3afffff5	 bcc       |$L37262|

; 392  : 
; 393  :    
; 394  :    OS_WAIT(25);

  00080	e3a00019	 mov       r0, #0x19
  00084	eb000000	 bl        platform_delayms

; 395  : 
; 396  :    
; 397  :     while (pc->timer)

  00088	e1d531b8	 ldrh      r3, [r5, #0x18]
  0008c	e1a00803	 mov       r0, r3, lsl #16

⌨️ 快捷键说明

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