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

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

?? jflash.cpp

?? s3c44b0 + 29lv160 jtag下載程序編寫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

#define VERSION "0.1"
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <math.h>
#include "44b0jtag.h"

#define LPT1 0x3bc	// hardware base address for parallel port
#define LPT2 0x378	// the search order is LPT1 then 2 then 3
#define LPT3 0x278	// first valid address found is used (re-order if needed for multiple ports)

#define S44B0ID  "**** 1111000011110000 11110000111 1"	// JTAG ID-codes for the SA-1110

#define READ 0		// Flags used to modify the SA-1110 JTAG chain data depending on
#define WRITE 1		// the access mode of the Flash Memory
#define SETUP 2
#define HOLD 3
#define RS 4

#define IP 0		// Flag used when accessing the parallel port
#define RP 1		// RP = 'read port', IP = 'ignore port', using IP will speed access

#define RD 0
#define WR 1
#define ER 2
#define PR 3
#define UP 4

#define MAX_IN_LENGTH 100 // max length for user input strings
#define STATUS_UPDATE 2	// time between updates of program/verify status in seconds

int lpt_address;	// Global variable assigned to parallel port address

FILE *in_file;
FILE *out_file;
int putp(int,int, int);  // writes the JTAG data on the parallel port
void id_command(void);	// issues the JTAG command to read the device ID for all 3 chips
void bypass_all(void);	// issues the JTAG command to put all 3 device in bypass mode
void extest(void);		// issues the JTAG command EXTEST to the SA-1110
WORD access_rom(int, DWORD, WORD, int);	// Passes read/write/setup data for the Flash memory
WORD access_bus(int, DWORD, WORD, int);	// Read/write access to the SA-1110 pins
int test_port(void);	// Looks for and finds a valid parallel port address
int check_id(char*);	// Compares the device IDs for the 3 JTAG chips to expected values
void error_out(char*);	// Prints error and exits program
void erase_flash(DWORD, DWORD, DWORD, DWORD, int);
void program_flash(DWORD, DWORD, DWORD);
void verify_flash(DWORD, DWORD);
void test_logic_reset(void);
void test_lock_flash(DWORD, DWORD, DWORD, DWORD, int);
void set_lock_flash(DWORD, DWORD, DWORD, DWORD, int);
void write_test(void);
void write_flash(void);
void flash_reset(void);
int flash_write_word(DWORD,WORD);
void read_flash_info(void);
void read_query(void);
void unlock_bypass(void);
void unlock_bypass_reset(void);
int unlock_bypass_write_word(DWORD,WORD);
int erase_sector(DWORD,WORD);
int erase_chip(void);
int write_command(DWORD,WORD);

int write_command(DWORD addr, WORD command)
{
	access_rom(SETUP, addr, command, IP); 
	access_rom(WRITE, addr, command, IP);
	access_rom(HOLD, addr, command, IP);
	return 0;
}
int erase_sector(DWORD sec,WORD max_erase_time)
{
	time_t start, now;

//	printf("Starting erase\n");
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(0x555, 0x80); 
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(sec,0x30);
		time(&start);
		printf("Erasing block at address: %#5x   ........\r",sec);
	for(;;)
	{
		time(&now);
		if(difftime(now,start) > max_erase_time + 1)	// Check for erase timeout
			break;	
	}
#if 0
	while((access_rom(RS, 0, 0, RP)&0x0008) != 0)	// Loop until successful status return
	{
		access_rom(READ, 0, 0, RP);
		time(&now);
		if(difftime(now,start) > max_erase_time + 1)	// Check for erase timeout
			error_out("Error, Block erase timed out               ");
		//break;	
	}
#endif

	printf("Erasing block %#5x done                                           \n",sec);
//	for(int i=0;i<18800000L;i++);
	return 0;
}

int erase_chip()
{
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(0x555, 0x80); 
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(0x555, 0x10); 

	return 0;
}

