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

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

?? cmdline.c

?? nand flash燒寫源代碼
?? C
字號:
/* * Command line handling. * * This software is free. */#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <sys/mman.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include "include.h"#include "configs.h"#include "nand_ecc.h"#define printf_log(fp,fmt,args...)  fprintf(fp,fmt,## args)static u8 nand_buf[(2048+64)*128];       //Max 128 pages!static u8 check_buf[(2048+64)*128];static u32 spage, epage, chip_num;static u8 *filename,ops_t,idx,cs_index,args_num;static np_data *npdata;static FILE *log_fp;#define USE_VALID_CHECK int nand_check_cmp(u8 *buf1,u8 *buf2,u32 len){	u32 i;	for (i = 0; i < len; i++)	{		if (buf1[i] != buf2[i])		{			printf("Check error! %x\n",i);			return -1;		}	}	return 0;}void dump_npdata(np_data *np){	int i;	printf("Process type:%d \n",np->pt);	printf("NAND interface ps:%d bw:%d rc:%d ppb:%d os:%d bbp:%d bba:%d\n",	       np->ps,np->bw,np->rc,np->ppb,np->os,np->bbp,np->bba);	printf("ECC configration type:%d index:%d\n",np->et,np->ep);	printf("ECC position:");	for (i = 0;i < oob_64[np->ep].eccbytes;i++)	{		if (i % 9 == 0) printf("\n");		printf("%d ",oob_64[np->ep].eccpos[i]);	}}//a check sample for WINCE//Modify this function according to your systemint check_invalid_block(u8 *buf,np_data *np)      {	int i,j;	u8 *p = buf + np->ps ,* q ;	q = buf + (( np->ps + np->os ) *  np->ppb - 1) - 10;	if ( (*q) != 0xff )	{//		printf("A mark erase block! \n");		return 0;	}	for ( i = 0; i < np->ppb; i ++ )	{		for (j = 0; j < np->os; j ++ )		{			if ( p[j] != 0xff )			{				return 1;			}		}		p += np->ps;	}//	printf("A never use block! \n");	return 0;}int do_read_flash(np_data *np){	FILE *fp;	u32 sp;	int i,j,k;	if ((fp = fopen((const char *)np->fname, "w+")) == NULL ) 	{		printf("Can not open source or object file!\n");		return -1;	}	i = np->epage - np->spage;	j = i / MAX_BUF_PAGE;	k = i % MAX_BUF_PAGE;	sp = np->spage;	for (i=0;i<j;i++)	{		if (np->nand_check_block(sp/np->ppb))		{					printf_log(log_fp,"Skip a old block at %x!\n",sp/np->ppb);			sp += MAX_BUF_PAGE;			printf("Skip a old block!\n");			continue;		}		np->nand_read(nand_buf, sp, MAX_BUF_PAGE);#ifdef USE_VALID_CHECK 		if ( check_invalid_block(nand_buf,np) ) 		{#endif			fwrite(nand_buf,1,MAX_BUF_SIZE,fp);			printf("Read block %d finish\n",sp/np->ppb);#ifdef USE_VALID_CHECK 		}		else printf("Skip a invalid block! %d \n",sp/np->ppb);#endif		sp += MAX_BUF_PAGE;	}	if (k)	{		if (np->nand_check_block(sp/np->ppb))		{			printf_log(log_fp,"Skip a old block at %x!\n",sp/np->ppb);			printf("Skip a old block!\n");		}		else		{			np->nand_read(nand_buf, sp, k);#ifdef USE_VALID_CHECK 			if ( check_invalid_block(nand_buf,np) ) 			{#endif				fwrite(nand_buf, 1, k*OOBPAGE_SIZE, fp);#ifdef USE_VALID_CHECK 			}		else printf("Skip a invalid block! %d \n",sp/np->ppb);#endif		}	}	printf("Read nand flash finish!\n");	fclose(fp);	return 0;}int do_write_flash(np_data *np){	FILE *fp;	u32 sp,flen,offset;	int i,j,k,r,error_flag=0;	if ((fp = fopen((const char *)np->fname,"r")) == NULL ) 	{		printf("Can not open source or object file!\n");		return -1;	}	fseek(fp,0,SEEK_END);	flen = ftell(fp);	i = flen / OOBPAGE_SIZE;	if (flen % OOBPAGE_SIZE !=0)	{		printf("Source file length is not fit!\n");		return -1;	}	sp = np->spage;	if (sp % np->ppb !=0) 	{		printf("Start page number not blockaligned!\n");		return -1;	}	//Erase object block first	j = sp / np->ppb;	k = flen/OOBPAGE_SIZE;	if (k % np->ppb == 0) k = k / np->ppb;	else k = k / np->ppb +1;	np->nand_erase(k,j,0);	j = i / MAX_BUF_PAGE;	k = i % MAX_BUF_PAGE;	offset = 0;//	printf("j k %d %d %d %d\n",j,k,i,flen);	for (i=0;i<j;i++)	{		fseek(fp,offset,SEEK_SET);		fread(nand_buf,1,MAX_BUF_SIZE,fp);BLOCK_BROKEN:		for (r=0;r<MAX_RETRY;r++)		{			for (;sp <=np->epage - np->ppb;sp += np->ppb)			{     //old bad block				if (!np->nand_check_block(sp/np->ppb))					break;				printf("Skip a old bad blocks!\n");				printf_log(log_fp,"Skip a old block at %x!\n",sp/np->ppb);			}			if (sp/np->ppb > np->epage /np->ppb) 			{				printf("Program end but not finish,due to bad block!\n");				printf_log(log_fp,"Program end but not finish,due to bad block!\n");				return -1;					}			if (np->nand_program(nand_buf,sp,np->ppb))			{    				error_flag = 1;				printf("Program error!\n");				printf_log(log_fp,"Program error! %x\n",sp/np->ppb);				break;			}			memset(check_buf,0,MAX_BUF_SIZE);			np->nand_read(check_buf,sp,np->ppb);			if (np->nand_check(nand_buf,check_buf,					   MAX_BUF_SIZE) )			{    //check error!				error_flag = 1;				printf("Error retry!\n");				printf_log(log_fp,"Error retry!\n");				continue;			}			else			{				error_flag = 0;				break;			}		}		if (error_flag)		{           //block has broken!			printf("Found a new bad block: %x!\n",sp/np->ppb);			printf_log(log_fp,"Found a new bad block at %x!\n",sp/np->ppb);			np->nand_erase(1,sp/np->ppb,0);                //erase before mark bad block!			np->nand_block_markbad(sp /np->ppb);			sp += np->ppb;			goto BLOCK_BROKEN;		}		else		{			printf("Write block %d finish\n",sp/np->ppb);			sp += np->ppb;			offset += MAX_BUF_SIZE; 		}	}	if (k)	{		fseek(fp,offset,SEEK_SET);		fread(nand_buf,1,k * OOBPAGE_SIZE ,fp);BLOCK_BROKEN1:		for (r=0;r<MAX_RETRY;r++)		{			for (;sp <=np->epage - np->ppb;sp += np->ppb)			{     //old bad block				if (!np->nand_check_block(sp/np->ppb))					break;				printf("Skip a old bad blocks!\n");				printf_log(log_fp,"Skip a old block at %x!\n",sp/np->ppb);			}			if (sp/np->ppb > np->epage/np->ppb) 			{				printf("Program end but not finish,due to bad block!\n");				printf_log(log_fp,"Program end but not finish,due to bad block!\n");				return 0;					}			if (np->nand_program(nand_buf,sp,k))			{    				error_flag = 1;				printf("Program error!\n");				printf_log(log_fp,"Program error! %x\n",sp/np->ppb);				break;			}			memset(check_buf,0,MAX_BUF_SIZE);			np->nand_read(check_buf,sp,k);			if (np->nand_check(nand_buf,check_buf,					   k * OOBPAGE_SIZE) )			{    //check error!				error_flag = 1;				printf("Error retry!\n");				printf_log(log_fp,"Error retry!\n");				continue;			}			else			{				error_flag = 0;				break;			}		}		if (error_flag)		{           //block has broken!			printf("Found a new bad block : %x!\n",sp/np->ppb);			printf_log(log_fp,"Found a new bad block at %x!\n",sp/np->ppb);			np->nand_erase(1,sp/np->ppb,0);                //erase before mark bad block!			np->nand_block_markbad(sp /np->ppb);			sp += np->ppb;			goto BLOCK_BROKEN1;		}	}	printf("Nand flash write finish!\n");	return 0;}void show_usage(){	printf("Nand flash programmer.Version v1.0\n");	printf("Usage: nandprog spage epage opration_type obj_file chip_index [config_index]\n\n");	printf("  spage           operation start page number\n");	printf("  epage           operation end page number\n");	printf("  opration_type   operation type read or write\n");	printf("  obj_file        source or object filename\n");	printf("  chip_index      chip select index\n");	printf("  config_index    optional,when chosen,\n");	printf("                  will use one of these default configrations instead of load from CFG\n");}int cmdline(int argc, char *argv[], np_data *np){	if (argc<6 || argc>7)	{		show_usage();		return -1;	}		if (strlen(argv[1])>8)	{		printf("Start address page error!\n");		return -1;	}	spage = atoi(argv[1]);	if (spage > MAX_PAGE)	{		printf("Start address page error!\n");		return -1;	}	if (strlen(argv[2])>8)	{		printf("End address page error!\n");		return -1;	}	epage = atoi(argv[2]);	if (epage > MAX_PAGE)	{		printf("End address page error!\n");		return -1;	}	if (strlen(argv[3])>1)	{		printf("Operation type error!\n");		return -1;	}	if (argv[3][0] == 'r') 		ops_t = READ_FLASH;	else if (argv[3][0] == 'w')		ops_t = WRITE_FLASH;	else	{		printf("Operation type error!\n");		return -1;	}	if (strlen(argv[4])>20)	{		printf("Source or object file name error!\n");		return -1;	}	filename = (unsigned char *)argv[4];	if (strlen(argv[5])>2)	{		printf("Chip select number error!\n");		return -1;	}	cs_index = atoi(argv[5]);	if (epage <= spage)	{		printf("End page number must larger than start page number!\n");		return -1;	}	if (argc == 7)	{		args_num = 7;		if (strlen(argv[6])>3)		{			printf("Processor type error!\n");			return -1;		}		idx = atoi(argv[6]);		if (idx > 20)		{			printf("Processor type error!\n");			return -1;		}	}	else args_num = 6;	printf("Deal command line: spage%d epage%d ops%d file:%s cs%d\n",	       spage,epage,ops_t,filename,cs_index);	return 0;}void init_funs(np_data *np){	switch (np->pt)	{	case JZ4740:		np->ebase = 0x13010000; 		np->dport = 0x18000000; 		np->gport = 0x10010000; 		np->bm_ms = 0x100;		np->pm_ms = 0x20000;		np->gm_ms = 0x500;		np->ap_offset = 0x10000;		np->cp_offset = 0x8000;		np->nand_init = nand_init_4740;		np->nand_erase = nand_erase_4740;		np->nand_program = nand_program_4740;		np->nand_read = nand_read_4740_rs;		np->nand_read_raw = nand_read_raw_4740;		np->nand_read_oob = nand_read_oob_4740;		np->nand_block_markbad = nand_block_markbad_4740;		np->nand_check = nand_check_cmp;		np->nand_check_block = nand_check_block_4740;		if (np->et == HARDRS)			np->nand_read = nand_read_4740_rs;		else 			np->nand_read = nand_read_4740_hm;		break;	case JZ4730:		np->ebase = 0x13010000; 		np->dport = 0x14000000; 		np->gport = 0x0; 		np->bm_ms = 0x100;		np->pm_ms = 0xb0000;		np->gm_ms = 0x0;		np->ap_offset = 0x80000;		np->cp_offset = 0x40000;		np->nand_init = nand_init_4730;		np->nand_erase = nand_erase_4730;		np->nand_program = nand_program_4730;		np->nand_read = nand_read_4730;		np->nand_read_oob = nand_read_oob_4730;		np->nand_block_markbad = nand_block_markbad;		np->nand_check = nand_check_cmp;		np->nand_check_block = nand_check_block;		np->nand_select = chip_select_4730;		break;	case JZ4760:		break;	}//	dump_npdata(np);}np_data * cmdinit(){	int fd;	if (args_num>6)	{		npdata = &config_list[idx];		if (npdata) 			printf("Load configration index success!\n");		else		{			printf("Load configration index fail!\n");			return 0;		}	}	else	{		npdata = load_cfg();		if (npdata) 			printf("Load configration file success!\n");		else		{			printf("Load configration file fail!\n");			return 0;		}	}	if (!npdata) return 0;	init_funs(npdata);	npdata->spage = spage;	npdata->epage = epage;	npdata->fname = filename;	npdata->ops = ops_t;	npdata->cs = cs_index;	if((fd=open("/dev/mem",O_RDWR|O_SYNC))==-1)	{		printf("Can not open memory file!\n");		return 0;	}	npdata->base_map = mmap(NULL,npdata->bm_ms,PROT_READ | PROT_WRITE,MAP_SHARED,fd,npdata->ebase);	if(npdata->base_map == MAP_FAILED) 	{		printf("Can not map EMC_BASE ioport!\n");		return 0;	}	else printf("Map EMC_BASE success :%x\n",(u32)npdata->base_map);	npdata->port_map=mmap(NULL,npdata->pm_ms ,PROT_READ | PROT_WRITE,MAP_SHARED,fd,npdata->dport);	if(npdata->port_map== MAP_FAILED) 	{		printf("Can not map NAND_PORT ioport!\n");		return 0;	}		else printf("Map NAND_PORT success :%x\n",(u32)npdata->port_map);	if (npdata->pt == JZ4740)	{		npdata->gpio_map=mmap(NULL,npdata->gm_ms ,PROT_READ | PROT_WRITE,MAP_SHARED,fd,npdata->gport);		if(npdata->gpio_map== MAP_FAILED) 		{			printf("Can not map GPIO ioport!\n");			return 0;		}			else printf("Map GPIO_PORT success :%x\n",(u32)npdata->gpio_map);	}	close(fd); 	printf("Memory map all success!\n");	npdata->nand_init(npdata);	return npdata;}int cmdexcute(np_data *np){	int ret;	if ((log_fp=fopen(NUM_FILENAME,"a+"))==NULL ) 	{		printf("Can not open number file!\n");		return -1;	}	fscanf(log_fp,"%d",&chip_num);	fclose(log_fp);	chip_num++;	if ((log_fp=fopen(NUM_FILENAME,"w"))==NULL ) 	{		printf("Can not open number file!\n");		return -1;	}	printf_log(log_fp,"%d",chip_num);	fclose(log_fp);	if ((log_fp=fopen(LOG_FILENAME,"a+"))==NULL ) 	{		printf("Can not open log file!\n");		return -1;	}	printf_log(log_fp,"\nNo.%d :\n",chip_num);	if (np->ops == READ_FLASH)	{		printf_log(log_fp,"Read nand flash!\n");			printf_log(log_fp,"Args:index=%d spage=%d epage=%d file=%s cs=%d\n",		       idx,spage,epage,filename,cs_index);		ret= do_read_flash(np);	}	else	{		printf_log(log_fp,"Write nand flash!\n");			printf_log(log_fp,"Args:index=%d spage=%d epage=%d file=%s cs=%d\n",		       idx,spage,epage,filename,cs_index);		ret= do_write_flash(np);	}	if (!ret) 			printf_log(log_fp,"Operation success!\n");	else		printf_log(log_fp,"Operation fail!\n");	fclose(log_fp);	return 0;}int cmdexit(np_data *np){	munmap(np->base_map,np->bm_ms);	munmap(np->port_map,np->pm_ms);	if (np->pt == JZ4740)		munmap(np->gpio_map,np->gm_ms);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级二级三级| 久久久久久久久伊人| 国产精品一二三区| 亚洲一区自拍偷拍| 久久蜜桃一区二区| 制服.丝袜.亚洲.中文.综合| 国产精品一级片在线观看| 午夜精品免费在线| 国产精品久久久久aaaa| 亚洲精品在线三区| 欧美久久高跟鞋激| 91福利精品第一导航| 国产一区二区三区免费| 日韩av午夜在线观看| 亚洲精品成a人| 国产精品久久久久aaaa樱花| 欧美精品一区男女天堂| 欧美欧美午夜aⅴ在线观看| av在线不卡网| 国产成人在线视频免费播放| 久久99久久久久| 亚洲a一区二区| 一区二区三区在线播| 国产精品网站在线观看| 26uuu色噜噜精品一区二区| 91精品婷婷国产综合久久| 91黄色小视频| 91女厕偷拍女厕偷拍高清| 成人午夜电影网站| 国产乱子伦一区二区三区国色天香| 亚洲成年人网站在线观看| 一区二区三区在线影院| 综合电影一区二区三区| 亚洲欧美在线观看| 自拍偷自拍亚洲精品播放| 中文字幕av一区二区三区高 | 日韩午夜精品视频| 精品视频免费在线| 欧美伊人精品成人久久综合97| 91老师片黄在线观看| 99这里都是精品| 国产91精品入口| 丁香婷婷综合五月| av在线不卡网| 在线一区二区三区四区五区 | 精品福利在线导航| 精品久久人人做人人爱| 337p日本欧洲亚洲大胆色噜噜| 精品国产区一区| 久久免费视频一区| 亚洲国产精品成人综合色在线婷婷| 国产亚洲成aⅴ人片在线观看| 国产三级精品在线| 国产精品久久久久三级| 中文在线一区二区| 一区二区三区波多野结衣在线观看 | 久久久久久久久伊人| 国产区在线观看成人精品| 国产精品麻豆久久久| 亚洲欧美偷拍另类a∨色屁股| 亚洲日本一区二区| 亚洲风情在线资源站| 日韩av不卡在线观看| 国产一区在线视频| 成人精品一区二区三区四区| 色av综合在线| 日韩视频一区二区三区在线播放 | 99精品国产99久久久久久白柏| 91免费在线播放| 欧美日韩一区二区欧美激情| 欧美一区二区久久| 日本一区二区三区电影| 亚洲视频一区二区免费在线观看| 亚洲成人自拍网| 国产自产视频一区二区三区| 成人综合婷婷国产精品久久| 91久久精品一区二区| 正在播放一区二区| 中文字幕av一区 二区| 亚洲成国产人片在线观看| 国产一区二区毛片| 日本福利一区二区| 久久综合99re88久久爱| 亚洲欧美日韩系列| 美女www一区二区| 99久久免费精品| 日韩欧美一区二区久久婷婷| 国产精品免费视频网站| 婷婷成人激情在线网| 粉嫩av一区二区三区在线播放| 欧美三级视频在线观看| 国产欧美日产一区| 日本欧美加勒比视频| av在线一区二区三区| 日韩精品在线一区二区| 亚洲欧美乱综合| 国产精品综合在线视频| 欧美久久婷婷综合色| 国产精品福利av| 麻豆精品一区二区| 欧美网站一区二区| 国产精品国模大尺度视频| 麻豆视频观看网址久久| 在线免费观看成人短视频| 国产欧美一区视频| 美女免费视频一区| 欧美三级三级三级爽爽爽| 中文字幕久久午夜不卡| 久久精品久久精品| 欧美片在线播放| 亚洲精品国产一区二区三区四区在线| 国产麻豆成人传媒免费观看| 欧美一区二区私人影院日本| 一区二区国产盗摄色噜噜| 成人手机电影网| 日韩精品自拍偷拍| 青娱乐精品在线视频| 欧美伊人精品成人久久综合97 | 国产精品一区二区在线看| 欧美日韩不卡一区二区| 亚洲影视在线播放| 色综合久久中文综合久久97| 国产精品丝袜一区| 国产精品一区三区| 精品免费国产一区二区三区四区| 日韩av中文在线观看| 在线电影一区二区三区| 亚洲成人av电影在线| 在线精品视频免费播放| 一区二区三区中文字幕在线观看| 99国产精品久| 亚洲欧洲日韩女同| 99久久久国产精品| 亚洲欧美中日韩| 91免费在线视频观看| 亚洲欧美日韩国产另类专区| av不卡在线观看| 国产精品久久久久9999吃药| av电影在线观看不卡| 亚洲欧美偷拍三级| 在线观看视频一区| 亚洲风情在线资源站| 欧美一区二区三区在线电影| 日韩专区欧美专区| 日韩一级片在线播放| 精品在线播放午夜| 久久精品水蜜桃av综合天堂| 成人午夜视频在线观看| 国产精品久久影院| 在线精品视频免费播放| 午夜a成v人精品| 日韩欧美一级片| 国产精品一线二线三线精华| 国产精品系列在线| 91在线国产福利| 午夜激情久久久| 欧美大黄免费观看| 国产福利电影一区二区三区| 中文字幕一区二区三区乱码在线| 99精品黄色片免费大全| 五月天一区二区| 精品欧美黑人一区二区三区| 国产69精品一区二区亚洲孕妇| 亚洲女子a中天字幕| 欧美日韩一区二区不卡| 精彩视频一区二区三区| 国产精品伦理在线| 欧美日韩精品福利| 精品一区二区三区久久| 中文字幕在线视频一区| 欧美午夜精品一区二区三区| 蜜臀91精品一区二区三区 | 色狠狠桃花综合| 免费观看在线综合色| 国产视频不卡一区| 在线观看亚洲精品| 国产在线不卡一卡二卡三卡四卡| 中文字幕视频一区| 日韩欧美中文一区二区| 成人在线综合网站| 亚洲成人高清在线| 国产日韩欧美a| 911国产精品| 成人黄色av网站在线| 天堂一区二区在线免费观看| 久久免费的精品国产v∧| 欧美三级午夜理伦三级中视频| 韩国精品一区二区| 亚洲在线免费播放| 国产色综合一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 美脚の诱脚舐め脚责91| 日韩伦理免费电影| 精品国产一区二区三区不卡| 欧美亚洲综合久久| 国产盗摄视频一区二区三区| 日韩在线一区二区三区| 亚洲丝袜精品丝袜在线| 国产午夜亚洲精品羞羞网站| 欧美日韩精品一区二区三区 |