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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nandflash.c

?? S3C2410 NANDFLASH驅動原代碼.
?? C
?? 第 1 頁 / 共 2 頁
字號:
		stat = NFRdDat();
		//printf("%x\n", stat);
	}while(!(stat&0x40));
	NFWrCmd(READCMD0);
	return stat&1;
}
#endif

/********************************************************************
Function name: NFReadID
Parameter    : void     
Description	 : 讀取NAND FLASH的ID號
Return		 : 返回讀取的ID號
Argument     :                            
Autor & date : void
*********************************************************************/
static U32 NFReadID(void)
{
	U32 id, loop = 0;

	NFChipEn();
	NFWrCmd(READIDCMD);
	NFWrAddr(0);
	while(NFIsBusy()&&(loop<10000)) loop++;
	if(loop>=10000)
		return 0;
	id  = NFRdDat()<<8;
	id |= NFRdDat();
	NFChipDs();
	
	return id;
}

/********************************************************************
Function name: NFReadStat
Parameter    : void     
Description	 : 讀取NAND FLASH的狀態
Return		 : 返回讀取的狀態
Argument     :                            
Autor & date : void
*********************************************************************/
static U16 NFReadStat(void)
{
	U16 stat;
	
	NFChipEn();	
	NFWrCmd(QUERYCMD);
	stat = NFRdDat();	
	NFChipDs();
	
	return stat;
}


/********************************************************************
Function name: NFEraseBlock
Parameter    : U32 addr : 要擦除塊的地址     
Description	 : 擦除地址為addr的塊
Return		 : void
Argument     :                            
Autor & date : void
*********************************************************************/
static U32 NFEraseBlock(U32 addr)
{
	U8 stat;

	addr &= ~0x1f;
		
	NFChipEn();	
	NFWrCmd(ERASECMD0);		
	NFWrAddr(addr);
	NFWrAddr(addr>>8);
	if(NandAddr)
		NFWrAddr(addr>>16);
	NFWrCmd(ERASECMD1);		
	stat = NFWaitBusy();
	NFChipDs();
	
#ifdef	ER_BAD_BLK_TEST
	if(!((addr+0xe0)&0xff)) stat = 1;	//just for test bad block
#endif
	putch('.');
	return stat;
}

/********************************************************************
Function name: NandReadPage
Parameter    : addr : 地址    *buf:要寫入的數據
Description	 : 向地址addr寫入數據*buf
Return		 : void
Argument     : addr = page address                                   
Autor & date :
*********************************************************************/
static void NFReadPage(U32 addr, U8 *buf)
{
	U16 i;
	
	NFChipEn();
	NFWrCmd(READCMD0);
	NFWrAddr(0);
	NFWrAddr(addr);
	NFWrAddr(addr>>8);
	if(NandAddr)
		NFWrAddr(addr>>16);
//	InitEcc();
	NFWaitBusy();		
	for(i=0; i<512; i++)
		buf[i] = NFRdDat();		
	NFChipDs();
}

/********************************************************************
Function name: NandWritePage
Parameter    : addr : 地址    *buf:要寫入的數據 blk_idx
Description	 : 向地址addr寫入數據*buf
Return		 : void
Argument     : addr = page address                                   
Autor & date :
*********************************************************************/
//addr = page address
static U32 NFWritePage(U32 addr, U8 *buf, U16 blk_idx)
{
	U16 i, stat;
//	U8 tmp[3];
	U8 ecc_code[3];
	U8 oob_info[16];
		
	for(i=0; i<sizeof(oob_info); i++)
		oob_info[i] = 0xff;
	
	nand_calculate_ecc(buf, ecc_code);
	oob_info[eccpos[0]] = ecc_code[0];
	oob_info[eccpos[1]] = ecc_code[1];
	oob_info[eccpos[2]] = ecc_code[2];
	nand_calculate_ecc(buf+256, ecc_code);
	oob_info[eccpos[3]] = ecc_code[0];
	oob_info[eccpos[4]] = ecc_code[1];
	oob_info[eccpos[5]] = ecc_code[2];
	oob_info[BLK_IDXL]  = blk_idx;
	oob_info[BLK_IDXH]  = blk_idx>>8;
	oob_info[FMT_TAG]   = format_tags[addr&0x1f];
	
	NFChipEn();
	NFWrCmd(PROGCMD0);
	NFWrAddr(0);
	NFWrAddr(addr);
	NFWrAddr(addr>>8);
	if(NandAddr)
		NFWrAddr(addr>>16);
//	InitEcc();	
	for(i=0; i<512; i++)
		NFWrDat(buf[i]);
		
	if(!addr) {
		NFWrDat('b');
		NFWrDat('o');
		NFWrDat('o');
		NFWrDat('t');		
	} else {		
		for(i=0; i<sizeof(oob_info); i++)
			NFWrDat(oob_info[i]);
	}
    	
	NFWrCmd(PROGCMD1);
	stat = NFWaitBusy();
	NFChipDs();
	
#ifdef	WR_BAD_BLK_TEST
	if((addr&0xff)==0x17) stat = 1;	//just for test bad block
#endif
	
	if(stat)
		printf("Write nand flash 0x%x fail\n", addr);
	else {	
		U8 RdDat[512];
		
		NFReadPage(addr, RdDat);
		for(i=0; i<512; i++)
			if(RdDat[i]!=buf[i]) {
				printf("Check data at page 0x%x, offset 0x%x fail\n", addr, i);
				stat = 1;
				break;
			}
	}
		
	return stat;	
}

/********************************************************************
Function name: NandFlashInit
Parameter    : void
Description	 : 初始化Nand Flash
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
static U32 nand_id;
void NandFlashInit(void)
{
	int i;	
	
	support = 0;
	nand_id = NFReadID();
	
	for(i=0; NandFlashChip[i].id!=0; i++)
		if(NandFlashChip[i].id==nand_id) {			
			nand_id = i;
			NandFlashSize = NandFlashChip[i].size;
			support  = 1;
			NandAddr = NandFlashSize>SIZE_32M;
			if(!pNandPart[0].size) {
				pNandPart[0].offset = 0;
				pNandPart[0].size   = NandFlashSize;
				pNandPart[1].size   = 0;				
			}			
			return;
		}
	
}

/********************************************************************
Function name: NandFlashStatusRep
Parameter    : void
Description	 : 讀取Nand Flash的相關信息
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
void NandFlashStatusRep(void)
{
	if(support) {
		printf("Nand Flash ID is 0x%x, Size = %dM, Status = 0x%x\n", NandFlashChip[nand_id].id, NandFlashChip[nand_id].size>>20, NFReadStat());
	} else {
		printf("No supported Nand Flash Found!\n");
	}
}

/********************************************************************
Function name: NandFlash_Test
Parameter    : void
Description	 : 用來測試NAND讀寫實驗
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/

void NandFlash_Test( void )
{
	U16 m,n ;
	U8 d[640] ;
	
	//擦除NandFlash
  	printf( "\nNand Flash Erase Block!\n\n" ) ;
	for( m = 0 ; m < 0x200 ; m += 0x20 )		NFEraseBlock( m ) ;

	//給要寫入nandflash的數組賦值
	for( m = 0 ; m < 640 ; m++ )	d[m] = m ;
	
	//頁寫方式將數組依次寫入nandflash,一次寫入512字節
   	printf( "\nNand Flash Write Page!\n\n" ) ;
	NFWritePage( 0, d, 0 ) ;

	//將數組全部清零
	for( m = 0 ; m < 640 ; m++ )	d[m] = 0 ;

	//頁讀方式將nandflash的0地址數據讀出并寫到數組
   	printf( "\nNand Flash Read Page!\n\n" ) ;
	NFReadPage( 0, d ) ;

	//將數組里面的數據依次打印出來,驗證寫入與讀出是否相符
    for( m = 0; m < 40; m++ )
    {
		for( n = 0; n < 16; n++ )
		    printf( "%2x ", d[m*16+n] ) ;
		printf("\n");
    }

}
#endif	/* NAND_SUPPORT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区黄视频 | 欧美精三区欧美精三区 | 亚洲欧美日韩久久| 不卡欧美aaaaa| 亚洲色图19p| 欧美男男青年gay1069videost| 亚洲精品综合在线| 欧美日韩的一区二区| 美女视频黄免费的久久| 精品欧美乱码久久久久久| 国产精品77777| 亚洲欧美中日韩| 欧美日韩和欧美的一区二区| 日本欧美在线观看| 国产无人区一区二区三区| av综合在线播放| 午夜伦欧美伦电影理论片| 欧美不卡一区二区三区四区| 国产宾馆实践打屁股91| 一区二区三区在线视频观看| 欧美日韩国产另类不卡| 国产精品影音先锋| 亚洲综合男人的天堂| 91精品在线观看入口| 粉嫩嫩av羞羞动漫久久久| 一区二区三区精品| 2021久久国产精品不只是精品| www.欧美.com| 秋霞国产午夜精品免费视频 | 欧美激情一区不卡| 在线观看亚洲精品| 国产一区二区三区免费观看| 亚洲桃色在线一区| 精品国产制服丝袜高跟| 色诱亚洲精品久久久久久| 精品一区二区三区在线视频| 亚洲欧美激情小说另类| 欧美精品一区二区久久婷婷| 色天天综合久久久久综合片| 激情小说亚洲一区| 亚洲激情图片qvod| 国产调教视频一区| 7777精品伊人久久久大香线蕉超级流畅| 国产精品77777| 美女视频一区二区| 亚洲狼人国产精品| 日本一区免费视频| 日韩视频免费观看高清完整版在线观看 | 色爱区综合激月婷婷| 国产露脸91国语对白| 日韩va亚洲va欧美va久久| 中文字幕一区视频| 久久只精品国产| 538在线一区二区精品国产| 9人人澡人人爽人人精品| 国产精品99久久不卡二区| 日韩电影在线一区| 亚洲1区2区3区4区| 一区二区三区在线观看国产| 久久伊人中文字幕| 欧美一区二区福利视频| 欧美精品日日鲁夜夜添| 在线视频你懂得一区二区三区| 成人免费高清视频| 成人午夜在线视频| 成人免费观看av| 粉嫩绯色av一区二区在线观看| 国内久久精品视频| 激情另类小说区图片区视频区| 日韩电影在线看| 日本欧美在线看| 男人操女人的视频在线观看欧美| 亚洲成人在线网站| 亚洲香蕉伊在人在线观| 一区二区三区91| 亚洲成人第一页| 三级亚洲高清视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲国产综合在线| 天天影视涩香欲综合网| 图片区小说区国产精品视频| 日韩国产欧美三级| 麻豆视频观看网址久久| 另类小说欧美激情| 国产乱子轮精品视频| 国产精品亚洲一区二区三区妖精| 国产综合久久久久久鬼色| 国产一区二区三区免费在线观看 | 久久久www成人免费毛片麻豆 | 中文字幕在线不卡一区二区三区| 国产精品欧美一区喷水| 中文字幕一区二区不卡| 亚洲欧美国产毛片在线| 亚洲1区2区3区4区| 国内久久精品视频| 北条麻妃国产九九精品视频| 欧美大片一区二区| 久久九九国产精品| 成人免费在线观看入口| 亚洲一二三四久久| 乱一区二区av| www.av精品| 欧美日韩国产片| 久久综合色婷婷| 国产精品久久午夜| 亚洲一区二区影院| 蜜桃av一区二区在线观看 | 久久国产精品第一页| 国产电影一区在线| 色综合久久88色综合天天| 欧美一区二区三区在线观看视频| 亚洲精品在线免费观看视频| 中文字幕在线不卡国产视频| 午夜精品久久久| 国产精品91一区二区| 色欧美88888久久久久久影院| 欧美日韩性生活| 国产日韩精品一区二区三区| 亚洲一区二区三区视频在线播放| 韩国女主播成人在线观看| 色综合视频一区二区三区高清| 欧美一区二区日韩一区二区| 国产精品欧美久久久久一区二区 | 蜜臀av国产精品久久久久| 99久久伊人精品| 日韩精品在线看片z| 日韩毛片精品高清免费| 精品制服美女久久| 在线视频一区二区三区| 国产欧美1区2区3区| 日韩精品一级二级 | 蜜臀精品久久久久久蜜臀| 99免费精品在线观看| 亚洲精品一区二区在线观看| 亚洲与欧洲av电影| 国产不卡在线视频| 日韩欧美你懂的| 亚洲国产欧美一区二区三区丁香婷| 国产69精品久久99不卡| 欧美一区二区视频在线观看2020 | 99视频一区二区| 337p日本欧洲亚洲大胆精品| 亚洲国产wwwccc36天堂| 99久久精品99国产精品| 久久综合给合久久狠狠狠97色69| 亚洲国产一区二区在线播放| 99国产一区二区三精品乱码| 久久久蜜桃精品| 久久99精品久久久久久| 欧美精品一卡二卡| 亚洲成人av中文| 欧洲国产伦久久久久久久| 亚洲欧美福利一区二区| 粉嫩av一区二区三区粉嫩| 2020国产精品自拍| 久久99精品久久只有精品| 日韩一区国产二区欧美三区| 五月天欧美精品| 欧美精品在线观看播放| 亚洲777理论| 91精品黄色片免费大全| 首页亚洲欧美制服丝腿| 欧美精品乱码久久久久久| 亚洲大片一区二区三区| 在线播放欧美女士性生活| 午夜精品久久久久影视| 6080yy午夜一二三区久久| 日韩国产成人精品| 欧美一区二区免费视频| 波多野结衣在线一区| 国产欧美一区二区精品久导航| 激情小说欧美图片| 久久精品一区二区三区不卡 | 日韩精品视频网| 欧美一区二区视频观看视频| 毛片不卡一区二区| 久久免费视频一区| 成人精品国产福利| 亚洲视频一区在线| 在线观看视频一区| 天天综合色天天综合色h| 日韩一级完整毛片| 国产999精品久久久久久| 国产精品免费视频一区| 色丁香久综合在线久综合在线观看| 亚洲精品国产精品乱码不99| 精品视频一区三区九区| 日本欧美一区二区在线观看| 精品sm在线观看| av在线不卡网| 亚洲电影中文字幕在线观看| 日韩美女在线视频| 福利一区二区在线观看| 一区二区成人在线| 日韩一区二区免费视频| 国产成人一级电影| 亚洲在线免费播放| 久久美女艺术照精彩视频福利播放 | 91免费观看国产| 亚洲国产一区二区三区青草影视|