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

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

?? nand.c

?? NAND Flash Boot Please select function : 0 : USB download file(通過USB下載文件) 1 : Uart download fi
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
	
	NFChipEn();
	
	WrNFCmd(READCMD2);	//point to area c
	WrNFAddr(5);		//mark offset 4,5,6,7
	WrNFAddr(addr);
	WrNFAddr(addr>>8);
	if(NandAddr)
		WrNFAddr(addr>>16);
	WaitNFBusy();
	dat = RdNFDat();
	
	WrNFCmd(READCMD0);	//point to area a
	
	NFChipDs();

	return (dat!=0xff);
}

/************************************************************/
struct Partition{
	U32 offset;
	U32 size;
	char *name;
};
static struct Partition NandPart[] = {
	{0, 		 0x00040000, "bootloader"},		//256K
	{0x00040000, 0x001c0000, "zImage"},
	{0x00200000, 0x01e00000, "cramfs"},		//30M
	{0x02000000, 0x02000000, "WinCE"},	//30M
	{0,			 0         , 0}
};
/*
static void TestFunc(void)
{
	U32 i;
	U8 buf[512];
	
	if(EraseBlock(0x180))
		return;
	
	for(i=0; i<512; i++)
		buf[i] = i;
		
	WritePage(0x180, buf);	
	for(i=0; i<512; i++)
		buf[i] = 0;
	ReadPage(0x180, buf);
	
	for(i=0; i<512; i++)
		printf("%4x", buf[i]);
}
*/
static U32 StartPage, BlockCnt;
extern U32 downloadAddress; 
extern U32 downloadFileSize;


static int NandSelPart(char *info)
{
	U16 i, max_sel;
	struct Partition *ptr = NandPart;
	
	printf("Please select which region to %s : Esc to abort\n", info);
	
	for(i=0; ptr->size!=0; i++, ptr++)
		printf("%d : offset 0x%-8x, size 0x%-8x [%s]\n", i, ptr->offset, ptr->size, ptr->name);
		
	max_sel = i;
	
	while(1) {
		i = getch();
		if(i==0x1b)
			return -1;
		if((i>='0')&&(i<(max_sel+'0'))) {
			i -= '0';
			StartPage = NandPart[i].offset>>9;
			BlockCnt  = NandPart[i].size>>14;
			return i;
		}
	}	
}

static void WrFileToNF(void)
{
	int nf_part, i ,size, skip_blks;
	U32 ram_addr;
	U8 *ram_addr_ecc;
	
	nf_part = NandSelPart("write");
	if(nf_part<0)
		return;	
	
	if(downloadFileSize>NandPart[nf_part].size) {
		puts("Download file size is more large than selected partition size!!!\n");
//		return;
	}
	
	printf("Now write nand flash page 0x%x from ram address 0x%x, filesize = %d\n", StartPage, downloadAddress, downloadFileSize);
	puts("Are you sure? [y/n]\n");
	while(1) {
		char c = getch();
		if((c=='y')||(c=='Y'))
			break;
		if((c=='n')||(c=='N'))			
			return;
	}
	
	skip_blks = 0;
	ram_addr = downloadAddress;
	ram_addr_ecc = (U8 *)downloadAddress;
	size = downloadFileSize;
	for(i=0; size>0; )	{	
		if(!(i&0x1f)) {
			if(EraseBlock(i+StartPage)) {
			/*	NandPart[nf_part].size -= 32<<9;	//partition available size - 1 block size
				if(downloadFileSize>NandPart[nf_part].size) {
					puts("Program nand flash fail\n");
					return;
				}
				MarkBadBlk(i+StartPage);
				skip_blks++;				
				i += 32;				
				continue;*/
				goto WrFileToNFErr;
			}
		}
		if(WritePage(i+StartPage, (U8 *)ram_addr, ((U32)ram_addr_ecc-downloadAddress)>>14 )) {
			ram_addr -= (i&0x1f)<<9;
			size += (i&0x1f)<<9;
			i &= ~0x1f;
WrFileToNFErr:			
			NandPart[nf_part].size -= 32<<9;	//partition available size - 1 block size
			if(downloadFileSize>NandPart[nf_part].size) {
				puts("Program nand flash fail\n");
				return;
			}			
			MarkBadBlk(i+StartPage);
			skip_blks++;			
			i += 32;			
			continue;
		}
		ram_addr += 512;
		size -= 512;
		i++;
	}

	puts("Program nand flash partition success\n");
	if(skip_blks)
		printf("Skiped %d bad block(s)\n", skip_blks);
}

