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

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

?? jflash.cpp

?? s3c44b0 + 29lv160 jtag下載程序編寫(xiě)
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

#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");


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
...av二区三区久久精品| 亚洲va欧美va天堂v国产综合| 色偷偷88欧美精品久久久| 日韩国产精品久久久久久亚洲| 国产精品视频线看| 91精品国产91久久综合桃花| www.久久精品| 国产真实乱子伦精品视频| 亚洲福利一区二区| 成人欧美一区二区三区在线播放| 日韩欧美在线综合网| 欧洲视频一区二区| 成人app下载| 韩国理伦片一区二区三区在线播放| 亚洲自拍偷拍九九九| 中文欧美字幕免费| 26uuu欧美日本| 91精品麻豆日日躁夜夜躁| 91国产精品成人| eeuss鲁一区二区三区| 国产一区二区三区在线观看免费 | 成人毛片在线观看| 美脚の诱脚舐め脚责91| 亚洲国产cao| 一区二区三区欧美久久| 国产精品久99| 国产欧美va欧美不卡在线| 精品欧美一区二区在线观看| 在线电影一区二区三区| 欧美日韩在线综合| 欧美中文字幕一区二区三区亚洲| 99国产精品国产精品久久| 成人一级视频在线观看| 成人综合婷婷国产精品久久 | 99re热视频精品| 成人一区二区三区视频| 国产成人在线影院| 国产乱对白刺激视频不卡| 欧美三级电影精品| 欧美丝袜自拍制服另类| 色妹子一区二区| 在线免费观看成人短视频| 97久久精品人人做人人爽50路| 成人免费看片app下载| 成人一区二区在线观看| 成人免费看的视频| 99这里只有精品| 91国偷自产一区二区三区成为亚洲经典| 波多野结衣中文字幕一区 | 99精品热视频| 色悠悠久久综合| 日本福利一区二区| 欧美日韩一区二区三区高清| 欧美三级电影精品| 欧美一级片在线观看| 日韩欧美一级二级三级久久久| 日韩一区二区精品葵司在线| 日韩精品中文字幕在线一区| 精品日本一线二线三线不卡| 久久精品人人做人人爽人人| 国产精品情趣视频| 一区二区在线观看视频在线观看| 亚洲一区二区三区四区在线观看 | 亚洲精品成人精品456| 亚洲午夜久久久久久久久电影院| 午夜国产精品影院在线观看| 久久精品国产第一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 高清久久久久久| 色综合咪咪久久| 欧美一区二区三区四区五区| 久久精品亚洲精品国产欧美 | 56国语精品自产拍在线观看| 日韩免费高清av| 国产精品三级av| 亚洲va韩国va欧美va| 国产一区二区三区四| 国产suv精品一区二区三区| 色综合激情五月| 日韩欧美一区二区视频| 国产精品久久久久久亚洲伦| 亚洲成av人片| 成人一区在线观看| 欧美私人免费视频| 国产女主播在线一区二区| 伊人色综合久久天天| 激情小说欧美图片| 在线免费观看不卡av| 国产亚洲成aⅴ人片在线观看 | 久久精品亚洲一区二区三区浴池| ●精品国产综合乱码久久久久| 午夜精品久久久久久| 高清不卡在线观看| 欧美精品久久99久久在免费线 | 日本不卡视频一二三区| 国产91清纯白嫩初高中在线观看| 欧美丰满高潮xxxx喷水动漫| 久久久久97国产精华液好用吗| 亚洲综合清纯丝袜自拍| 国产伦精品一区二区三区免费迷| 91女人视频在线观看| 国产性做久久久久久| 水野朝阳av一区二区三区| 99r国产精品| 久久久久久97三级| 奇米色一区二区三区四区| 色国产精品一区在线观看| 久久精品亚洲乱码伦伦中文| 日韩精品一二三四| 精品视频在线免费| 亚洲免费观看高清完整版在线观看 | 久久丁香综合五月国产三级网站| 91视视频在线直接观看在线看网页在线看| 日韩欧美一区在线| 亚洲午夜激情网页| 91黄色激情网站| 中文字幕亚洲不卡| 成人a级免费电影| 久久久国产一区二区三区四区小说| 蜜桃在线一区二区三区| 欧美日韩视频在线观看一区二区三区| 国产精品看片你懂得| 国产不卡视频一区二区三区| 久久久99久久| 国产一区在线精品| 久久久久久久久久电影| 国产综合成人久久大片91| 欧美成人精品3d动漫h| 看国产成人h片视频| 日韩视频一区二区三区在线播放| 日日夜夜精品视频免费| 欧美三级视频在线观看 | 国产乱人伦偷精品视频免下载| 欧美一区二区三区视频在线观看| 亚洲午夜一区二区三区| 色婷婷久久久久swag精品 | 国产一区二区主播在线| 日韩欧美国产一区二区在线播放| 欧美在线观看一区| 亚洲欧美日韩精品久久久久| 99视频精品免费视频| 18涩涩午夜精品.www| 91麻豆国产自产在线观看| 亚洲男人的天堂在线aⅴ视频| 91网站在线播放| 亚洲伊人伊色伊影伊综合网| 在线观看一区不卡| 亚洲成人av在线电影| 7777精品伊人久久久大香线蕉超级流畅| 亚洲国产中文字幕在线视频综合 | 欧美日韩国产123区| 午夜精品久久久久久久蜜桃app| 欧美巨大另类极品videosbest| 亚洲成av人片一区二区三区| 欧美一级生活片| 久久99国内精品| 国产精品麻豆久久久| 色偷偷久久人人79超碰人人澡| 亚洲一区二区三区在线播放| 69成人精品免费视频| 国产一区三区三区| 亚洲色图都市小说| 欧美人牲a欧美精品| 久久电影网电视剧免费观看| 国产人妖乱国产精品人妖| 99在线视频精品| 同产精品九九九| 26uuuu精品一区二区| 北条麻妃国产九九精品视频| 亚洲一区二区美女| 久久综合色综合88| 91小视频在线免费看| 日韩高清不卡一区二区| 国产亚洲va综合人人澡精品| 色久综合一二码| 国产乱码精品一区二区三| 97久久人人超碰| 人人狠狠综合久久亚洲| 国产网红主播福利一区二区| 色婷婷久久综合| 精品一区二区免费| 亚洲免费观看高清完整版在线观看 | 91在线看国产| 美女久久久精品| 亚洲欧美二区三区| 欧美成人aa大片| 色吊一区二区三区| 国产精品夜夜爽| 天天操天天色综合| 成人免费一区二区三区视频| 日韩一二三区不卡| 色婷婷综合久久久久中文| 国模娜娜一区二区三区| 亚洲动漫第一页| 中国色在线观看另类| 日韩午夜中文字幕| 欧美在线观看视频在线| 成人国产电影网| 精品一区二区三区久久久| 亚洲国产精品一区二区久久 |