亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? nand.c

?? 三星給予ARM920T內(nèi)核的S3C2413的demo版本
?? C
?? 第 1 頁 / 共 3 頁
字號:
		if(i==0)  printf(".");
			//printf("\b\b\b\b\b\b\b\b%04d,%02d]", blockIndex, i);
		if((U32)srcPt>=(srcAddress+targetSize)) // Check end of buffer
		break;	// Exit for loop
		}
		
		if(programError==1) {
		    blockIndex++;
		    srcPt=saveSrcPt;
		    programError=0;
		    continue;
		}

		if((U32)srcPt>=(srcAddress+targetSize)) break;	// Exit while loop

		blockIndex++;
    }

}


void InputTargetBlock(void)
{
	U32 no_block, no_page, no_byte;
	
	printf("\nSource size:0h~%xh\n",downloadProgramSize);
	printf("\nAvailable target block number: 0~4095\n");
	printf("Input target block number:");
    targetBlock=GetIntNum();	// Block number(0~4095)
    if(targetSize==0)
    {
    	#if 0
    	printf("Input target size(0x4000*n):");
    	targetSize=GetIntNum();	// Total byte size
	#else
   	printf("Input program file size(bytes): ");
    	targetSize=GetIntNum();	// Total byte size
    	#endif
    }
	
	no_block = (U32)((targetSize/512)/32);
	no_page = (U32)((targetSize/512)%32);
	no_byte = (U32)(targetSize%512);
	printf("File:%d[%d-block,%d-page,%d-bytes].\n", targetSize, no_block, no_page, no_byte);
}


void NF8_PrintBadBlockNum(void)
{
    int i;
    U16 id;

    printf("\n[SMC(K9S1208V0M) NAND Flash bad block check]\n");
    
    id=NF8_CheckId();
    printf("ID=%x(0xec76)\n",id);
    if(id!=0xec76)
    return;
    for(i=0;i<4096;i++)  	NF8_IsBadBlock(i);   // Print bad block
}


void Test_NF8_Lock(void)
{
       U32 num;
       U32 S_block, E_block;
	printf("SMC(K9S1208V0M) NAND Lock Test !!!\n");
	printf("Select Lock type, Softlock(1)/Lock-tight(2) : ");

	num=GetIntNum();;
			
	printf("\nEnter programmable start block address ");
	S_block = GetIntNum();
	printf("Enter programmable end block address ");
       E_block = GetIntNum();

	rNFSBLK=(S_block<<5);
	rNFEBLK=(E_block<<5);
	
	if(num==1){
		rNFCONT|=(1<<12);
              printf("Software Locked\n ");
	}
	if(num==2){
		rNFCONT|=(1<<13);
              printf("Lock-tight: To clear Lock-tight, reset S3C2440!!!\n ");
	}
      printf("%d block ~ %d block are Programmable\n ", S_block, (E_block-1));
}


void Test_NF8_SoftUnLock(void)
{
       U32 S_block, E_block;
	printf("SMC(K9S1208V0M) NAND SoftUnLock Test !!!\n");
	
	rNFSBLK=0x0;
	rNFEBLK=0x0;

	rNFCONT&=~(1<<12);
	if(rNFCONT&(1<<13)){
		rNFCONT&=~(1<<13);
		printf("Lock-tight\n ");
		printf("You can't unlock Protected blocks !!!\n ");
		printf("%d block ~ %d block are Programmable\n ", (rNFSBLK>>5), ((rNFEBLK>>5)-1));
	}
       else printf("All blocks are Programmable\n ");
}


void PrintSubMessage(void)
{
	int i;
	
	i=0;	
	printf("\n\n");
	while(1)
	{   //display menu
	    printf("%2d:%s",i,n8_func[i][1]);
	    i++;
	    if((int)(n8_func[i][0])==0)
	    {
		 printf("\n");
		 break;
	    }
	    if((i%4)==0) printf("\n");
	}
}


static int NF8_EraseBlock(U32 block)
{
	U32 blockPage=(block<<5);
    int i;

    NFConDone=0;
    rNFCONT|=(1<<9);
    rNFCONT|=(1<<10);
    pISR_NFCON= (unsigned)NFCon_Int;
    rSRCPND=BIT_NFCON;
    rINTMSK=~(BIT_NFCON);
	
#if BAD_CHECK
    if(NF8_IsBadBlock(block))
	return FAIL;
#endif

	NF_nFCE_L();
    
	NF_CMD(0x60);   // Erase one block 1st command, Block Addr:A9-A25
	// Address 3-cycle
	NF_ADDR(blockPage&0xff);	    // Page number=0
	NF_ADDR((blockPage>>8)&0xff);   
	NF_ADDR((blockPage>>16)&0xff);


	NF_CLEAR_RB();
	NF_CMD(0xd0);	// Erase one blcok 2nd command
	//NF_DETECT_RB();
    while(NFConDone==0);
	 rNFCONT&=~(1<<9);
	 rNFCONT&=~(1<<10); // Disable Illegal Access Interrupt
	 if(rNFSTAT&0x20) return FAIL;

	NF_CMD(0x70);   // Read status command

      if (NF_RDDATA()&0x1) // Erase error
      {	
    	NF_nFCE_H();
	printf("[ERASE_ERROR:block#=%d]\n",block);
//	NF8_MarkBadBlock(block);
	return FAIL;
       }
       else 
       {
    	NF_nFCE_H();
       return OK;
       }
}


void __irq NFCon_Int(void)
{
	//printf("Ni\n");
    NFConDone=1;
	rINTMSK|=BIT_NFCON;
	ClearPending(BIT_NFCON);
	if(rNFSTAT&0x20) printf("Illegal Access is detected!!!\n");
//	else printf("RnB is Detected!!!\n"); 
}


static int NF8_IsBadBlock(U32 block)
{
       int i;
       unsigned int blockPage;
	U8 data;
    
    
       blockPage=(block<<5);	// For 2'nd cycle I/O[7:5] 
    
	NF_nFCE_L();
	NF_CLEAR_RB();

	NF_CMD(0x50);		 // Spare array read command
	NF_ADDR((512+5)&0xf);		 // Read the mark of bad block in spare array(M addr=5), A4-A7:Don't care
	NF_ADDR(blockPage&0xff);	 // The mark of bad block is in 0 page
	NF_ADDR((blockPage>>8)&0xff);	 // For block number A[24:17]
	NF_ADDR((blockPage>>16)&0xff);  // For block number A[25]
	 
	NF_DETECT_RB();	 // Wait tR(max 12us)

       data=NF_RDDATA();

	NF_nFCE_H();    

     if(data!=0xff)
     {
    	printf("[block %d has been marked as a bad block(%x)]\n",block,data);
    	return FAIL;
     }
     else
     {
    	return OK;
     }
}


static int NF8_MarkBadBlock(U32 block)
{
       int i;
	U32 blockPage=(block<<5);
 
     se8Buf[0]=0xff;
     se8Buf[1]=0xff;    
     se8Buf[2]=0xff;    
     se8Buf[5]=0x44;   // Bad blcok mark=44
    
	NF_nFCE_L(); 
	NF_CMD(0x50);   //????
	NF_CMD(0x80);   // Write 1st command
    
	NF_ADDR(0x0);		    // The mark of bad block is 
	NF_ADDR(blockPage&0xff);	    // marked 5th spare array 
	NF_ADDR((blockPage>>8)&0xff);   // in the 1st page.
	NF_ADDR((blockPage>>16)&0xff);  //
    
	for(i=0;i<16;i++)
      {
	   NF_WRDATA(se8Buf[i]);	// Write spare array
      }

	NF_CLEAR_RB();
	NF_CMD(0x10);   // Write 2nd command
	NF_DETECT_RB();

	NF_CMD(0x70);
    
	for(i=0;i<3;i++);  //twhr=60ns////??????
    
      if (NF_RDDATA()&0x1) // Spare arrray write error
      {	
    	NF_nFCE_H();
    	printf("[Program error is occurred but ignored]\n");
       }
      else 
      {
    	NF_nFCE_H();
      }

	printf("[block #%d is marked as a bad block]\n",block);
       return OK;
}

static int NF8_ReadPage(U32 block,U32 page,U8 *buffer)
{
       int i;
       unsigned int blockPage;
	U32 Mecc, Secc;
	U8 *bufPt=buffer;
	U8 se[16], ecc0, ecc1, ecc2, ecc3,a,b,c,d,e;
    
       blockPage=(block<<5)+page;
	NF_RSTECC();    // Initialize ECC
	NF_MECC_UnLock();
    
	NF_nFCE_L();    

	NF_CLEAR_RB();
	NF_CMD(0x00);	// Read command
	NF_ADDR(0); 	// Column = 0
	NF_ADDR(blockPage&0xff);		//
	NF_ADDR((blockPage>>8)&0xff);	// Block & Page num.
	NF_ADDR((blockPage>>16)&0xff);	//
	NF_DETECT_RB();
	 
	
      #if TRANS_MODE==C_LANG
	    for(i=0;i<512;i++) {
	    	*bufPt++=NF_RDDATA8();	// Read one page
	    }
      #elif TRANS_MODE==DMA
		// Nand to memory dma setting
	    rSRCPND=BIT_DMA0;	// Init DMA src pending.
	    rDISRC0=NFDATA; 	// Nand flash data register
	    rDISRCC0=(0<<1) | (1<<0); //arc=AHB,src_addr=fix
	    rDIDST0=(unsigned)bufPt;
	    rDIDSTC0=(0<<1) | (0<<0); //dst=AHB,dst_addr=inc;
	    rDCON0=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(512/4/4);
		//Handshake,AHB,interrupt,(4-burst),whole,S/W,no_autoreload,word,count=128;

		// DMA on and start.
	    rDMASKTRIG0=(1<<1)|(1<<0);

		while(!(rSRCPND & BIT_DMA0));	// Wait until Dma transfer is done.
		
	    rSRCPND=BIT_DMA0;

      #elif TRANS_MODE==ASM
	    __RdPage512(bufPt);
      #endif

  /*  
	  NF_MECC_Lock();
	  
	  rNFMECCD0=NF_RDDATA();
	  
	  NF_nFCE_H();	  
	  
	  if ((rNFESTAT0&0x3) == 0x0) 	  return OK;
	  else   return FAIL;
*/

	 NF_MECC_Lock();

	 NF_SECC_UnLock();
	 Mecc=NF_RDDATA();
	 rNFMECCD0=((Mecc&0xff00)<<8)|(Mecc&0xff);
	 rNFMECCD1=((Mecc&0xff000000)>>8)|((Mecc&0xff0000)>>16);
	
	 NF_SECC_Lock();
	 NF8_Spare_Data[0]=Mecc&0xff;
	 NF8_Spare_Data[1]=(Mecc&0xff00)>>8;
	 NF8_Spare_Data[2]=(Mecc&0xff0000)>>16;
	 NF8_Spare_Data[3]=(Mecc&0xff000000)>>24;
	 Mecc=NF_RDDATA();  // read 4~7
 	 NF8_Spare_Data[4]=Mecc&0xff;
	 NF8_Spare_Data[5]=(Mecc&0xff00)>>8;
	 NF8_Spare_Data[6]=(Mecc&0xff0000)>>16;
	 NF8_Spare_Data[7]=(Mecc&0xff000000)>>24;

	 Secc=NF_RDDATA();
	 rNFSECCD=((Secc&0xff00)<<8)|(Secc&0xff);
	 NF8_Spare_Data[8]=Secc&0xff;
	 NF8_Spare_Data[9]=(Secc&0xff00)>>8;
	 NF8_Spare_Data[10]=(Secc&0xff0000)>>16;
	 NF8_Spare_Data[11]=(Secc&0xff000000)>>24;
	 
	 Secc=NF_RDDATA();
	 NF8_Spare_Data[12]=Secc&0xff;
	 NF8_Spare_Data[13]=(Secc&0xff00)>>8;
	 NF8_Spare_Data[14]=(Secc&0xff0000)>>16;
	 NF8_Spare_Data[15]=(Secc&0xff000000)>>24;
	 NF_nFCE_H();    

	 if ((rNFECCERR0&0xf) == 0x0){
	       printf("ECC OK!\n");
		return OK;
	 }
	 else {
		printf("ECC FAIL!\n");
	       return FAIL;
	 }


}


static int NF8_WritePage(U32 block,U32 page,U8 *buffer)
{
    int i;
	U32 blockPage, Mecc, Secc;
	U8 *bufPt=buffer;

	NFConDone=0;
    rNFCONT|=(1<<9);
    rNFCONT|=(1<<10);
    pISR_NFCON= (unsigned)NFCon_Int;
    rSRCPND=BIT_NFCON;
    rINTMSK=~(BIT_NFCON);
	  
	NF_RSTECC();    // Initialize ECC
    NF_MECC_UnLock();
	blockPage=(block<<5)+page;

	NF_nFCE_L(); 
	NF_CMD(0x0);//??????
	NF_CMD(0x80);   // Write 1st command
	NF_ADDR(0);			    // Column 0
	NF_ADDR(blockPage&0xff);	    //
	NF_ADDR((blockPage>>8)&0xff);   // Block & page num.
	NF_ADDR((blockPage>>16)&0xff);  //

	
#if TRANS_MODE==C_LANG
     
	for(i=0;i<512;i++) {
		NF_WRDATA8(*bufPt++);	// Write one page to NFM from buffer
    }
#elif TRANS_MODE==DMA
      
	// Memory to Nand dma setting
	rSRCPND=BIT_DMA0;	// Init DMA src pending.
	rDISRC0=(unsigned)bufPt; 	// Nand flash data register
	rDISRCC0=(0<<1) | (0<<0); //arc=AHB,src_addr=inc
	rDIDST0=NFDATA;
	rDIDSTC0=(0<<1) | (1<<0); //dst=AHB,dst_addr=fix;
	rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(512/4);
	//  only unit transfer in writing!!!!
	//Handshake,AHB,interrupt,(unit),whole,S/W,no_autoreload,word,count=128;
	
	// DMA on and start.
	rDMASKTRIG0=(1<<1)|(1<<0);
	
	while(!(rSRCPND & BIT_DMA0));	// Wait until Dma transfer is done.
	rSRCPND=BIT_DMA0;	
#endif
/*
      NF_MECC_Lock();
// Get ECC data.
	// Spare data for 8bit
	// byte  0   1    2    3    4   5
	// ecc  [0]  [1]  [2]  [3]  x   [Bad marking]
	Mecc = rNFMECC0;
	se8Buf[0]=(U8)(Mecc&0xff);
	se8Buf[1]=(U8)((Mecc>>8) & 0xff);
	se8Buf[2]=(U8)((Mecc>>16) & 0xff);
	se8Buf[3]=(U8)((Mecc>>24) & 0xff);
	se8Buf[5]=0xffff;		// Marking good block

	//Write extra data(ECC, bad marking)
	for(i=0;i<16;i++) {
		NF_WRDATA8(se8Buf[i]);	// Write spare array(ECC and Mark)
		NF8_Spare_Data[i]=se8Buf[i];
    }  

 	NF_CLEAR_RB();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图一区二区| gogo大胆日本视频一区| 精品国产百合女同互慰| 国产精品69毛片高清亚洲| 中文字幕免费不卡| 欧美日韩大陆在线| 丰满岳乱妇一区二区三区| 亚洲一区免费在线观看| 精品99一区二区| 欧美三级在线视频| 成人av在线资源网站| 精品中文字幕一区二区小辣椒| 一区在线播放视频| 欧美大片在线观看一区二区| 色综合天天综合网天天看片| 精久久久久久久久久久| 亚洲美女一区二区三区| 久久久五月婷婷| 欧美成人免费网站| 欧美一区二区三区四区高清| 欧美性猛片aaaaaaa做受| 粉嫩av一区二区三区| 激情文学综合网| 五月天亚洲婷婷| 一区二区在线电影| 亚洲日本在线视频观看| 久久久亚洲综合| 国产精品对白交换视频| 国产日韩一级二级三级| 欧美一区二区三区四区五区| 欧美偷拍一区二区| 69堂亚洲精品首页| 久久综合丝袜日本网| 日韩精品一区二区三区swag | 精品奇米国产一区二区三区| 日韩一区二区免费在线电影 | 国产精品热久久久久夜色精品三区| 久久综合九色综合欧美98| 国产午夜一区二区三区| 亚洲欧美日韩系列| 青青草原综合久久大伊人精品优势| 亚洲综合男人的天堂| 亚洲成a人在线观看| 香蕉成人啪国产精品视频综合网| 亚洲成av人片在线观看无码| 午夜精品免费在线| 国产老肥熟一区二区三区| 国产精品自拍一区| 99久久777色| 日韩精品影音先锋| 一区二区在线观看免费视频播放| 日韩精品亚洲一区| 高清在线观看日韩| 欧美亚一区二区| 欧美日韩视频专区在线播放| 国产欧美va欧美不卡在线| 日韩国产高清影视| 91蝌蚪porny成人天涯| 2020日本不卡一区二区视频| 夜夜嗨av一区二区三区中文字幕| 九九在线精品视频| 精品视频色一区| 亚洲欧美另类小说视频| 丁香啪啪综合成人亚洲小说| 不卡的看片网站| 久久久一区二区| 国产成人av电影| 日韩欧美亚洲另类制服综合在线 | 国产精品久久免费看| 日欧美一区二区| 97成人超碰视| 欧美经典一区二区| 精品中文av资源站在线观看| 欧美蜜桃一区二区三区| 一区二区三区精密机械公司| eeuss鲁片一区二区三区在线观看| 久久综合久久综合亚洲| 美女视频黄免费的久久 | 欧美三区免费完整视频在线观看| 中文字幕不卡三区| 91毛片在线观看| 国产欧美一区二区精品秋霞影院 | 国产精品麻豆视频| 91香蕉视频mp4| 国产精品一品视频| 国产欧美一区二区精品久导航| 波多野结衣在线一区| 国产精品人妖ts系列视频| 不卡av在线免费观看| 亚洲婷婷综合色高清在线| av激情成人网| 亚洲伦理在线精品| 日韩精品一区在线观看| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 一区二区三区国产精品| 欧美日韩国产不卡| 国产精品一区在线| 中文字幕一区二区三区不卡| 91网址在线看| 日韩电影在线一区二区三区| www一区二区| 91蝌蚪porny成人天涯| 日韩—二三区免费观看av| 国产日韩欧美综合一区| www.av亚洲| 亚洲国产综合视频在线观看| 精品国产免费视频| 91小视频在线免费看| 久久国产三级精品| 亚洲国产wwwccc36天堂| 精品欧美一区二区三区精品久久| 一区二区三区波多野结衣在线观看 | 久久久精品国产免费观看同学| 国产成人在线网站| 亚洲成a人v欧美综合天堂| 国产精品视频第一区| 欧美一区二区视频在线观看| 成人丝袜高跟foot| 国产精品影音先锋| 免费一级欧美片在线观看| 一区二区三区四区不卡在线| 国产网红主播福利一区二区| 3751色影院一区二区三区| 色诱视频网站一区| 成人永久免费视频| 欧美aⅴ一区二区三区视频| 婷婷丁香久久五月婷婷| 亚洲午夜精品久久久久久久久| 最新国产の精品合集bt伙计| 精品国产乱码久久| 26uuu另类欧美| 久久精品视频免费| 欧美国产丝袜视频| 国产精品视频在线看| 久久人人爽人人爽| 欧美激情综合五月色丁香 | 日韩欧美国产三级| 欧美一级日韩免费不卡| 欧美成人乱码一区二区三区| 日韩欧美国产高清| 国产欧美精品区一区二区三区| 国产欧美日韩激情| 国产精品大尺度| 亚洲日本在线视频观看| 老司机免费视频一区二区| 久久精品国产秦先生| 国产精品一区二区久久精品爱涩| 国产91露脸合集magnet| 91看片淫黄大片一级在线观看| 欧美性大战久久久久久久蜜臀| 7777精品伊人久久久大香线蕉的 | 欧洲精品视频在线观看| 欧美二区在线观看| 国产日韩欧美精品电影三级在线| 中文字幕一区视频| 奇米精品一区二区三区在线观看| www.欧美.com| 欧美一级搡bbbb搡bbbb| **网站欧美大片在线观看| 日韩精彩视频在线观看| 成人免费福利片| 欧美一区二区大片| 亚洲视频资源在线| 麻豆91精品视频| 91国内精品野花午夜精品 | 不卡av在线免费观看| 欧美一区二区三区在线视频| 中文字幕一区在线观看| 韩国理伦片一区二区三区在线播放| 9久草视频在线视频精品| 久久综合999| 韩国视频一区二区| 精品美女在线播放| 亚洲电影一级黄| 欧美日韩精品二区第二页| 亚洲欧美日韩国产手机在线| 9人人澡人人爽人人精品| 久久久99精品免费观看| 精品午夜久久福利影院| 日韩欧美国产综合一区| 五月天久久比比资源色| 色婷婷综合久久久中文一区二区| 国产精品超碰97尤物18| 成人黄色小视频在线观看| 中文av一区二区| 国产精品2024| 国产精品女同互慰在线看| 成人18精品视频| 国产精品高潮呻吟| 91美女蜜桃在线| 手机精品视频在线观看| 欧美日韩二区三区| 理论片日本一区| 日韩美女视频19| 欧美蜜桃一区二区三区| 国产精品69毛片高清亚洲| 国产喷白浆一区二区三区| 欧美日韩国产中文| 国产精品88888| 亚洲一区在线观看免费 |