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

📄 sdmmc.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:
	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

; 201  : {

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

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

; 313  :             resErr = mmcCommandAndResponse ( pc,
; 314  :                     0L,
; 315  :                     SEND_OP_COND,
; 316  :                                         0,
; 317  :                                         R1 );
; 318  :     

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

  00014	e59f0438	 ldr       r0, [pc, #0x438]
  00018	eb000000	 bl        NKDbgPrintfW

; 364  :     pc->timer = (RESET_DELAY << 2);
; 365  :         cardType = NO;
; 366  :         readyFlag = NO;
; 367  :         resErr = MMC_NO_ERROR;
; 368  : 
; 369  :         
; 370  :  
; 376  :         bInterface = 0;
; 377  :         devCount = 0;
; 378  : 
; 379  :         sdFlag = NO;
; 380  : 
; 381  : #if (USE_SD)
; 382  : RETAILMSG(1, (TEXT("user_sd\r\n")));

  0001c	e59f042c	 ldr       r0, [pc, #0x42C]
  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|

; 383  : #endif
; 384  : #if (USE_SD)
; 385  : DO_ALL_BUS_INTERFACE:
; 386  : #endif
; 387  :     for (i = 0; i < (CID_BYTE_LENGTH/2); pc->LastResponse[i++] = 0); 

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

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

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

; 383  : #endif
; 384  : #if (USE_SD)
; 385  : DO_ALL_BUS_INTERFACE:
; 386  : #endif
; 387  :     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       |$L37246|

; 388  : 
; 389  :         
; 390  :         OS_WAIT(25);

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

; 391  : 
; 392  :         
; 393  :     while (pc->timer)

  00088	e1d531b8	 ldrh      r3, [r5, #0x18]
  0008c	e1a00803	 mov       r0, r3, lsl #16
  00090	e1b01820	 movs      r1, r0, lsr #16
  00094	0a000066	 beq       |$L36576|
  00098		 |$L36575|

; 394  :     {
; 395  :                    
; 402  :                 
; 403  :                 if (!sdFlag)    

  00098	e1a00809	 mov       r0, r9, lsl #16
  0009c	e1b01820	 movs      r1, r0, lsr #16
  000a0	1a00002c	 bne       |$L36585|

; 404  :         {
; 405  :                         
; 406  :             resErr = mmcCommandAndResponse ( pc,
; 407  :                     setupInfo,
; 408  :                                         SEND_OP_COND,
; 409  :                     0,
; 410  :                     R3 );

  000a4	e3a00003	 mov       r0, #3
  000a8	e58d0000	 str       r0, [sp]
  000ac	e3a03000	 mov       r3, #0
  000b0	e3a02001	 mov       r2, #1
  000b4	e1a01006	 mov       r1, r6
  000b8	e1a00005	 mov       r0, r5
  000bc	eb000000	 bl        mmcCommandAndResponse
  000c0	e1b04000	 movs      r4, r0
  000c4	e58d400c	 str       r4, [sp, #0xC]

; 411  : 
; 412  :                         
; 413  :                         if (resErr == MMC_NO_ERROR)

  000c8	1a000008	 bne       |$L36578|

; 414  :                         {
; 415  :                                 
; 416  :                                 
; 417  :                                 cardType = MMC_TYPE;
; 418  :                                 readyFlag = to_WORD((UCHAR *)&pc->LastResponse[0]);

  000cc	e2850028	 add       r0, r5, #0x28
  000d0	e3a08101	 mov       r8, #1, 2
  000d4	eb000000	 bl        to_WORD
  000d8	e1a07000	 mov       r7, r0

; 419  : 				RETAILMSG(1, (TEXT("is the card ready? %x\r\n"), readyFlag));

  000dc	e1a00807	 mov       r0, r7, lsl #16
  000e0	e1a01820	 mov       r1, r0, lsr #16

⌨️ 快捷键说明

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