sketch: added support for erase-all and write-pes commands
This commit is contained in:
parent
7b9ccc9f8d
commit
7774c76626
|
@ -68,10 +68,12 @@
|
||||||
#define COMMAND_UPLOAD 'u'
|
#define COMMAND_UPLOAD 'u'
|
||||||
#define COMMAND_DEBUG 'd'
|
#define COMMAND_DEBUG 'd'
|
||||||
#define COMMAND_READ_PES 'p'
|
#define COMMAND_READ_PES 'p'
|
||||||
|
#define COMMAND_WRITE_PES 'P'
|
||||||
#define COMMAND_READ_FUSES 'r'
|
#define COMMAND_READ_FUSES 'r'
|
||||||
#define COMMAND_WRITE_FUSES 'w'
|
#define COMMAND_WRITE_FUSES 'w'
|
||||||
#define COMMAND_VERIFY_FUSES 'v'
|
#define COMMAND_VERIFY_FUSES 'v'
|
||||||
#define COMMAND_ERASE_GAL 'c'
|
#define COMMAND_ERASE_GAL 'c'
|
||||||
|
#define COMMAND_ERASE_GAL_ALL '~'
|
||||||
#define COMMAND_UTX '#'
|
#define COMMAND_UTX '#'
|
||||||
#define COMMAND_ECHO 'e'
|
#define COMMAND_ECHO 'e'
|
||||||
#define COMMAND_TEST_VOLTAGE 't'
|
#define COMMAND_TEST_VOLTAGE 't'
|
||||||
|
@ -209,12 +211,12 @@ galinfo[]=
|
||||||
// +-- type + id0 + id1 | | +rows | | +uesfuse | +eraseallrow +cfgrow | | + cfgbits +cfgmethod
|
// +-- type + id0 + id1 | | +rows | | +uesfuse | +eraseallrow +cfgrow | | + cfgbits +cfgmethod
|
||||||
// | | | | | | | | | | | | | | | | | | |
|
// | | | | | | | | | | | | | | | | | | |
|
||||||
{UNKNOWN, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, NULL, 0 , 0},
|
{UNKNOWN, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, NULL, 0 , 0},
|
||||||
{GAL16V8, 0x00, 0x1A, 2194, 20, 32, 64, 32, 2056, 8, 63, 54, 58, 8, 60, CFG_BASE_16, cfgV8AB, sizeof(cfgV8AB), CFG_STROBE_ROW},
|
{GAL16V8, 0x00, 0x1A, 2194, 20, 32, 64, 32, 2056, 8, 63, 62, 58, 8, 60, CFG_BASE_16, cfgV8AB, sizeof(cfgV8AB), CFG_STROBE_ROW},
|
||||||
{GAL20V8, 0x20, 0x3A, 2706, 24, 40, 64, 40, 2568, 8, 63, 59, 58, 8, 60, CFG_BASE_20, cfgV8AB, sizeof(cfgV8AB), CFG_STROBE_ROW},
|
{GAL20V8, 0x20, 0x3A, 2706, 24, 40, 64, 40, 2568, 8, 63, 62, 58, 8, 60, CFG_BASE_20, cfgV8AB, sizeof(cfgV8AB), CFG_STROBE_ROW},
|
||||||
{GAL22V10, 0x48, 0x49, 5892, 24, 44, 132, 44, 5828, 8, 61, 60, 58, 10, 16, CFG_BASE_22, cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
|
{GAL22V10, 0x48, 0x49, 5892, 24, 44, 132, 44, 5828, 8, 61, 62, 58, 10, 16, CFG_BASE_22, cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
|
||||||
{ATF16V8B, 0x00, 0x00, 2194, 20, 32, 64, 32, 2056, 8, 63, 54, 58, 8, 60, CFG_BASE_16, cfgV8AB, sizeof(cfgV8AB), CFG_STROBE_ROW},
|
{ATF16V8B, 0x00, 0x00, 2194, 20, 32, 64, 32, 2056, 8, 63, 62, 58, 8, 60, CFG_BASE_16, cfgV8AB, sizeof(cfgV8AB), CFG_STROBE_ROW},
|
||||||
{ATF22V10B, 0x00, 0x00, 5892, 24, 44, 132, 44, 5828, 8, 61, 60, 58, 10, 16, CFG_BASE_22, cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
|
{ATF22V10B, 0x00, 0x00, 5892, 24, 44, 132, 44, 5828, 8, 61, 62, 58, 10, 16, CFG_BASE_22, cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
|
||||||
{ATF22V10C, 0x00, 0x00, 5892, 24, 44, 132, 44, 5828, 8, 61, 60, 58, 10, 16, CFG_BASE_22, cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
|
{ATF22V10C, 0x00, 0x00, 5892, 24, 44, 132, 44, 5828, 8, 61, 62, 58, 10, 16, CFG_BASE_22, cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
|
||||||
};
|
};
|
||||||
|
|
||||||
// MAXFUSES calculated as the biggest required space to hold the fuse bitmap + UES bitmap + CFG bitmap
|
// MAXFUSES calculated as the biggest required space to hold the fuse bitmap + UES bitmap + CFG bitmap
|
||||||
|
@ -495,6 +497,17 @@ void parseUploadLine() {
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
// PES
|
||||||
|
case 'p': {
|
||||||
|
uint8_t i = 0;
|
||||||
|
uint8_t j = 3;
|
||||||
|
while (i < 8) {
|
||||||
|
pes[i] = parse2hex(j);
|
||||||
|
i++;
|
||||||
|
j+=3; //AB:00:... - 3 characters per one PES byte
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
uploadError = 1;
|
uploadError = 1;
|
||||||
Serial.println(F("ER unknown upload cmd"));
|
Serial.println(F("ER unknown upload cmd"));
|
||||||
|
@ -732,6 +745,30 @@ static void readPes(void) {
|
||||||
turnOff();
|
turnOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void writePes(void) {
|
||||||
|
uint8_t rbit;
|
||||||
|
uint8_t b, p;
|
||||||
|
|
||||||
|
if (gal == ATF16V8B || gal == ATF22V10B || gal == ATF22V10C) {
|
||||||
|
Serial.println(F("ER write PES not supported"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
turnOn(WRITEPES);
|
||||||
|
|
||||||
|
setPV(1);
|
||||||
|
|
||||||
|
setRow(galinfo[gal].pesrow);
|
||||||
|
for (rbit = 0; rbit < 64; rbit++) {
|
||||||
|
b = pes[rbit >> 3];
|
||||||
|
p = b & (1 << (rbit & 0b111));
|
||||||
|
sendBit(p);
|
||||||
|
}
|
||||||
|
strobe(progtime);
|
||||||
|
|
||||||
|
turnOff();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static unsigned char getDuration(unsigned char index) {
|
static unsigned char getDuration(unsigned char index) {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
|
@ -775,7 +812,7 @@ void parsePes(char type) {
|
||||||
progtime = getDuration(((((unsigned short)pes[5] << 8)| pes[4]) >> 5) & 15);
|
progtime = getDuration(((((unsigned short)pes[5] << 8)| pes[4]) >> 5) & 15);
|
||||||
vpp = 2 * ((pes[5] >> 1) & 31) + 20;
|
vpp = 2 * ((pes[5] >> 1) & 31) + 20;
|
||||||
}
|
}
|
||||||
else switch(gal) {
|
else switch(type) {
|
||||||
case GAL16V8:
|
case GAL16V8:
|
||||||
case GAL20V8:
|
case GAL20V8:
|
||||||
erasetime=100;
|
erasetime=100;
|
||||||
|
@ -1315,12 +1352,12 @@ static void writeGal()
|
||||||
}
|
}
|
||||||
|
|
||||||
// erases fuse-map in the GAL
|
// erases fuse-map in the GAL
|
||||||
static void eraseGAL(void)
|
static void eraseGAL(char eraseAll)
|
||||||
{
|
{
|
||||||
turnOn(ERASEGAL);
|
turnOn(ERASEGAL);
|
||||||
|
|
||||||
setPV(1);
|
setPV(1);
|
||||||
setRow(galinfo[gal].eraserow);
|
setRow(eraseAll ? galinfo[gal].eraseallrow : galinfo[gal].eraserow);
|
||||||
if (gal == GAL16V8 || gal == ATF16V8B || gal==GAL20V8) {
|
if (gal == GAL16V8 || gal == ATF16V8B || gal==GAL20V8) {
|
||||||
sendBit(1);
|
sendBit(1);
|
||||||
}
|
}
|
||||||
|
@ -1716,6 +1753,13 @@ void loop() {
|
||||||
printPes(type);
|
printPes(type);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case COMMAND_WRITE_PES : {
|
||||||
|
char type;
|
||||||
|
type = checkGalTypeViaPes();
|
||||||
|
parsePes(type);
|
||||||
|
writePes();
|
||||||
|
} break;
|
||||||
|
|
||||||
// read fuse-map from the GAL and print it in the JEDEC form
|
// read fuse-map from the GAL and print it in the JEDEC form
|
||||||
case COMMAND_READ_FUSES : {
|
case COMMAND_READ_FUSES : {
|
||||||
if (doTypeCheck()) {
|
if (doTypeCheck()) {
|
||||||
|
@ -1739,7 +1783,13 @@ void loop() {
|
||||||
// erases the fuse-map on the GAL chip
|
// erases the fuse-map on the GAL chip
|
||||||
case COMMAND_ERASE_GAL: {
|
case COMMAND_ERASE_GAL: {
|
||||||
if (doTypeCheck()) {
|
if (doTypeCheck()) {
|
||||||
eraseGAL();
|
eraseGAL(0);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
// erases PES and the fuse-map on the GAL chip
|
||||||
|
case COMMAND_ERASE_GAL_ALL: {
|
||||||
|
if (doTypeCheck()) {
|
||||||
|
eraseGAL(1);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue