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

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

?? jflash.bak

?? 非常經典的用并口作為jtag工具的源碼。首先是需要裝入并口的驅動
?? BAK
?? 第 1 頁 / 共 2 頁
字號:
//JFLASH V1.2
#define VERSION "1.2"
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include "sa1110jtag.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 SA1110ID  "**** 1001001001100001 00000001001 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 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;
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
DWORD access_rom(int, DWORD, DWORD, int);	// Passes read/write/setup data for the Flash memory
DWORD access_bus(int, DWORD, DWORD, 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 mywait(unsigned int timernum)
{
	unsigned int ii;
	unsigned int bb;
	for(ii=0;ii<timernum;ii++)
	{
		bb=bb+1;
	}
}

void main( int argc, char *argv[] )
{
	time_t start;
	char cc;

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

	char filename[MAX_IN_LENGTH];
	if(argc >= 2)
		strcpy(filename,argv[1]);
	else
	{
		printf("enter binary file name: ");
		gets(filename);
	}

	test_logic_reset();

	id_command();

	printf("\nEnter BYPASS");
	scanf("%c",&cc);
	bypass_all();

	printf("\naccess_rom");
	scanf("%c",&cc);
	access_rom(SETUP, 0, 0x500050L, IP); // clear status register
	printf("\naccess_rom");
	scanf("%c",&cc);

	access_rom(WRITE, 0, 0x500050L, IP);
	access_rom(HOLD, 0, 0x500050L, IP);

	access_rom(SETUP, 0, 0x980098L, IP); // read query
	access_rom(WRITE, 0, 0x980098L, IP);
	access_rom(HOLD, 0, 0x980098L, IP);

	// To read data from the Flash Memory you must first fill the SA-1110 JTAG chain
	// with the Address, then pump the entire chain out.
	// however while pumping data out you can be pumping the next cycle's Address in
	// Therefore the JTAG chain looks like a pipeline, valid read data always coming
	// out one cycle late.

	// Note that both Flash Memory devices are accessed in parallel (i.e. 32 data bits)
	access_rom(READ, 0x10, 0, IP);  // Test to see if the Flash supports Query Structured Output
	if(access_rom(READ, 0x11, 0, RP) != 0x510051L) //Q
		error_out("error reading flash attribute space\ncheck cables, power and flash sockets");
	if(access_rom(READ, 0x12, 0, RP) != 0x520052L) //R
		error_out("error reading flash attribute space R");
	if(access_rom(READ, 0x25, 0, RP) != 0x590059L) //Y
		error_out("error reading flash attribute space Y\n");

	DWORD max_erase_time = access_rom(READ, 0x27, 0, RP);  // "n" such that the max block erase time = 2^n
	if((max_erase_time & 0xffffL) != (max_erase_time >> 16)) // both devices should be the same time
		error_out("error, max erase time of E11 and E12 are different");
	max_erase_time = 1 << (max_erase_time & 0xffffL);  // convert erase time 2^n to the number of seconds
	DWORD dsize = access_rom(READ, 0x2a, 0, RP);  // "n" such that the device size = 2^n in number of bytes
	if((dsize & 0xffffL) != (dsize >> 16)) // both devices should be the same size
		error_out("error, device size of E11 and E12 are different");
	dsize = 1 << (dsize & 0xffffL);  // convert data size from 2^n to the number of bytes

	DWORD max_write_buffer = access_rom(READ, 0x2d, 0, RP);  // "n" such that the max num of bytes in write buffer = 2^n
	if((max_write_buffer & 0xffffL) != (max_write_buffer >> 16)) // both devices should have the same write buffer size
		error_out("error, write buffer size of E11 and E12 are different");
	max_write_buffer = (1 << (max_write_buffer & 0xffffL)) / 2;  // convert from 2^n bytes to the number of words

	int nblocks = access_rom(READ, 0x2e, 0, RP);  // get the number of erase blocks in Flash - 1
	if((nblocks & 0xffffL) != (nblocks >> 16))	// both devices should have the same number
		error_out("error, number of blocks of E11 and E12 are different");
	nblocks = (nblocks & 0xffffL) + 1L;  // need to add '1' for true number

	if( (in_file = fopen(filename, "rb" )) == NULL)
		error_out("error, can not open binary input file");

	DWORD fsize = 0;
	DWORD last_non_zero = 0 ;
	DWORD last_non_ff = 0;
	DWORD li;
	for(;;)
	{
		int n = fread((DWORD *)&li, sizeof(DWORD) , 1, in_file);
		if(feof(in_file))break; // Any bytes not on a 4 byte boundry at end-of-file will be ignored
		fsize++;
		if(li != 0 && li != 0xffffffff) // Find point in file were only 0's and ff's remain
			last_non_zero = fsize;
		if(li != 0xffffffff)  // Find point in file were only ff's remain
			last_non_ff = fsize;
	}
	
	rewind(in_file);

	if(fsize * 2 > dsize)
		error_out("error, file size is bigger than device size");
	fsize = last_non_ff;  // Don't wast time programming ff's at the end of the file this is the erase state

	int block_number = 0;
	DWORD block_size = dsize / 2 / nblocks;
	if(argc >= 4)
		block_number = atoi(argv[3]);
	DWORD base_address = block_number * block_size;

	printf("Number of blocks in device = %ld\n",nblocks);
	printf("Block size = %ld 0x%lx\n",block_size,block_size);
	printf("Device size = %ld 0x%lx\n",dsize,dsize);

	if(block_number >= nblocks || block_number < 0)
		error_out("error specifying block number");


	if(100 - (last_non_zero * 100)/last_non_ff > 20)
	{
		printf("The last %2ld percent of image file is all zeros\n",100 - (last_non_zero * 100)/last_non_ff);
		printf("Would you like to save time by not programming that area? [y/n]: ");
		if(toupper(_getche()) == 'Y')
			fsize = last_non_zero;
	}

	printf("\n");
	char option = 'P';
	if(argc >= 3)
		option = toupper(*argv[2]);

	if(option == 'P')
	{

		test_lock_flash(base_address, fsize, block_size, max_erase_time, block_number);
		erase_flash(base_address, fsize, block_size, max_erase_time, block_number);
		program_flash(max_write_buffer, base_address, fsize);
	}

	access_rom(SETUP, 0, 0xff00ffL, IP); // put back into read mode
	access_rom(WRITE, 0, 0xff00ffL, IP);
	access_rom(HOLD, 0, 0xff00ffL, IP);

	access_rom(READ, base_address, 0x0L, IP); //extra read to get the pipeline going

	time(&start);

	verify_flash(base_address, fsize);

	fclose(in_file);

	test_logic_reset();
}

int putp(int tdi, int tms, int rp)
{
// Cable used had 100 ohm resistors between the following pins
// (Cable shipped as part of SA-1110 Development Kit)
// Output pins (LPT driving)
// LPT D0 Pin 2 and TCK J10 Pin 4
// LPT D1 Pin 3 and TDI J10 Pin 11
// LPT D2 Pin 4 and TMS J10 Pin 9
//
// Input pin (SA-1110 board drives)
// LPT Busy Pin 11 and TDO J10 Pin 13
	
	int tdo = -1;
	_outp(lpt_address, tms*4+tdi*2);	// TCK low
	_outp(lpt_address, tms*4+tdi*2+1);	// TCK high
	if(rp == RP)_outp(lpt_address, tms*4+tdi*2);	// TCK low
	if(rp == RP)tdo = !((int)_inp(lpt_address + 1) >> 7);	// get TDO data
	return tdo;

}

void id_command(void)
{
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,1,IP);
	putp(1,1,IP);	//select IR scan
	putp(1,0,IP);	//capture IR
	putp(1,0,IP);	//shift IR

	putp(0,0,IP);	//SA1110 IDCODE
	putp(0,0,IP);	//
	putp(1,0,IP);	//
	putp(1,0,IP);	//
	putp(0,0,IP);	//

	putp(0,1,IP);	//Exit1-IR
	putp(1,1,IP);	//Update-IR
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,1,IP);
	putp(1,0,IP);

	if(check_id(SA1110ID))
		error_out("failed to read device ID for the SA-1110");

	putp(1,1,IP);	//Exit1-DR
	putp(1,1,IP);	//Update-DR
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
}

void bypass_all(void)
{
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,1,IP);
	putp(1,1,IP);	//select IR scan
	putp(1,0,IP);	//capture IR
	putp(1,0,IP);	//shift IR

	putp(1,0,IP);	//SA1110 BYPASS
	putp(1,0,IP);	//
	putp(1,0,IP);	//
	putp(1,0,IP);	//
	putp(1,0,IP);	//

	putp(1,1,IP);	//Exit1-IR

	putp(1,1,IP);	//Update-IR
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle

}

void extest(void)
{
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,1,IP);
	putp(1,1,IP);	//select IR scan
	putp(1,0,IP);	//capture IR
	putp(1,0,IP);	//shift IR

	putp(0,0,IP);	//SA1110 extest
	putp(0,0,IP);	//
	putp(0,0,IP);	//
	putp(0,0,IP);	//
	putp(0,0,IP);	//

	putp(1,1,IP);	//Exit1-IR

	putp(1,1,IP);	//Update-IR
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle
	putp(1,0,IP);	//Run-Test/Idle

}

DWORD access_rom(int rw, DWORD address, DWORD data, int rp)
{
	// Shift Flash address making A2 the LSB
	return(access_bus(rw, address << 2, data, rp));
}

DWORD access_bus(int rw, DWORD address, DWORD data, int rp)
{
	// Preset SA-1110 pins to default values (all others set in sa1110jtag.h)
	pin[nCS0_OUT] = 1;
	pin[nCS1_OUT] = 1;
	pin[nCS2_OUT] = 1;
	pin[nCS3_OUT] = 1;
	pin[nCS4_OUT] = 1;
	pin[nCS5_OUT] = 1;

	pin[nOE_OUT] = 0;
	pin[nWE_OUT] = 1;
	pin[RD_nWR_OUT] = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产视频911| 日本高清成人免费播放| 99麻豆久久久国产精品免费优播| 91视频在线看| 91精品国产欧美一区二区18 | 亚洲午夜久久久久中文字幕久| 亚洲第一搞黄网站| 激情综合网天天干| 色一区在线观看| 精品日韩欧美在线| 亚洲乱码中文字幕| 久久精品国产亚洲5555| 97精品国产露脸对白| 91精品国产麻豆| 国产精品久久久久四虎| 美女免费视频一区| 91捆绑美女网站| 精品国产91乱码一区二区三区| 国产精品国产三级国产| 久久精品国产精品亚洲红杏| 91在线码无精品| 久久综合久久综合久久综合| 亚洲黄色录像片| 国产一区二区三区在线观看精品 | 樱桃国产成人精品视频| 国内一区二区视频| 欧美日韩黄色影视| 亚洲色图另类专区| 国产一区免费电影| 欧美一区二区三区不卡| 亚洲精品乱码久久久久久| 国产精品正在播放| 日韩欧美一区二区不卡| 亚洲高清免费观看高清完整版在线观看| 激情综合色综合久久综合| 欧美三级视频在线| 亚洲视频资源在线| 成人网男人的天堂| 久久综合色鬼综合色| 日一区二区三区| 色偷偷88欧美精品久久久| 国产三级一区二区| 精品在线播放午夜| 91精品国产综合久久小美女| 亚洲精品欧美二区三区中文字幕| 国产精品99久久久久久久女警 | 精品中文字幕一区二区| 欧美日韩国产a| 一区二区三区四区在线| 波多野结衣中文字幕一区| 国产亚洲福利社区一区| 韩国一区二区视频| 欧美成人a∨高清免费观看| 性感美女久久精品| 欧美在线999| 一区二区三区日韩欧美| 91免费视频大全| 国产精品成人一区二区三区夜夜夜 | 99国产精品久久久久久久久久| 日韩欧美黄色影院| 日本不卡一区二区三区高清视频| 在线免费视频一区二区| 亚洲精品乱码久久久久久久久 | 亚洲女人****多毛耸耸8| 成人av网址在线| 国产精品丝袜久久久久久app| 国产精品一区二区视频| 国产亚洲午夜高清国产拍精品| 韩国中文字幕2020精品| 欧美精品一区二区精品网| 国内成人免费视频| 国产午夜精品美女毛片视频| 国产精品正在播放| 欧美国产日本视频| www.日韩在线| 综合久久国产九一剧情麻豆| 91麻豆精品视频| 亚洲资源中文字幕| 欧美一区在线视频| 久久99精品久久久久久| 久久午夜羞羞影院免费观看| 国产成a人亚洲| 亚洲天堂精品在线观看| 色婷婷国产精品综合在线观看| 亚洲嫩草精品久久| 在线观看一区不卡| 日韩国产欧美在线观看| 欧美xxx久久| 大胆欧美人体老妇| 综合色天天鬼久久鬼色| 欧美午夜在线观看| 久久国产乱子精品免费女| 国产性色一区二区| 色综合天天综合网天天狠天天 | 欧美剧在线免费观看网站| 日韩电影网1区2区| 26uuu国产在线精品一区二区| 丰满亚洲少妇av| 亚洲另类春色国产| 91精品国产乱| 国产精品一二二区| 亚洲免费观看在线视频| 欧美高清www午色夜在线视频| 九九九精品视频| 国产精品入口麻豆原神| 欧美色成人综合| 国产乱对白刺激视频不卡| 亚洲素人一区二区| 日韩三级电影网址| zzijzzij亚洲日本少妇熟睡| 亚洲午夜视频在线观看| 精品久久一区二区三区| 一本在线高清不卡dvd| 日本不卡123| 国产精品盗摄一区二区三区| 7799精品视频| 成人av集中营| 奇米影视7777精品一区二区| 国产精品嫩草影院av蜜臀| 欧美日韩精品高清| 成人激情动漫在线观看| 日本午夜一区二区| 亚洲色图视频免费播放| 精品久久国产字幕高潮| 色哟哟国产精品免费观看| 韩国一区二区三区| 午夜日韩在线电影| 亚洲国产岛国毛片在线| 欧美一卡二卡三卡| 一本色道综合亚洲| 国产东北露脸精品视频| 午夜精品久久久久久久| 国产精品欧美一级免费| 精品欧美一区二区三区精品久久| 91在线观看视频| 国产河南妇女毛片精品久久久| 亚洲午夜日本在线观看| 国产精品女同互慰在线看| 欧美成人综合网站| 91福利社在线观看| 不卡区在线中文字幕| 久久不见久久见免费视频1| 一区二区三区欧美视频| 国产欧美日韩综合精品一区二区| 在线不卡中文字幕| 色婷婷综合五月| 成人午夜视频网站| 国产自产2019最新不卡| 青青草一区二区三区| 亚洲久草在线视频| 国产日韩欧美激情| 日韩美女主播在线视频一区二区三区| 日本精品一级二级| 成人av电影在线网| 国产精品1024| 国产精品资源站在线| 久久精品国产精品亚洲精品| 日韩电影在线免费观看| 亚洲韩国精品一区| 亚洲乱码国产乱码精品精98午夜 | 99精品国产99久久久久久白柏 | 亚洲日本在线天堂| 中文成人综合网| 国产欧美在线观看一区| 日韩精品一区二区三区在线| 精品视频色一区| 欧美日韩极品在线观看一区| 在线视频中文字幕一区二区| 色呦呦国产精品| 日本精品视频一区二区三区| 91麻豆免费看| 色吧成人激情小说| 91免费版在线| 在线国产亚洲欧美| 欧美亚洲动漫精品| 欧美在线视频日韩| 欧美在线高清视频| 欧美日韩一区二区三区免费看| 色视频一区二区| 欧美亚洲综合久久| 欧美三级在线视频| 51午夜精品国产| 日韩一区二区高清| 亚洲精品一线二线三线无人区| 日韩美一区二区三区| 久久一区二区三区国产精品| 精品国产在天天线2019| 久久综合一区二区| 国产精品麻豆久久久| 综合久久久久久| 亚洲午夜在线电影| 性感美女极品91精品| 日本视频免费一区| 国产一区二区三区久久久| 国产精品综合av一区二区国产馆| 国产麻豆精品theporn| 成人性视频免费网站| 99久久国产综合色|国产精品| 色诱亚洲精品久久久久久| 欧美亚洲国产一区二区三区va|