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

📄 nand.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000568  e92d4010          STMFD    sp!,{r4,lr}
;;;223    	U32 block=0;
00056c  e3a04000          MOV      r4,#0
;;;224    
;;;225    	Uart_Printf("SMC(K9S1208V0M) NAND Block erase\n");
000570  e28f004c          ADR      r0,|L1.1476|
000574  ebfffffe          BL       Uart_Printf
;;;226    
;;;227    	if((Read_Status()&0x80)==0) {
000578  ebfffffe          BL       Read_Status
00057c  e3100080          TST      r0,#0x80
000580  1a000002          BNE      |L1.1424|
;;;228    		Uart_Printf("Write protected.\n");
000584  e28f005c          ADR      r0,|L1.1512|
000588  ebfffffe          BL       Uart_Printf
;;;229    		return;
;;;230    	}
;;;231    
;;;232    	Uart_Printf("Block # to erase: ");
;;;233    	block = Uart_GetIntNum();
;;;234    
;;;235    //	NF8_Init();
;;;236    	
;;;237    	if(NF8_EraseBlock(block)==FAIL) return;
;;;238    
;;;239    	Uart_Printf("%d-block erased.\n", block);
;;;240    
;;;241    }
                  |L1.1420|
00058c  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.1424|
000590  e28f0064          ADR      r0,|L1.1532|          ;232
000594  ebfffffe          BL       Uart_Printf           ;232
000598  ebfffffe          BL       Uart_GetIntNum        ;233
00059c  e1a04000          MOV      r4,r0                 ;233
0005a0  e1a00004          MOV      r0,r4                 ;237
0005a4  ebfffffe          BL       NF8_EraseBlock        ;237
0005a8  e3500000          CMP      r0,#0                 ;237
0005ac  1a000000          BNE      |L1.1460|             ;237
0005b0  eafffff5          B        |L1.1420|             ;237
                  |L1.1460|
0005b4  e1a01004          MOV      r1,r4                 ;239
0005b8  e28f0050          ADR      r0,|L1.1552|          ;239
0005bc  ebfffffe          BL       Uart_Printf           ;239
0005c0  eafffff1          B        |L1.1420|
                  |L1.1476|
0005c4  28434d53          DCB      "SMC("
0005c8  3153394b          DCB      "K9S1"
0005cc  56383032          DCB      "208V"
0005d0  20294d30          DCB      "0M) "
0005d4  444e414e          DCB      "NAND"
0005d8  6f6c4220          DCB      " Blo"
0005dc  65206b63          DCB      "ck e"
0005e0  65736172          DCB      "rase"
0005e4  0000000a          DCB      "\n\0\0\0"
                  |L1.1512|
0005e8  74697257          DCB      "Writ"
0005ec  72702065          DCB      "e pr"
0005f0  6365746f          DCB      "otec"
0005f4  2e646574          DCB      "ted."
0005f8  0000000a          DCB      "\n\0\0\0"
                  |L1.1532|
0005fc  636f6c42          DCB      "Bloc"
000600  2023206b          DCB      "k # "
000604  65206f74          DCB      "to e"
000608  65736172          DCB      "rase"
00060c  0000203a          DCB      ": \0\0"
                  |L1.1552|
000610  622d6425          DCB      "%d-b"
000614  6b636f6c          DCB      "lock"
000618  61726520          DCB      " era"
00061c  2e646573          DCB      "sed."
000620  0000000a          DCB      "\n\0\0\0"
                          ENDP

                  NF8_ReadPage PROC
;;;718    static int NF8_ReadPage(U32 block,U32 page,U8 *buffer)
;;;719    {
000624  e92d47f0          STMFD    sp!,{r4-r10,lr}
000628  e1a07000          MOV      r7,r0
00062c  e1a08001          MOV      r8,r1
000630  e1a09002          MOV      r9,r2
;;;720           int i;
;;;721           unsigned int blockPage;
;;;722    	U32 Mecc, Secc;
;;;723    	U8 *bufPt=buffer;
000634  e1a0a009          MOV      r10,r9
;;;724    	U8 se[16], ecc0, ecc1, ecc2, ecc3,a,b,c,d,e;
;;;725        
;;;726           blockPage=(block<<5)+page;
000638  e0886287          ADD      r6,r8,r7,LSL #5
;;;727    	NF_RSTECC();    // Initialize ECC
00063c  e3a0044e          MOV      r0,#0x4e000000
000640  e5900004          LDR      r0,[r0,#4]
000644  e3800010          ORR      r0,r0,#0x10
000648  e3a0144e          MOV      r1,#0x4e000000
00064c  e5810004          STR      r0,[r1,#4]
;;;728    	NF_MECC_UnLock();
000650  e3a0044e          MOV      r0,#0x4e000000
000654  e5900004          LDR      r0,[r0,#4]
000658  e3c00020          BIC      r0,r0,#0x20
00065c  e3a0144e          MOV      r1,#0x4e000000
000660  e5810004          STR      r0,[r1,#4]
;;;729        
;;;730    	NF_nFCE_L();    
000664  e3a0044e          MOV      r0,#0x4e000000
000668  e5900004          LDR      r0,[r0,#4]
00066c  e3c00002          BIC      r0,r0,#2
000670  e3a0144e          MOV      r1,#0x4e000000
000674  e5810004          STR      r0,[r1,#4]
;;;731    
;;;732    	NF_CLEAR_RB();
000678  e3a0044e          MOV      r0,#0x4e000000
00067c  e5900020          LDR      r0,[r0,#0x20]
000680  e3800004          ORR      r0,r0,#4
000684  e3a0144e          MOV      r1,#0x4e000000
000688  e5810020          STR      r0,[r1,#0x20]
;;;733    	NF_CMD(0x00);	// Read command
00068c  e3a00000          MOV      r0,#0
000690  e3a0144e          MOV      r1,#0x4e000000
000694  e5810008          STR      r0,[r1,#8]
;;;734    	NF_ADDR(0); 	// Column = 0
000698  e3a00000          MOV      r0,#0
00069c  e3a0144e          MOV      r1,#0x4e000000
0006a0  e581000c          STR      r0,[r1,#0xc]
;;;735    	NF_ADDR(blockPage&0xff);		//
0006a4  e20600ff          AND      r0,r6,#0xff
0006a8  e3a0144e          MOV      r1,#0x4e000000
0006ac  e581000c          STR      r0,[r1,#0xc]
;;;736    	NF_ADDR((blockPage>>8)&0xff);	// Block & Page num.
0006b0  e1a00806          MOV      r0,r6,LSL #16
0006b4  e1a00c20          MOV      r0,r0,LSR #24
0006b8  e3a0144e          MOV      r1,#0x4e000000
0006bc  e581000c          STR      r0,[r1,#0xc]
;;;737    	NF_ADDR((blockPage>>16)&0xff);	//
0006c0  e1a00406          MOV      r0,r6,LSL #8
0006c4  e1a00c20          MOV      r0,r0,LSR #24
0006c8  e3a0144e          MOV      r1,#0x4e000000
0006cc  e581000c          STR      r0,[r1,#0xc]
;;;738    	NF_DETECT_RB();
0006d0  e1a00000          NOP      
                  |L1.1748|
0006d4  e3a0044e          MOV      r0,#0x4e000000
0006d8  e5900020          LDR      r0,[r0,#0x20]
0006dc  e3100004          TST      r0,#4
0006e0  0afffffb          BEQ      |L1.1748|
;;;739    	 
;;;740    	
;;;741          #if TRANS_MODE==C_LANG
;;;742    	    for(i=0;i<512;i++) {
;;;743    	    	*bufPt++=NF_RDDATA8();	// Read one page
;;;744    	    }
;;;745          #elif TRANS_MODE==DMA
;;;746    		// Nand to memory dma setting
;;;747    	    rSRCPND=BIT_DMA0;	// Init DMA src pending.
0006e4  e3a00b80          MOV      r0,#0x20000
0006e8  e3a0144a          MOV      r1,#0x4a000000
0006ec  e5810000          STR      r0,[r1,#0]
;;;748    	    rDISRC0=NFDATA; 	// Nand flash data register
0006f0  e59f01a0          LDR      r0,|L1.2200|
0006f4  e3a0144b          MOV      r1,#0x4b000000
0006f8  e5810000          STR      r0,[r1,#0]
;;;749    	    rDISRCC0=(0<<1) | (1<<0); //arc=AHB,src_addr=fix
0006fc  e3a00001          MOV      r0,#1
000700  e3a0144b          MOV      r1,#0x4b000000
000704  e5810004          STR      r0,[r1,#4]
;;;750    	    rDIDST0=(unsigned)bufPt;
000708  e3a0044b          MOV      r0,#0x4b000000
00070c  e580a008          STR      r10,[r0,#8]
;;;751    	    rDIDSTC0=(0<<1) | (0<<0); //dst=AHB,dst_addr=inc;
000710  e3a00000          MOV      r0,#0
000714  e3a0144b          MOV      r1,#0x4b000000
000718  e581000c          STR      r0,[r1,#0xc]
;;;752    	    rDCON0=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(512/4/4);
00071c  e59f0178          LDR      r0,|L1.2204|
000720  e3a0144b          MOV      r1,#0x4b000000
000724  e5810010          STR      r0,[r1,#0x10]
;;;753    		//Handshake,AHB,interrupt,(4-burst),whole,S/W,no_autoreload,word,count=128;
;;;754    
;;;755    		// DMA on and start.
;;;756    	    rDMASKTRIG0=(1<<1)|(1<<0);
000728  e3a00003          MOV      r0,#3
00072c  e3a0144b          MOV      r1,#0x4b000000
000730  e5810020          STR      r0,[r1,#0x20]
;;;757    
;;;758    		while(!(rSRCPND & BIT_DMA0));	// Wait until Dma transfer is done.
000734  e1a00000          NOP      
                  |L1.1848|
000738  e3a0044a          MOV      r0,#0x4a000000
00073c  e5900000          LDR      r0,[r0,#0]
000740  e3100b80          TST      r0,#0x20000
000744  0afffffb          BEQ      |L1.1848|
;;;759    		
;;;760    	    rSRCPND=BIT_DMA0;
000748  e3a00b80          MOV      r0,#0x20000
00074c  e3a0144a          MOV      r1,#0x4a000000
000750  e5810000          STR      r0,[r1,#0]
;;;761    
;;;762          #elif TRANS_MODE==ASM
;;;763    	    __RdPage512(bufPt);
;;;764          #endif
;;;765    
;;;766      /*  
;;;767    	  NF_MECC_Lock();
;;;768    	  
;;;769    	  rNFMECCD0=NF_RDDATA();
;;;770    	  
;;;771    	  NF_nFCE_H();	  
;;;772    	  
;;;773    	  if ((rNFESTAT0&0x3) == 0x0) 	  return OK;
;;;774    	  else   return FAIL;
;;;775    */
;;;776    
;;;777    	 NF_MECC_Lock();
000754  e3a0044e          MOV      r0,#0x4e000000
000758  e5900004          LDR      r0,[r0,#4]
00075c  e3800020          ORR      r0,r0,#0x20
000760  e3a0144e          MOV      r1,#0x4e000000
000764  e5810004          STR      r0,[r1,#4]
;;;778    
;;;779    	 NF_SECC_UnLock();
000768  e3a0044e          MOV      r0,#0x4e000000
00076c  e5900004          LDR      r0,[r0,#4]
000770  e3c00040          BIC      r0,r0,#0x40
000774  e3a0144e          MOV      r1,#0x4e000000
000778  e5810004          STR      r0,[r1,#4]
;;;780    	 Mecc=NF_RDDATA();
00077c  e3a0044e          MOV      r0,#0x4e000000
000780  e5904010          LDR      r4,[r0,#0x10]
;;;781    	 rNFMECCD0=((Mecc&0xff00)<<8)|(Mecc&0xff);
000784  e20400ff          AND      r0,r4,#0xff
000788  e2041cff          AND      r1,r4,#0xff00
00078c  e1800401          ORR      r0,r0,r1,LSL #8
000790  e3a0144e          MOV      r1,#0x4e000000
000794  e5810014          STR      r0,[r1,#0x14]
;;;782    	 rNFMECCD1=((Mecc&0xff000000)>>8)|((Mecc&0xff0000)>>16);
000798  e3c408ff          BIC      r0,r4,#0xff0000
00079c  e3c00cff          BIC      r0,r0,#0xff00
0007a0  e1a00420          MOV      r0,r0,LSR #8
0007a4  e1a01404          MOV      r1,r4,LSL #8
0007a8  e1800c21          ORR      r0,r0,r1,LSR #24
0007ac  e3a0144e          MOV      r1,#0x4e000000
0007b0  e5810018          STR      r0,[r1,#0x18]
;;;783    	
;;;784    	 NF_SECC_Lock();
0007b4  e3a0044e          MOV      r0,#0x4e000000
0007b8  e5900004          LDR      r0,[r0,#4]
0007bc  e3800040          ORR      r0,r0,#0x40
0007c0  e3a0144e          MOV      r1,#0x4e000000
0007c4  e5810004          STR      r0,[r1,#4]
;;;785    	 NF8_Spare_Data[0]=Mecc&0xff;
0007c8  e59f00d0          LDR      r0,|L1.2208|
0007cc  e5c04000          STRB     r4,[r0,#0]  ; NF8_Spare_Data
;;;786    	 NF8_Spare_Data[1]=(Mecc&0xff00)>>8;
0007d0  e1a00804          MOV      r0,r4,LSL #16
0007d4  e1a00c20          MOV      r0,r0,LSR #24
0007d8  e59f10c0          LDR      r1,|L1.2208|
0007dc  e5c10001          STRB     r0,[r1,#1]  ; NF8_Spare_Data
;;;787    	 NF8_Spare_Data[2]=(Mecc&0xff0000)>>16;
0007e0  e1a00404          MOV      r0,r4,LSL #8
0007e4  e1a00c20          MOV      r0,r0,LSR #24
0007e8  e59f10b0          LDR      r1,|L1.2208|
0007ec  e5c10002          STRB     r0,[r1,#2]  ; NF8_Spare_Data
;;;788    	 NF8_Spare_Data[3]=(Mecc&0xff000000)>>24;
0007f0  e1a00c24          MOV      r0,r4,LSR #24
0007f4  e59f10a4          LDR      r1,|L1.2208|
0007f8  e5c10003          STRB     r0,[r1,#3]  ; NF8_Spare_Data
;;;789    	 NF_RDDATA();  // read 4~7
0007fc  e3a0044e          MOV      r0,#0x4e000000
000800  e5900010          LDR      r0,[r0,#0x10]
;;;790    	 Secc=NF_RDDATA();
000804  e3a0044e          MOV      r0,#0x4e000000
000808  e5905010          LDR      r5,[r0,#0x10]
;;;791    	 rNFSECCD=((Secc&0xff00)<<8)|(Secc&0xff);
00080c  e20500ff          AND      r0,r5,#0xff
000810  e2051cff          AND      r1,r5,#0xff00
000814  e1800401          ORR      r0,r0,r1,LSL #8
000818  e3a0144e          MOV      r1,#0x4e000000
00081c  e581001c          STR      r0,[r1,#0x1c]
;;;792    	 NF8_Spare_Data[8]=Secc&0xff;
000820  e59f0078          LDR      r0,|L1.2208|
000824  e5c05008          STRB     r5,[r0,#8]  ; NF8_Spare_Data
;;;793    	 NF8_Spare_Data[9]=(Secc&0xff00)>>8;
000828  e1a00805          MOV      r0,r5,LSL #16
00082c  e1a00c20          MOV      r0,r0,LSR #24
000830  e59f1068          LDR      r1,|L1.2208|
000834  e5c10009          STRB     r0,[r1,#9]  ; NF8_Spare_Data
;;;794    	 NF8_Spare_Data[10]=(Secc&0xff0000)>>16;
000838  e1a00405          MOV      r0,r5,LSL #8
00083c  e1a00c20          MOV      r0,r0,LSR #24
000840  e59f1058          LDR      r1,|L1.2208|
000844  e5c1000a          STRB     r0,[r1,#0xa]  ; NF8_Spare_Data
;;;795    	 NF8_Spare_Data[11]=(Secc&0xff000000)>>24;
000848  e1a00c25          MOV      r0,r5,LSR #24
00084c  e59f104c          LDR      r1,|L1.2208|
000850  e5c1000b          STRB     r0,[r1,#0xb]  ; NF8_Spare_Data
;;;796    	 NF_nFCE_H();    
000854  e3a0044e          MOV      r0,#0x4e000000
000858  e5900004          LDR      r0,[r0,#4]
00085c  e3800002          ORR      r0,r0,#2
000860  e3a0144e          MOV      r1,#0x4e000000
000864  e5810004          STR      r0,[r1,#4]
;;;797    
;;;798    	 if ((rNFESTAT0&0xf) == 0x0){
000868  e3a0044e          MOV      r0,#0x4e000000
00086c  e5900024          LDR      r0,[r0,#0x24]
000870  e310000f          TST      r0,#0xf
000874  1a000003          BNE      |L1.2184|
;;;799    	       Uart_Printf("ECC OK!\n");
000878  e28f0024          ADR      r0,|L1.2212|
00087c  ebfffffe          BL       Uart_Printf
;;;800    		return OK;
000880  e3a00001          MOV      r0,#1
;;;801    	 }

⌨️ 快捷键说明

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