void unlock_bypass()
{
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(0x555, 0x20); 
	return;
}

int unlock_bypass_write_word(DWORD addr, WORD data)
{
	write_command(0x555, 0xa0); 
	write_command(addr, data); 
	return 0;
}

void unlock_bypass_reset()
{
	write_command(0x555, 0x90); 
	write_command(0x2aa, 0x00); 
	return;
}

int flash_write_word(DWORD addr, WORD data)
{
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(0x555, 0xa0); 
	write_command(addr, data); 
	return 0;
}

void read_flash_info()
{	
	WORD readword = 0;
	write_command(0x555, 0xaa); 
	write_command(0x2aa, 0x55); 
	write_command(0x555, 0x90); 

	access_rom(READ, 0x00, 0, IP);
	readword = access_rom(READ, 0x00, 0, RP);
	printf(" The manufacture ID: %x\n", readword);
	access_rom(READ, 0x01, 0, IP);
	readword = access_rom(READ, 0x01, 0, RP);
	printf(" The Device ID: %x\n", readword);
	return;
}

void flash_reset()
{
	access_rom(SETUP, 0x0, 0xf0, IP); 
	access_rom(WRITE, 0x0, 0xf0, IP);
	access_rom(HOLD, 0x0, 0xf0, IP);
	return;
}

DWORD atoh(char* str)
{
	int hex_data = 0;
	int len = strlen(str);
	if(len > 5)
		error_out(" error address length!!\n");
	for(int i = 0; i < len; i++)
	{
		if((str[i]>='a') && (str[i] <='f'))
			hex_data = hex_data + (str[i]-87)*((int)pow(16,len-i-1));
		else if((str[i]>='0') && (str[i] <= '9'))
			hex_data = hex_data + (str[i]-48)*((int)pow(16,len-i-1));
		else
			error_out("error address value!!\n");
	}
	return hex_data;
}

void read_query()
{

}
void print_help()
{
	printf(" This is help information!!\n");
}

void main( int argc, char *argv[] )
{
//	time_t start;
	int i =0;
	int op_flag = 0;
	
	printf("JFLASH Version %s\n",VERSION);

//Test operating system, if WinNT or Win2000 then get device driver handle
	OSVERSIONINFO osvi;
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	GetVersionEx(&osvi);
	if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
		{
		HANDLE h;

		h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL,
					OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
		if(h == INVALID_HANDLE_VALUE)
			error_out("Couldn't access giveio device");
		CloseHandle(h);
		}

	lpt_address = test_port();	// find a valid parallel port address
	if(!lpt_address)
		error_out("Error, unable to find parallel port");
	/*  parse the option  */
	int out2file = 0, rd_count = 0;
	DWORD sec_addr0 = 0, sec_addr1 = 0, rd_addr0 = 0, rd_addr1 = 0x20, wr_addr = 0;
	char in_filename[MAX_IN_LENGTH];
	char out_filename[MAX_IN_LENGTH];

	if(argc >= 2)
	{
		if(*argv[1] == 'w')
		{
			if(argc < 4)
				error_out(" input parameters are too few!!!");
			op_flag = WR;
			wr_addr = atoh(argv[2]);
			strcpy(in_filename,argv[3]);
		}
		else if(*argv[1] == 'e')
		{
			if(argc < 3)
				error_out(" input parameters are too few!!!");
			op_flag = ER;
			if(argc >= 3)
			{
				sec_addr0 = atoh(argv[2]);
				sec_addr1 = atoh(argv[2]);
			}
			if(argc >=4 )
				sec_addr1 = atoh(argv[3]);
			
		}
		else if(*argv[1] == 'r')
		{
			op_flag = RD;
			rd_count = 0x20;

			if(argc >= 3)
			{
				rd_addr0 = atoh(argv[2]);
				rd_addr1 = rd_addr0 + rd_count;
				if(argc >= 4)
				{
					rd_addr1 = atoh(argv[3]);
					rd_count = rd_addr1 - rd_addr0 + 1;
					if(rd_count < 0)
						error_out(" rd_addr1 < rd_addr0!!\n");
				}
			}
			if(argc >= 5)
			{
				out2file = 1;
				strcpy(out_filename, argv[4]);
			}
		}
		else if(*argv[1] == 'h')
		{
			print_help();
			exit(0);
		}
		else
			error_out(" Error option!!\n Please show the help use: jflash h\n");
	}
	else
	{
		op_flag = RD;
		rd_count = 0x20;
	}


//		gets(filename);
	test_logic_reset();
	id_command();
//	bypass_all();
	extest();
	read_flash_info();
	WORD readword = 0;
	write_command(0x55, 0x0098); // read query
	access_rom(READ, 0x10, 0x0, RP);
	readword = access_rom(READ, 0x11, 0x0, RP);
	printf(" readword:%x\n",readword);
	readword = access_rom(READ, 0x12, 0x0, RP);
	printf(" readword:%x\n",readword);
	readword = access_rom(READ, 0x25, 0x0, RP);
	printf(" readword:%x\n",readword);

	WORD max_erase_time = access_rom(READ, 0x27, 0, RP);  // "n" such that the max block erase time = 2^n
//	printf(" max_erase_time:%x\n",max_erase_time);
	max_erase_time = 1 << (max_erase_time & 0xffffL);  // convert erase time 2^n to the number of seconds
	printf(" max_erase_time:%x\n",max_erase_time);
	WORD dsize = access_rom(READ, 0x2a, 0, RP);  // "n" such that the device size = 2^n in number of bytes
	dsize = 1 << (dsize & 0xffffL);  // convert data size from 2^n to the number of bytes
	WORD max_write_buffer = access_rom(READ, 0x2f, 0, RP);  // "n" such that the max num of bytes in write buffer = 2^n
	max_write_buffer = (1 << (max_write_buffer & 0xffffL)) / 2;  // convert from 2^n bytes to the number of words
	int nblocks = access_rom(READ, 0x43, 0, RP);  // get the number of erase blocks in Flash - 1
	nblocks = (nblocks & 0xffffL) + 1L;  // need to add '1' for true number
	printf("\n\n");
	if(op_flag == RD)
	{
		flash_reset();
		WORD data_buffer[4096];
		if(!out2file)
		{
			printf(" %#x -- %#x\n",rd_addr0,rd_addr1);
			printf("           00    01    02    03    04    05    06    07\n");
			printf("        ===============================================");
		}
		else
		{
			if((out_file = fopen(out_filename, "wb" )) == NULL)
				error_out("error, can not create binary input file");
		}

		access_rom(READ,rd_addr0,0,RP);
		int j = 0, file_size=0;
		for(i = 0; i < rd_count; i++)
		{
			if((!out2file) && (!(i%8)))
				printf("\n%5x##",i);
			readword = access_rom(READ,(i+rd_addr0+1),0,RP);
			if(out2file)
			{

				data_buffer[j] = readword;
				j++;
				if(!(file_size%1024))
					printf(" File size: %dk\r",file_size/1024);
				file_size++;

				if((j == 4096) || (i == (rd_count -1)))
				{
			//		printf(" file size:%dk\n",j/1024);
					fwrite(data_buffer,2,j,out_file);
					j = 0;
				}
			}
			if(!out2file)
				printf(" %4xh",readword);
		}
		printf("\n");
	}

	else if(op_flag == WR)
	{
		WORD data;
		int j = 0, file_size=0;
		DWORD add = wr_addr;

		flash_reset();
		if( (in_file = fopen(in_filename, "rb" )) == NULL)
			error_out("error, can not open binary input file");
		printf(" write flash..  (words)\n");
		unlock_bypass();

		for(;;)
		{
			if(!(file_size%1024))
				printf(" File size: %dk\r",file_size/1024);
			fread((WORD *)&data, sizeof(WORD) , 1, in_file);
	//		printf(" add:%x, data:%x\n",add,data);
			unlock_bypass_write_word(add,data);
			if(feof(in_file))break; 
			add++;
			file_size++;
		}
		unlock_bypass_reset();
		fclose(in_file);
	}

	else if(op_flag ==ER)
	{
		DWORD off = 0;
		flash_reset();
		printf(" erase address: %#x --> %#x\n", sec_addr0, sec_addr1);
		for(DWORD add = sec_addr0; add <= sec_addr1; )
		{
		//	printf("   ## add:%#x\n",add);
			max_erase_time = 0x1;
			erase_sector(add,max_erase_time);
			if(add == 0)
				off = 0x02000;
			else if((add >= 0x02000) &&(add < 0x04000))
				off = 0x01000;
			else if(add == 0x04000)
				off = 0x04000;
			else 
				off = 0x08000;
			add=add+off;
		}
	}

	else
		error_out(" Error option!!\n");


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品影院| 三级欧美韩日大片在线看| 欧美专区亚洲专区| 成人夜色视频网站在线观看| 久草在线在线精品观看| 美女网站一区二区| 老鸭窝一区二区久久精品| 日韩av电影免费观看高清完整版在线观看| 亚洲一区二区三区视频在线| 亚洲丰满少妇videoshd| 午夜精品免费在线观看| 日韩av二区在线播放| 久久国产夜色精品鲁鲁99| 国内精品国产成人| 成人国产视频在线观看| 欧美性生活久久| 在线不卡中文字幕| 日本一区二区视频在线观看| 综合久久给合久久狠狠狠97色| 亚洲久草在线视频| 婷婷激情综合网| 国产在线精品一区二区夜色| 国产伦精品一区二区三区免费迷 | 亚洲欧美一区二区三区久本道91 | 一区二区在线观看视频在线观看| 一区二区欧美视频| 成人毛片老司机大片| 99国内精品久久| 欧美精选午夜久久久乱码6080| 日韩一区二区视频在线观看| 亚洲国产高清在线| 日韩精品久久久久久| 国产乱国产乱300精品| 欧美四级电影网| 久久网站最新地址| 一区二区三区欧美| 国模大尺度一区二区三区| av午夜精品一区二区三区| 欧美精品一卡两卡| 中文字幕在线一区| 毛片一区二区三区| 91丝袜美腿高跟国产极品老师 | 久久狠狠亚洲综合| 91女神在线视频| 精品国产一区二区三区忘忧草| 亚洲美女免费视频| 国产一区二区精品在线观看| 色婷婷狠狠综合| 久久综合九色综合欧美就去吻| 亚洲人被黑人高潮完整版| 国产米奇在线777精品观看| 3751色影院一区二区三区| 国产精品国产精品国产专区不蜜| 蜜桃一区二区三区在线观看| 日本韩国一区二区三区| 欧美国产精品劲爆| 裸体健美xxxx欧美裸体表演| 色欧美片视频在线观看在线视频| 久久综合色鬼综合色| 日韩精品欧美精品| 欧美午夜精品一区二区蜜桃 | 一本久道中文字幕精品亚洲嫩| 久久综合狠狠综合| 蜜臀av性久久久久蜜臀aⅴ流畅| 色88888久久久久久影院按摩| 国产校园另类小说区| 狠狠色丁香久久婷婷综合_中 | 亚洲美女视频在线观看| a级精品国产片在线观看| 久久久综合激的五月天| 全国精品久久少妇| 欧美一区日韩一区| 午夜精品福利一区二区蜜股av| 91麻豆国产在线观看| 国产精品久久久久久久久免费相片| 精品一区二区免费看| 精品国免费一区二区三区| 蜜臀99久久精品久久久久久软件| 欧美高清你懂得| 日韩av电影免费观看高清完整版| 欧美精品乱人伦久久久久久| 丝袜美腿亚洲综合| 日韩久久精品一区| 国产在线精品一区二区夜色 | 2019国产精品| 国产乱子轮精品视频| 国产精品欧美精品| 色偷偷久久一区二区三区| 亚洲电影一级片| 欧美大片在线观看一区二区| 看片的网站亚洲| 国产欧美精品一区| 97精品国产露脸对白| 亚洲一区免费视频| 91精品视频网| 国产宾馆实践打屁股91| 日韩美女视频一区| 制服丝袜亚洲精品中文字幕| 美腿丝袜亚洲综合| 欧美激情在线看| 欧美午夜影院一区| 国产成人精品一区二区三区四区| 国产精品短视频| 欧美一级夜夜爽| 成人免费电影视频| 天堂午夜影视日韩欧美一区二区| 精品国产免费久久| 91日韩一区二区三区| 奇米影视一区二区三区| 国产区在线观看成人精品| 欧美影视一区二区三区| 狠狠网亚洲精品| 亚洲成人激情社区| 久久精品亚洲一区二区三区浴池| 色噜噜久久综合| 国产美女一区二区三区| 亚洲国产精品久久艾草纯爱| 久久精品一区蜜桃臀影院| 久久久久久久久岛国免费| 一本色道久久加勒比精品| 国产一区二区在线观看免费| 亚洲精品一卡二卡| 久久精品日产第一区二区三区高清版| 色综合久久六月婷婷中文字幕| 国内不卡的二区三区中文字幕| 亚洲午夜免费电影| 国产精品理论片| 久久五月婷婷丁香社区| 欧美一级欧美三级在线观看| 色婷婷综合激情| www.亚洲色图.com| 国产老肥熟一区二区三区| 天堂成人免费av电影一区| 亚洲美女电影在线| 成人免费在线播放视频| 亚洲精品一区在线观看| 日韩一区二区在线观看视频播放| 91国偷自产一区二区开放时间 | 中文字幕日韩欧美一区二区三区| 日韩一区和二区| 欧美日本一区二区三区四区| 91免费国产在线| 99视频超级精品| jvid福利写真一区二区三区| 国产精品乡下勾搭老头1| 精品一区二区在线视频| 久色婷婷小香蕉久久| 日韩成人av影视| 日韩av午夜在线观看| 青青草国产精品亚洲专区无| 午夜精品一区二区三区三上悠亚| 亚洲欧美视频一区| 亚洲欧美一区二区不卡| 亚洲激情五月婷婷| 玉米视频成人免费看| 亚洲精品国产视频| 亚洲午夜激情av| 日本美女视频一区二区| 麻豆精品在线观看| 国产一区二区三区免费播放 | 亚洲亚洲人成综合网络| 亚洲欧美另类小说视频| 亚洲黄色小视频| 亚洲成在人线免费| 麻豆国产91在线播放| 国产精品一区二区在线看| 高清av一区二区| 91在线视频免费观看| 欧美日韩大陆一区二区| 日韩精品一区在线| 国产三级欧美三级日产三级99| 久久久精品国产免大香伊| 国产精品欧美极品| 亚洲国产精品久久艾草纯爱| 美女脱光内衣内裤视频久久网站| 国产乱码精品一区二区三区五月婷| 国产精品99久久久久久久女警| 国产一区二区三区香蕉 | 亚洲一区av在线| 免费日本视频一区| 国产成人免费9x9x人网站视频| 91亚洲大成网污www| 7777精品久久久大香线蕉| 精品国产免费视频| 一区二区日韩av| 国内精品嫩模私拍在线| 色先锋资源久久综合| 日韩欧美电影一二三| 国产精品妹子av| 午夜伊人狠狠久久| av成人老司机| 欧美成人精精品一区二区频| 国产精品久久久久久久久快鸭 | 久久免费美女视频| 一区二区三区精密机械公司| 久久精品国产第一区二区三区| 成人精品视频.| 日韩欧美国产一二三区| 亚洲色图制服诱惑| 国产另类ts人妖一区二区|