#define LINUX_PAGE_SHIFT	12
#define LINUX_PAGE_SIZE		(1<<LINUX_PAGE_SHIFT)
#define COMMAND_LINE_SIZE 	1024

struct param_struct {
    union {
	struct {
	    unsigned long page_size;			/*  0 */
	    unsigned long nr_pages;				/*  4 */
	    unsigned long ramdisk_size;			/*  8 */
	    unsigned long flags;				/* 12 */
#define FLAG_READONLY	1
#define FLAG_RDLOAD		4
#define FLAG_RDPROMPT	8
	    unsigned long rootdev;				/* 16 */
	    unsigned long video_num_cols;		/* 20 */
	    unsigned long video_num_rows;		/* 24 */
	    unsigned long video_x;				/* 28 */
	    unsigned long video_y;				/* 32 */
	    unsigned long memc_control_reg;		/* 36 */
	    unsigned char sounddefault;			/* 40 */
	    unsigned char adfsdrives;			/* 41 */
	    unsigned char bytes_per_char_h;		/* 42 */
	    unsigned char bytes_per_char_v;		/* 43 */
	    unsigned long pages_in_bank[4];		/* 44 */
	    unsigned long pages_in_vram;		/* 60 */
	    unsigned long initrd_start;			/* 64 */
	    unsigned long initrd_size;			/* 68 */
	    unsigned long rd_start;				/* 72 */
	    unsigned long system_rev;			/* 76 */
	    unsigned long system_serial_low;	/* 80 */
	    unsigned long system_serial_high;	/* 84 */
	    unsigned long mem_fclk_21285;       /* 88 */
	} s;
	char unused[256];
    } u1;
    union {
	char paths[8][128];
	struct {
	    unsigned long magic;
	    char n[1024 - sizeof(unsigned long)];
	} s;
    } u2;
    char commandline[COMMAND_LINE_SIZE];
};

//extern char boot_params[];
extern void  call_linux(U32 a0, U32 a1, U32 a2);
void memcpy(char *s1, const char *s2, int n);
void LoadRun(int part_sel)
{
	U32 i, ram_addr, buf = 0x30200000;
	struct param_struct *params = (struct param_struct *)0x30000100;
	int size;

//#ifdef SDRAM_SIZE8M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=8M";
//#elif defined SDRAM_SIZE16M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=16M";
//#elif defined SDRAM_SIZE32M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=32M";
//#elif defined SDRAM_SIZE64M
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=64M devfs=mount";
//#else
//	char *linux_params = "root=/dev/mtdblock2 load_ramdisk=0 init=/linuxrc console=ttyS0 mem=16M";

//	char *linux_params = "root=1f02 init=/linuxrc console=ttyS0,115200 devfs=mount display=sam240";//
	char *linux_params = "root=1f02 init=/linuxrc console=ttyS0,115200 devfs=mount display=shp240";//modify by czx
	NFSearchParams((char *)&Env);
	
	if(Env.boot_params[0]=='r')
		linux_params = Env.boot_params;

	StartPage = NandPart[part_sel].offset>>9;
	size = NandPart[part_sel].size;
	if(part_sel == 3)
		size = 0x01e00000;	//load wince ...;
	ram_addr = buf;	
	
	for(i=0; size>0; ) {
		if(!(i&0x1f)) {
			if(CheckBadBlk(i+StartPage)) {
				printf("Skipped bad block at 0x%x\n", i+StartPage);
				i += 32;
				size -= 32<<9;
				continue;
			}
		}
		ReadPage((i+StartPage), (U8 *)ram_addr);
		i++;
		size -= 512;
		ram_addr += 512;
	}
	DsNandFlash();

	for(i=0; i<(sizeof(struct param_struct)>>2); i++)
		((U32 *)params)[i] = 0;
	params->u1.s.page_size = LINUX_PAGE_SIZE;
	params->u1.s.nr_pages = (0x04000000 >> LINUX_PAGE_SHIFT);
	for(i=0; linux_params[i]; i++)
		params->commandline[i] = linux_params[i];
	
	//set nCS3 for cs8900,2006-08-25 modified by zhongzm
	rBWSCON |= 0x0000d000;
	rBWSCON &= ~0x00040000;

	puts("Set boot params = ");
	puts(linux_params);
	putch('\n');
	call_linux(0, 193, buf);
}

/************************************************************/
static int support=0;
static void InitNandFlash(void)
{	
	U32 i;
	
	InitNandCfg();
	i = ReadChipId();
//	printf("Read chip id = %x\n", i);	
	if((i==0x9873)||(i==0xec75))	
		NandAddr = 0;
	else if(i==0xec76)
	{	
		support=1;	//by chang
		NandAddr = 1;
	}
	else {	
		puts("Chip id error!!!\n");
		return;
	}
//	printf("Nand flash status = %x\n", ReadStatus());
}

void NandErase(void)
{
	int i, err = 0;
	
	InitNandFlash();
	
	i = NandSelPart("erase");
	if(i<0)
		return;	
	
	printf("Are you sure to erase nand flash from page 0x%x, block count 0x%x ? [y/n]\n", StartPage, BlockCnt);
	while(1) {
		char c;
		
		c = getch();
		if((c=='y')||(c=='Y'))
			break;
		if((c=='n')||(c=='N'))
			return;
	}	
	
	for(i=0; BlockCnt; BlockCnt--, i+=32) {
		if(EraseBlock(i+StartPage)) {
			err ++;
			puts("Press any key to continue...\n");
			getch();
		}
	}	

	DsNandFlash();		//disable nand flash interface
	puts("Erase Nand partition completed ");
	if(err)
		printf("with %d bad block(s)\n", err);
	else
		puts("success\n");
}

void NandWrite(void)
{
	InitNandFlash();
	WrFileToNF();
	DsNandFlash();		//disable nand flash interface
}

/*
void NandLoadRun(void)
{
	U8 key;
	
	while(1) {
		puts("Please select which OS to boot:\n1: Linux\n2: Wince\nEsc: exit\n");
		key = getch();
		if(key==ESC_KEY)
			return;
		if(key=='1'||key=='2')
			break;
	}
	
	InitNandFlash();
	
	printf("Now boot %s...\n", (key=='1')?"Linux":"Wince");
	LoadRun((key=='1')?1:5);
}
*/
void NandLoadRun(void)
{
/*	Beep( 2000, 500 ) ;
	Delay( 500 ) ;
	Beep( 2000, 500 ) ;
*/
	InitNandFlash();
	LoadRun(1);
}

void NandLoadRunW(void)
{
	printf("Now boot Wince\n");
	ClearMemory();
	InitNandFlash();
	LoadRun(3);
	
}

void NandRunSystem(void)
{
	NFSearchParams((char *)&Env);
	if(Env.Os_Auto_Flag==2)
		NandLoadRunW();
	else
		NandLoadRun();
}


void memcpy(char *s1, const char *s2, int n)
{
	int i;

	for (i = 0; i < n; i++)
		((s1))[i] = ((s2))[i];
}

int strncmp(const char *s1, const char *s2, int maxlen)
{
	int i;

	for(i = 0; i < maxlen; i++) {
		if(s1[i] != s2[i])
			return ((int) s1[i]) - ((int) s2[i]);
		if(s1[i] == 0)
			return 0;
	}

	return 0;
}

/********************add by chang ***********************************/
#define SAVE_ENV_IN_NAND
#ifdef	SAVE_ENV_IN_NAND

U32 NFSaveParams(char *pEnv)
{	
	char dat[512];
	U32 addr;
	InitNandFlash();
	if(support) {
		memcpy(dat, pEnv, sizeof(EnvParams));
		for(addr=SIZE_128K>>9; addr<(0x30000>>9); addr++) {
			//NFEraseBlock(addr);
			 EraseBlock(addr);
			//if(!NFWritePage(addr, (U8 *)dat, 0))
			 if(!WritePage(addr, (U8 *)dat, 0))
			 {
				//printf("wite succes\n");
				return 0;
			 }
		}
	}
	return -1;
	
}


U32 NFSearchParams(char *pEnv)
{
	char dat[512];
	U32 addr;
	InitNandFlash();
	if(support) {
		for(addr=SIZE_128K>>9; addr<(0x30000>>9); addr++) {
			ReadPage(addr, (U8 *)dat);		
			//if(!strncmp(dat, "params", 7)) {
			memcpy(pEnv, dat, sizeof(EnvParams));			
			return 0;	
		}
	}
	return -1;	
}

#endif
/********************** add by chang *********************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天精品一区二区三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 日本欧美一区二区在线观看| 一本一道久久a久久精品综合蜜臀| 成人欧美一区二区三区在线播放| 99精品久久久久久| 亚洲一级在线观看| 欧美日韩国产首页| 视频在线在亚洲| 精品国产乱子伦一区| 国产精品88av| 亚洲视频图片小说| 在线观看精品一区| 免费人成在线不卡| 久久人人爽爽爽人久久久| 国产高清久久久久| 国产精品久久久久7777按摩| 日本二三区不卡| 蜜臀91精品一区二区三区| 久久久蜜桃精品| 日本电影亚洲天堂一区| 开心九九激情九九欧美日韩精美视频电影 | 91精品国产高清一区二区三区蜜臀| 七七婷婷婷婷精品国产| 国产日韩在线不卡| 精品视频1区2区3区| 美女视频黄 久久| 中文字幕色av一区二区三区| 欧美性大战久久久久久久 | 777a∨成人精品桃花网| 激情av综合网| 国产精品女上位| 欧亚一区二区三区| 国产成人精品一区二| 亚洲成人免费观看| 国产精品拍天天在线| 欧美另类久久久品| 波多野结衣一区二区三区| 日产欧产美韩系列久久99| 国产精品毛片大码女人| 337p亚洲精品色噜噜噜| 97国产一区二区| 国产美女娇喘av呻吟久久| 亚洲影院久久精品| 国产精品美女一区二区三区| 欧美一区二区大片| 欧亚一区二区三区| 99视频有精品| 国产成人免费视频一区| 免费看精品久久片| 亚洲成人免费影院| 一区二区三区在线免费观看 | 99久久99久久精品国产片果冻| 青青草伊人久久| 亚洲v中文字幕| 亚洲乱码国产乱码精品精的特点| 久久综合九色综合欧美亚洲| 91精品国产一区二区人妖| 色婷婷久久久亚洲一区二区三区| 国产jizzjizz一区二区| 九九久久精品视频| 男女性色大片免费观看一区二区 | 亚洲va欧美va国产va天堂影院| 国产精品私人影院| 国产视频911| 26uuu久久天堂性欧美| 日韩欧美精品在线| 91精品黄色片免费大全| 欧美精品 国产精品| 欧美三级韩国三级日本一级| 色天天综合色天天久久| 不卡高清视频专区| 91在线视频免费91| 色偷偷一区二区三区| 91亚洲精华国产精华精华液| 99综合影院在线| 95精品视频在线| 91福利精品第一导航| 一本大道av伊人久久综合| 色婷婷综合久色| 欧美在线影院一区二区| 欧美日韩视频在线观看一区二区三区| 91美女蜜桃在线| 欧美亚洲精品一区| 在线精品视频小说1| 欧洲生活片亚洲生活在线观看| 色妞www精品视频| 欧美日韩你懂得| 欧美一区二区黄| 日本一区二区免费在线 | 日韩欧美国产综合一区 | 国产一区二区三区不卡在线观看| 日韩av成人高清| 久久99久久精品欧美| 国产精品一区二区免费不卡 | 韩国理伦片一区二区三区在线播放| 韩国精品主播一区二区在线观看| 国产凹凸在线观看一区二区| 91影视在线播放| 3atv在线一区二区三区| 久久午夜国产精品| 亚洲情趣在线观看| 人人狠狠综合久久亚洲| 国产精品一品二品| 在线视频一区二区免费| 91精品国产91久久久久久一区二区 | 欧美日韩性生活| 久久综合999| 亚洲日本青草视频在线怡红院| 性久久久久久久久| 国产在线精品一区二区不卡了| 成人免费观看视频| 欧美日韩不卡一区二区| 久久久久久久久伊人| 亚洲精品成人悠悠色影视| 久久精品久久久精品美女| 99视频精品在线| 欧美成人女星排行榜| 亚洲免费观看视频| 国产乱一区二区| 欧美三级视频在线观看| 国产农村妇女毛片精品久久麻豆 | 中文字幕第一区第二区| 亚洲成年人网站在线观看| 另类的小说在线视频另类成人小视频在线| 国产一本一道久久香蕉| 欧美电影在哪看比较好| 国产精品久久午夜夜伦鲁鲁| 日本va欧美va瓶| 色视频成人在线观看免| 日本一区二区成人在线| 亚洲成人精品在线观看| 成人av午夜影院| 精品日韩在线观看| 亚洲一二三区视频在线观看| 粉嫩蜜臀av国产精品网站| 91精品国产色综合久久不卡电影 | 88在线观看91蜜桃国自产| 国产精品嫩草影院com| 麻豆成人久久精品二区三区红| 91国偷自产一区二区三区成为亚洲经典 | 欧美日韩一区二区三区四区 | 国产精品1区2区| 91精品国产91久久综合桃花| 中文字幕日韩欧美一区二区三区| 久久99精品久久久久久动态图 | 欧美精品高清视频| 成人免费在线观看入口| 国产精品资源在线观看| 91精品国产综合久久香蕉麻豆| 亚洲欧美福利一区二区| 不卡的电影网站| 国产精品国产a| 成人自拍视频在线| 国产日韩一级二级三级| 国产一区二区三区国产| 精品国产91乱码一区二区三区| 日韩电影在线免费观看| 在线91免费看| 三级在线观看一区二区| 欧美美女一区二区| 亚洲二区在线观看| 欧美日韩国产电影| 无吗不卡中文字幕| 欧美日本在线观看| 日韩影院精彩在线| 欧美一级欧美三级在线观看| 日韩不卡免费视频| 欧美一区二区女人| 久久电影网电视剧免费观看| 精品国产髙清在线看国产毛片| 麻豆91免费看| 久久久国产精品午夜一区ai换脸| 国产一区二区三区在线观看免费 | 精品免费一区二区三区| 九九在线精品视频| 久久久久99精品一区| 成人一区在线看| 亚洲欧洲制服丝袜| 欧美日韩国产一区| 麻豆freexxxx性91精品| 国产日韩欧美a| 一本色道久久综合精品竹菊| 亚洲一区二区三区视频在线 | 国产欧美日韩不卡免费| av影院午夜一区| 亚洲午夜免费视频| 日韩西西人体444www| 国内精品写真在线观看| 国产精品久久久久久久久快鸭| 色偷偷88欧美精品久久久| 日韩影视精彩在线| 国产日产欧产精品推荐色| 99久久精品国产精品久久| 亚洲国产另类av| 日韩午夜在线观看视频| 波多野结衣中文字幕一区二区三区| 18欧美亚洲精品| 91精品国产综合久久蜜臀 | 黄页网站大全一区二区|