📄 main.cpp
字号:
//////////////////////////////////////////////////////////////////////////////
// main.cpp //
//////////////////////////////////////////////////////////////////////////////
/*
JTAG flash utility
GP32
*/
//////////////////////////////////////////////////////////////////////////////
// Includes //
//////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include "Device.h"
//////////////////////////////////////////////////////////////////////////////
// Defines //
//////////////////////////////////////////////////////////////////////////////
//#define FLASH_MANUFACTURER 0xBF
//#define FLASH_DEVICE_CODE 0xD7
//////////////////////////////////////////////////////////////////////////////
// Variables //
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// ReadMemory //
//////////////////////////////////////////////////////////////////////////////
/*unsigned int ReadMemory(unsigned int address)
{
SetAddress(address);
readScan[PNOE_OUT] = 0;
readScan[PDATA_CON0_15] = 1;
JtagTransferData(EXTEST, writeScan, readScan, EXTEST_LENGTH);
JtagTransferData(EXTEST, writeScan, readScan, EXTEST_LENGTH);
unsigned int data = 0;
for (int i=0; i<lengthof(PDATA_IN); i++) data += writeScan[PDATA_IN[i]] << i;
return data;
}
//////////////////////////////////////////////////////////////////////////////
// WriteMemory //
//////////////////////////////////////////////////////////////////////////////
void WriteMemory(unsigned int address, unsigned int data)
{
SetAddress(address);
readScan[PNWE_OUT] = 0;
readScan[PDATA_CON0_15] = 0;
for (int i=0; i<lengthof(PDATA_OUT); i++) readScan[PDATA_OUT[i]] = data >> i & 1;
JtagTransferData(EXTEST, writeScan, readScan, EXTEST_LENGTH);
readScan[PNWE_OUT] = 1;
JtagTransferData(EXTEST, writeScan, readScan, EXTEST_LENGTH);
}
//////////////////////////////////////////////////////////////////////////////
// Delay //
//////////////////////////////////////////////////////////////////////////////
void Delay(int ticks)
{
DWORD nCnt = GetTickCount();
while (nCnt + ticks >= GetTickCount());
}
//////////////////////////////////////////////////////////////////////////////
// FlashInit //
//////////////////////////////////////////////////////////////////////////////
int FlashInit()
{
// SoftWare ID Entry
for (int k=20; ; k--)
{
if (k == 0) { fprintf(stderr, "Timeout\n"); return -1; }
WriteMemory(0x5555,0xaa);
WriteMemory(0x2aaa,0x55);
WriteMemory(0x5555,0x90);
Delay(2);
unsigned char ManufactureCode = ReadMemory(0);
unsigned char DeviceCode = ReadMemory(1);
printf("ManufactureCode=%02X, DeviceCode=%02X\n", ManufactureCode, DeviceCode);
if ((ManufactureCode == FLASH_MANUFACTURER) && (DeviceCode != FLASH_DEVICE_CODE)) break;
}
//SoftWare ID Exit
WriteMemory(0x5555,0xaa);
WriteMemory(0x2aaa,0x55);
WriteMemory(0x5555,0xF0);
Delay(10);
/*
//Chip-Erase
WriteMemory(0x5555,0xaa);
WriteMemory(0x2aaa,0x55);
WriteMemory(0x5555,0x80);
WriteMemory(0x5555,0xaa);
WriteMemory(0x2aaa,0x55);
WriteMemory(0x5555,0x10);
Delay(80);
*/
/*
return 0;
}
//////////////////////////////////////////////////////////////////////////////
// FlashWrite //
//////////////////////////////////////////////////////////////////////////////
int FlashWrite(const char *filename)
{
printf("Reading firmware...\n");
unsigned char *pData;
long totalSize;
{
FILE *f = fopen(filename, "rb");
if (!f) { fprintf(stderr, "Error opening file!\n"); return -1; }
fseek(f, 0, SEEK_END);
totalSize = ftell(f);
fseek(f, 0, SEEK_SET);
pData = new unsigned char[totalSize];
fread(pData, totalSize, 1, f);
fclose(f);
}
printf("Erasing firmware...\n");
if (FlashInit()) return -1;
return 0;
printf("Programming firmware...\n");
unsigned char *arBuffer = pData;
int WriteSize = totalSize;
/*
//unsigned char arBuffer[READ_BUFFER_SIZE]; //32kbyte
int freeSize = totalSize;
int WriteSize;
int dataOffset = 0;
do
{
if (freeSize >= READ_BUFFER_SIZE)
{
WriteSize = READ_BUFFER_SIZE;
freeSize -= READ_BUFFER_SIZE;
}
else
{
WriteSize = freeSize;
freeSize = 0;
}
// buffer俊 烙矫 汗荤
unsigned char *arBuffer = pData + dataOffset;
//memcpy(arBuffer, pData + dataOffset, WriteSize);
dataOffset += WriteSize;//next write offset
*/
// write command
/* for (int i=0; i<WriteSize; i++)
{
WriteMemory(0x5555,0xAA);
WriteMemory(0x2AAA,0x55);
WriteMemory(0x5555,0xA0);
int m_nAddressCount = i;
WriteMemory(m_nAddressCount, arBuffer[i]);
int k = 0;
while ((ReadMemory(m_nAddressCount) & 0x80) != (arBuffer[i] & 0x80))
{
WriteMemory( m_nAddressCount, arBuffer[i]);
if (++k >= 20) return -1;
}
//m_nAddressCount++;
}
/* } while (freeSize > 0);
*/
/* return 0;
}
*/
//////////////////////////////////////////////////////////////////////////////
// main //
//////////////////////////////////////////////////////////////////////////////
int main()
{
if (Device::Init()) return -1;
atexit(Device::Close);
// init pins
/*for (int i=0; i<lengthof(writeScan); i++) writeScan[i] = 0;
for (int i=0; i<lengthof(PNCAS_OUT); i++) writeScan[PNCAS_OUT[i]] = 1;
for (int i=0; i<lengthof(PNGCS_OUT); i++) writeScan[PNGCS_OUT[i]] = 1;
writeScan[PNOE_OUT] = 1;
writeScan[PNWE_OUT] = 1;
writeScan[PSCKE_+_OUT] = 1;
writeScan[PSCLK_+_OUT] = 1;*/
// flash
//if (FlashWrite("C:\\Programs\\Dev\\GP32\\Emulators\\geepee32\\fw100k.bin")) return -1;
/*for (int i=0; i<16; i++)
{
printf("%02X", ReadMemory(i) & 0xFF);
}*/
Device::Test();
//Device::debug.Exec(, 1);
//printf("%08X\n", Device::id.Read());
while (!kbhit())
{
printf("\r");
//device.Sample();
//printf("%08X\n", device.ReadRegister(15));
//device.Test();
//Device::Halt();
/*unsigned int address =
ScanValue(readScan, PADDR_OUT, lengthof(PADDR_OUT)) +
0x2000000 * ScanChipSelect(readScan, PNGCS_OUT, lengthof(PNGCS_OUT)); // naaaah
printf("%08X", address);
*/
//printf("%d", device.boundaryScanData[PDATA_CON[0]]);
//printf("%d %08X\n", device.GetChipSelect(), device.GetAddress());
//printf("%d %d\n", device.RamSelected(), device.RomSelected());
// nGCS6 = 0x0C000000
/* switch (device.GetChipSelect())
{
case -1:
break;
default:
printf("%d %08X\n", device.GetChipSelect(), 0x02000000*device.GetChipSelect() + device.GetAddress());
break;
}*/
//for (int i=lengthof(PADDR_OUT)-1; i>=0; i--) printf("%d", readScan[PADDR_OUT[i]]);
//for (int i=lengthof(PDATA_IN)-1; i>=0; i--) printf("%d", readScan[PDATA_IN[i]]);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -