?? fluted.cpp
字號(hào):
// FluteD.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string.h>
#include "FluteD.h"
#include "Pin.h"
#include "Group.h"
#include "JTAGDev.h"
#include "JTAGPort.h"
#include "FCDFile.h"
#include "JTAGChain.h"
#include "JTAGFlash.h"
#include "Program.h"
char *ver;
char cmd;
int flag_verbose, flag_verify;
char *data_file;
char *fcd_file;
unsigned long start_addr, end_addr, data_length;
char msg[1024];
FILE *data_fp;
BYTE *dt_pool;
#ifdef _LOG
FILE *lp;
#endif
CProgram Prog;
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
void ShowTitle(void)
{
printf("Flash Programming Tool via IEEE1149.1 BSR (Version %s)\n", ver);
printf("Designed By David Geng April, 2000\n\n");
}
void ShowAddr(void)
{
printf("Start From: %lu (0x%lX)\n", start_addr, start_addr);
printf("End Before: %lu (0x%lX)\n", end_addr, end_addr);
printf("Total Byte: %lu (0x%lX)\n", data_length, data_length);
}
void Usage(void)
{
printf("Usage: <this> command [options]\n");
printf("command: (case insensitive)\n");
printf(" R Read from Flash\n");
printf(" W Write to Flash\n");
printf(" E Erase Flash\n");
printf(" V Verify data in Flash\n");
printf(" B Blank check the Flash\n");
printf(" T Test scan chain\n");
printf(" A Automatic erase + write\n");
printf("option: (case insensitive)\n");
printf(" -V Verify(off)\n");
printf(" -D Debug mode (off)\n");
printf(" -C FCD file name (default.fcd)\n");
printf(" -F Data file name (flute.bin)\n");
printf(" -S Start address (0, decimal in byte)\n");
printf(" -L Data Length (256 or size of file, decimal in byte)\n");
}
int ParseCmd(int argc, char* argv[])
{
// default value
flag_verbose = 0;
flag_verify = 0;
data_file = DEF_DATA_FILE;
fcd_file = DEF_FCD_FILE;
start_addr = DEF_START_ADDR;
data_length = DEF_DATA_LENGTH;
if(argc < 2)
{
printf("Too few parameters !\n\n");
return 1;
}
cmd = argv[1][0];
for(int i=2; i< argc; i++ )
{
if( strcmpi(argv[i],"-d") == 0 )
{
flag_verbose = 1;
}
else if( strcmpi(argv[i],"-v") == 0 )
{
flag_verify = 1;
}
else if( strcmpi(argv[i],"-c") == 0)
{
fcd_file = argv[++i];
}
else if( strcmpi(argv[i],"-f") == 0)
{
data_file = argv[++i];
}
else if( strcmpi(argv[i],"-s") == 0)
{
start_addr = atoi(argv[++i]);
}
else if( strcmpi(argv[i],"-l") == 0)
{
data_length = atoi(argv[++i]);
}
else
{
printf("Unknown option !\n\n");
return 1;
}
}
printf("FCD File:%s Data File:%s\n", fcd_file, data_file);
return 0;
}
int SwitchCmd(void)
{
switch(cmd)
{
case 'T':
case 't':
return Prog.Check();
case 'R':
case 'r':
if(Prog.Check()) return 1;
if(data_length == DEF_DATA_LENGTH)
{
data_length = DEF_READ_LENGTH;
}
end_addr = start_addr + data_length;
ShowAddr();
data_fp = fopen(data_file, "wb");
if(data_fp == NULL)
{
AddLog("File open failure !\n");
return 1;
}
dt_pool = (BYTE *) malloc(data_length);
if(dt_pool == NULL)
{
AddLog("Memory allocate failure !\n");
return 1;
}
if(Prog.Read(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash read failure !\n");
return 1;
}
if( fwrite(dt_pool, 1, data_length, data_fp) != data_length)
{
free(dt_pool);
AddLog("File write failure !\n");
return 1;
}
if(flag_verify)
{
if(Prog.Verify(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash verify failure !\n");
return 1;
}
}
free(dt_pool);
break;
case 'E':
case 'e':
if(Prog.Check()) return 1;
if(data_length == DEF_DATA_LENGTH)
{
data_length = DEF_READ_LENGTH;
}
end_addr = start_addr + data_length;
ShowAddr();
if(Prog.Erase(start_addr, data_length))
{
AddLog("JTAG Flash erase failure !\n");
return 1;
}
if(flag_verify)
{
if(Prog.Blank(start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash blank failure !\n");
return 1;
}
}
break;
case 'W':
case 'w':
if(Prog.Check()) return 1;
data_fp = fopen(data_file, "rb");
if(data_fp == NULL)
{
AddLog("File open failure !\n");
return 1;
}
if(data_length == DEF_DATA_LENGTH)
{
data_length = filesize(data_fp);
}
end_addr = start_addr + data_length;
ShowAddr();
dt_pool = (BYTE *) malloc(data_length);
if(dt_pool == NULL)
{
AddLog("Memory allocate failure !\n");
return 1;
}
if( fread(dt_pool, 1, data_length, data_fp) != data_length)
{
free(dt_pool);
AddLog("File read failure !\n");
return 1;
}
if(Prog.Write(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash write failure !\n");
return 1;
}
if(flag_verify)
{
if(Prog.Verify(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash verify failure !\n");
return 1;
}
}
free(dt_pool);
break;
case 'V':
case 'v':
if(Prog.Check()) return 1;
data_fp = fopen(data_file, "rb");
if(data_fp == NULL)
{
AddLog("File open failure !\n");
return 1;
}
if(data_length == DEF_DATA_LENGTH)
{
data_length = filesize(data_fp);
}
end_addr = start_addr + data_length;
ShowAddr();
dt_pool = (BYTE *) malloc(data_length);
if(dt_pool == NULL)
{
AddLog("Memory allocate failure !\n");
return 1;
}
if( fread(dt_pool, 1, data_length, data_fp) != data_length)
{
free(dt_pool);
AddLog("File read failure !\n");
return 1;
}
if(Prog.Verify(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash verify failure !\n");
return 1;
}
free(dt_pool);
break;
case 'A':
case 'a':
if(Prog.Check()) return 1;
data_fp = fopen(data_file, "rb");
if(data_fp == NULL)
{
AddLog("File open failure !\n");
return 1;
}
if(data_length == DEF_DATA_LENGTH)
{
data_length = filesize(data_fp);
}
end_addr = start_addr + data_length;
ShowAddr();
if(Prog.Erase(start_addr, data_length))
{
AddLog("JTAG Flash erase failure !\n");
return 1;
}
dt_pool = (BYTE *) malloc(data_length);
if(dt_pool == NULL)
{
AddLog("Memory allocate failure !\n");
return 1;
}
if( fread(dt_pool, 1, data_length, data_fp) != data_length)
{
free(dt_pool);
AddLog("File read failure !\n");
return 1;
}
if(Prog.Write(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash write failure !\n");
return 1;
}
if(flag_verify)
{
if(Prog.Verify(dt_pool, start_addr, data_length))
{
free(dt_pool);
AddLog("JTAG Flash verify failure !\n");
return 1;
}
}
free(dt_pool);
break;
default:
AddLog("Unknown command !\n");
return -1;
break;
}
return 0;
}
int main(int argc, char* argv[])
{
int result = 0;
ver = "0.8a";
ShowTitle();
#ifdef _LOG
lp = fopen(".\\log", "wt");
#endif
if( ParseCmd(argc, argv) )
{
Usage();
return -1;
}
result = Prog.Setup(fcd_file);
if(result)
{
AddLog("*** STOP ***\n");
Beep(200, 100);
return result;
}
result = SwitchCmd();
if(result)
{
AddLog("*** STOP ***\n");
Beep(200, 100);
return result;
}
AddLog("\n>>> SUCCESS <<<\n");
#ifdef _LOG
fclose(lp);
#endif
return 0;
}
int AddLog(char *msg, int level)
{
if(level > 0)
{
if (flag_verbose) printf("%s", msg);
}
else
printf("%s", msg);
return 0;
}
int AddLog(CString msg, int level)
{
if(level > 0)
{
if (flag_verbose) printf("%s", msg);
}
else
printf("%s", msg);
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -