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

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

?? sst39vf160.c

?? S3C2410 NOR FALSH讀寫原代碼.
?? C
字號:
/****************************************************************************
【文  件  名  稱】SST39VF160.c
【功  能  描  述】FS2410XP教學(xué)平臺實驗程序
【程  序  版  本】3.0
【創(chuàng)建及創(chuàng)建日期】優(yōu)龍公司/2005-XX-XX
【修改及修改日期】2005-5-23
****************************************************************************/
//頭文件定義
#include "config.h"
#include "board.h"

#ifdef	SST39VF160_SUPPORT

//#define	ROM_BASE	0x10000000	//地址重定向到0x10000000
#define	CMD_ADDR0	*((volatile U16 *)(0x5555*2+ROM_BASE))
#define	CMD_ADDR1	*((volatile U16 *)(0x2aaa*2+ROM_BASE))

#define	CHECK_DELAY	100000
#define	NorFlashRead(dst, src, size)	memcpy((char *)(dst), (char *)(ROM_BASE+(src)), (int)(size))

static U16 state;
static U16 support;
static U32 chip_id; 

void outportw(U16, U32);
U16 inportw(U32);

/********************************************************************
Function name: CFIQueryExit
Parameter    : void
Description	 : CFI查詢退出
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
static void CFIQueryExit(void)
{
	outportw(0xaaaa, ROM_BASE+0xaaaa);//CMD_ADDR0 = 0xaaaa;
	outportw(0x5555, ROM_BASE+0x5554);//CMD_ADDR1 = 0x5555;
	outportw(0xf0f0, ROM_BASE+0xaaaa);//CMD_ADDR0 = 0xf0f0;
	state &= 0xfc;	
}

/********************************************************************
Function name: SWPIDExit
Parameter    : void
Description	 : 軟件ID的退出
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
static void SWPIDExit(void)
{
	outportw(0xf0f0, ROM_BASE+0xaaaa);//CMD_ADDR0 = 0xf0f0;
	state &= 0xfc;
}


/********************************************************************
Function name: SWPIDEntry
Parameter    : void
Description	 : 軟件ID的入口
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
static void SWPIDEntry(void)
{
	if(state&1)
	{
		if(state&2)
			return;
		else
			CFIQueryExit();
	}

	outportw(0xaaaa, ROM_BASE+0xaaaa);//CMD_ADDR0 = 0xaaaa;
	outportw(0x5555, ROM_BASE+0x5554);//CMD_ADDR1 = 0x5555;
	outportw(0x9090, ROM_BASE+0xaaaa);//CMD_ADDR0 = 0x9090;
	state |= 3;
}


/********************************************************************
Function name: GetFlashID
Parameter    : void
Description	 : 讀取Nor Flash的ID號
Return		 : 返回Nor Flash的ID號
Argument     :                                    
Autor & date :
*********************************************************************/
static U32 GetFlashID(void)
{
	U32 i;
	
	SWPIDEntry();
	//i  = *(U16 *)(0x0+ROM_BASE);
	//i |= (*(U16 *)(2+ROM_BASE))<<16;
	i  = inportw(ROM_BASE);
	i |= inportw(ROM_BASE+2)<<16;
	SWPIDExit();
	return i;	
}

/********************************************************************
Function name: SectorErase
Parameter    : sector : 要擦除的扇區(qū)地址
Description	 : 擦除sector地址的扇區(qū)
Return		 : 返回0或非0數(shù)值
Argument     : 返回0:燒寫成功	返回非0:燒寫不成功                                  
Autor & date :
*********************************************************************/
static int SectorErase(U32 sector)
{
	U32 tm, d1 ,d2;
	
	if(state&1) {
		if(state&2)
			SWPIDExit();
		else
			CFIQueryExit();						
	}
	
	sector += ROM_BASE;
	outportw(0xaaaa, ROM_BASE+0xaaaa);
	outportw(0x5555, ROM_BASE+0x5554);
	outportw(0x8080, ROM_BASE+0xaaaa);
	outportw(0xaaaa, ROM_BASE+0xaaaa);
	outportw(0x5555, ROM_BASE+0x5554);
	outportw(0x3030, sector);	
	d2 = inportw(sector);
	
	tm = CHECK_DELAY;
	while(1) {
	
		tm--;
		if(!tm)
			return -1;
		
		d1 = d2;
		d2 = inportw(sector);		
		
		if((d1^d2)&(1<<6)) {	//D6 == D6
			//tm--;
			//if(!tm)
			//	return -1;
			continue;
		}
		
		if(inportw(sector)==0xffff) {
			return 0;
		}
	}
}

/********************************************************************
Function name: FlashProg
Parameter    : ProgStart : 目的地址
			   *DataPtr  : 源地址
			   WorkCnt   : 要寫入的數(shù)據(jù)長度的大小
Description	 : 將大小為size的數(shù)據(jù)從src地址寫到dst地址
Return		 : 返回0或非0數(shù)值
Argument     : 返回0:燒寫成功	返回非0:燒寫不成功                                  
Autor & date :
*********************************************************************/
static int FlashProg(U32 ProgStart, U16 *DataPtr, U32 WordCnt)
{	
	ProgStart += ROM_BASE;
	
	for( ; WordCnt; ProgStart+=2, DataPtr++, WordCnt--) {
		
		U32 tm;
		outportw(0xaaaa, ROM_BASE+0xaaaa);
		outportw(0x5555, ROM_BASE+0x5554);
		outportw(0xa0a0, ROM_BASE+0xaaaa);
		outportw(*DataPtr, ProgStart);
		
		tm = CHECK_DELAY;
		while(1) {			
			if((inportw(ProgStart)^inportw(ProgStart))&(0x40)) {	//D6 == D6
				tm--;
				if(!tm)
					return -1;
				continue;
			}
				
			if(inportw(ProgStart)==*DataPtr)
				break;					//D7 == D7
			tm--;
			if(!tm)
				return -1;
		}
	}
	return 0;
}

/********************************************************************
Function name: NorFlashProg
Parameter    : dst : 目的地址
			   src : 源地址
			   size: 要寫入的數(shù)據(jù)長度的大小
Description	 : 將大小為size的數(shù)據(jù)從src地址寫到dst地址
Return		 : void
Argument     : 從指定扇區(qū)begin開始,將size個來自指針data的數(shù)據(jù)編程到Flash                                
Autor & date :
*********************************************************************/
void NorFlashProg(U32 dst, U32 src, U32 size)
{
	char buf[0x1000];
	U32 tmp = 0x1000-(dst&0xfff);
	int err;

	if(support)	{
	
		if((dst>ROM_SIZE)||(dst&1)) {
			printf("Invalid flash address, the address is from 0~0x%x, 16Bits aligned\n", ROM_SIZE);
			return;
		}
	
		if(tmp>size)
			tmp = size;
		if(tmp&1)
			tmp++;
	
		for(; size;) {
			if(tmp<0x1000) {
				NorFlashRead(buf, (dst&~0xfff), 0x1000);
				memcpy(buf+(dst&0xfff), (char *)src, tmp);
			} else {
				memcpy(buf, (char *)src, 0x1000);
			}
			
			err = SectorErase(dst&~0xfff);
			if(err) {	//4K Bytes boudary
				printf("Erase 0x%x Fail!\n", dst&~0xfff);
				return;
			}
			
			printf("Program 0x%x %s\n", dst&~0xfff, FlashProg(dst&~0xfff, (U16 *)buf, 0x1000>>1)?"Fail":"Ok");
		
			size -= tmp;
			dst  += tmp;
			src  += tmp;
			tmp   = (size>0x1000)?0x1000:size;
		}	
	}
	return;
}

/********************************************************************
Function name: NorFlashInit
Parameter    : void
Description	 : 初始化Nor Flash
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
void NorFlashInit(void)
{
	chip_id = GetFlashID();
	
	support = 0;
	if((chip_id==0x234b00bf)||(chip_id==0x278200bf)||(chip_id==0x22c400c2))
		support = 1;
}


/********************************************************************
Function name: NorFlashStatusRep
Parameter    : void
Description	 : 讀取Nor Flash的相關(guān)信息
Return		 : void
Argument     :                                    
Autor & date :
*********************************************************************/
void NorFlashStatusRep(void)
{
	printf("Nor Flash ID is : %x\n", chip_id);
	if(support) {		
		if(chip_id==0x234b00bf)
			printf("SST39VF1601 Found\n");
		if(chip_id==0x278200bf)
			printf("SST39VF160 Found\n");
		if(chip_id==0x22c400c2)
			printf("MX29LV160 Found\n");
	} else
		printf("Unknown Flash Type\n");
}

/********************************************************************
Function name: NorFlash_Test
Parameter    : void         
Description	 : Nor Flash讀寫函數(shù)
Return		 : void
Argument     :                            
Autor & date : void
*********************************************************************/
void NorFlash_Test( void )
{
	U32 m,n ;
	int err ;
	U8 data[36] ;
	
	NorFlashInit() ;
	NorFlashStatusRep() ;
	
	printf("\nSector Erase Test\n\n" );
	for( m = 0x100000 ; m < 0x105000 ; m += 0x1000 )
	{
		err = SectorErase( m );
	
		if(err) printf("\tErase 0x%x Fail!!!\n", m );
		else printf("\tErase 0x%x OK!!!\n", m );
	}

	//給要寫入nandflash的數(shù)組賦值
	for( m = 0 ; m < 36 ; m++ )	data[m] = m ;
	printf("write data : \n");
	for( m = 0; m < 3; m++ )
    {
		for( n = 0; n < 12; n++ )
		   printf( "%02x ", data[m*12+n] ) ;
		    
		printf("\n");
    }
    
	printf("\nProgram Flash Test\n\n" );
	NorFlashProg( 0x100000, (int)data, 560 ) ;

	for( m = 0 ; m < 36 ; m++ )	data[m] = 0 ;

	//DataPtr =(U16)data ;
	NorFlashRead( data,0x100000, 36 ) ;


    printf("\nread data from 0x100000 :\n\n");
    for( m = 0; m < 3; m++ )
    {
		for( n = 0; n < 12; n++ )
		  printf( "%02x ", data[m*12+n] ) ;
		    
		printf("\n");
    }
 
}
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美成人一区| 久久久99免费| 国产精品自拍网站| 亚洲最新在线观看| 久久精品网站免费观看| 欧美妇女性影城| 高清不卡一区二区在线| 喷水一区二区三区| 一区二区在线观看视频| 国产精品人妖ts系列视频| 欧美一区二区黄| 欧美写真视频网站| 色综合天天综合色综合av| 国产精品综合二区| 久久se这里有精品| 丝袜国产日韩另类美女| 亚洲欧洲成人自拍| 亚洲国产精品高清| 精品国产人成亚洲区| 欧美一级理论性理论a| 欧洲人成人精品| av激情成人网| 风间由美性色一区二区三区| 国产曰批免费观看久久久| 日韩中文字幕91| 亚洲国产日韩精品| 亚洲免费资源在线播放| 自拍偷自拍亚洲精品播放| 亚洲国产精品二十页| 久久精品视频免费观看| 精品国产sm最大网站免费看| 91精品国产欧美一区二区| 欧美日韩一二三区| 欧美色综合久久| 在线视频欧美精品| 色偷偷88欧美精品久久久| 色综合中文综合网| 欧美午夜精品免费| 色综合天天在线| 日本乱码高清不卡字幕| 欧美最猛性xxxxx直播| 在线观看亚洲a| 欧美日韩国产中文| 在线播放亚洲一区| 日韩午夜激情电影| 久久综合色之久久综合| 2017欧美狠狠色| 国产日本欧洲亚洲| 中文字幕在线观看一区| 国产精品福利在线播放| 亚洲欧洲日韩av| 亚洲小说欧美激情另类| 婷婷综合久久一区二区三区| 日韩高清一级片| 久久国产剧场电影| 国产不卡在线一区| 色综合久久久久| 欧美男女性生活在线直播观看| 91精品国产欧美一区二区成人| 精品国产一二三区| 国产精品美女久久久久av爽李琼 | 欧美日韩精品一区二区三区| 欧美三级午夜理伦三级中视频| 欧美日韩精品综合在线| 日韩欧美一区在线| 亚洲国产精品av| 一区二区三区在线观看国产 | 东方aⅴ免费观看久久av| www.欧美亚洲| 欧美日韩激情一区二区三区| 欧美电视剧免费全集观看| 国产欧美一区二区在线| 亚洲女女做受ⅹxx高潮| 全国精品久久少妇| 成人av在线电影| 欧美日韩免费高清一区色橹橹 | 色综合久久久久综合| 欧美精品tushy高清| 久久美女高清视频| 一区二区成人在线观看| 久久精品国产精品亚洲红杏| 成人黄色在线视频| 欧美日韩国产成人在线91| 亚洲精品一区二区三区99| 亚洲精品成人少妇| 精彩视频一区二区三区| 色网站国产精品| 久久免费精品国产久精品久久久久| 亚洲精品国产精华液| 国内精品在线播放| 欧美在线观看视频在线| 国产嫩草影院久久久久| 日本一不卡视频| av不卡一区二区三区| 精品久久人人做人人爰| 亚洲午夜精品网| 不卡电影免费在线播放一区| 91精品久久久久久蜜臀| 亚洲欧美日韩精品久久久久| 国产一区二区三区最好精华液| 欧美中文字幕不卡| 国产精品欧美一区喷水| 美女国产一区二区| 欧美性猛片xxxx免费看久爱| 国产精品国产自产拍在线| 久久er精品视频| 欧美日韩免费在线视频| 亚洲天堂av一区| 国产成人精品免费视频网站| 日韩一级视频免费观看在线| 亚洲另类一区二区| 成人黄色777网| 久久亚洲精精品中文字幕早川悠里 | 亚洲欧美偷拍另类a∨色屁股| 精品午夜久久福利影院| 欧美精品v国产精品v日韩精品| 综合av第一页| 99在线视频精品| 亚洲国产成人午夜在线一区| 国产一区二三区| 日韩女优av电影| 日本成人在线视频网站| 欧美色涩在线第一页| 亚洲欧美激情视频在线观看一区二区三区 | 久久99久国产精品黄毛片色诱| 欧美精品三级日韩久久| 亚洲一区二区三区四区的| 一本久久a久久精品亚洲| 国产精品国产三级国产aⅴ入口 | 欧美图片一区二区三区| 亚洲欧美日韩电影| 91美女福利视频| 亚洲人精品一区| 色国产综合视频| 亚洲一区影音先锋| 欧美三级韩国三级日本三斤| 亚洲国产精品久久人人爱蜜臀| 欧美丝袜丝交足nylons| 亚洲电影一级片| 欧美一区二区高清| 久久99久久久欧美国产| 久久九九99视频| 国产91对白在线观看九色| 国产精品久久夜| 色综合中文字幕国产 | 色天天综合色天天久久| 亚洲理论在线观看| 欧美日韩国产精品成人| 奇米在线7777在线精品| 欧美mv日韩mv亚洲| 国产成人在线视频网站| 国产精品欧美经典| 91麻豆国产香蕉久久精品| 亚洲午夜影视影院在线观看| 在线不卡一区二区| 激情六月婷婷综合| 国产精品嫩草99a| 91久久奴性调教| 日本欧美加勒比视频| 久久久久久久久99精品| 成人激情免费电影网址| 一区二区在线看| 日韩视频永久免费| 国产91在线观看丝袜| 亚洲自拍偷拍图区| 精品理论电影在线观看| 不卡av电影在线播放| 亚洲成a人片综合在线| 日韩精品中文字幕一区| jlzzjlzz欧美大全| 丝袜亚洲另类丝袜在线| 久久亚洲精精品中文字幕早川悠里 | 午夜一区二区三区在线观看| 精品免费国产二区三区| 99国产精品久久| 蜜臂av日日欢夜夜爽一区| 国产精品成人免费| 欧美精品xxxxbbbb| 粉嫩绯色av一区二区在线观看| 一区二区三区四区亚洲| 精品久久国产老人久久综合| 波多野结衣在线aⅴ中文字幕不卡| 亚洲18色成人| 中文在线免费一区三区高中清不卡| 在线影院国内精品| 国产另类ts人妖一区二区| 亚洲精品乱码久久久久久久久 | 欧美女孩性生活视频| 懂色av一区二区三区免费观看| 亚洲成人av中文| 国产日韩欧美一区二区三区乱码 | 91欧美一区二区| 精品无人码麻豆乱码1区2区| 成人做爰69片免费看网站| 午夜精品久久一牛影视| 亚洲国产成人自拍| 日韩美女一区二区三区四区| 色综合久久66| 高清在线不卡av| 久久精品国产精品亚洲综合|