Merge branch 'master' into atf20v8

This commit is contained in:
ole00 2023-11-04 14:00:49 +00:00 committed by GitHub
commit 95e461233e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 169 additions and 82 deletions

View File

@ -24,6 +24,7 @@ Supported GAL chips:
* Atmel ATF16V8B, ATF16V8BQL, ATF16V8C, ATF20V8B, ATF22V10B, ATF22V10C, ATF22V10CQZ
* Lattice GAL16V8A, GAL16V8B, GAL16V8D
* Lattice GAL18V10B (requires PCB v.3.1 or modified PCB v.3.0 - see Troubleshooting )
* Lattice GAL22V10B, GAL22V10D
* National GAL16V8
* ST Microsystems GAL16V8
@ -225,6 +226,12 @@ Troubleshooting:
ls -alF /dev/ttyUSB*
</pre>
- I can't program GAL18V10
* You'll need PCB version 3.1. If you have PCB version 3.0 you can mod it.
See ![here](https://github.com/ole00/afterburner/pull/36) for more information about the mod.
* Some GAL18V10B from Aliexpress do not work with Afterburner (fakes? damaged?).
My GAL18V10B-15LP from Aliexpress do not work. However, GAL18V10B-**20LP** do work OK (also from Aliexpress).
- I want to program ATF16V8C, but it is not listed as supported by the PC app.
* use parameter '-t ATF16V8B'. Afterburner finds out it is a C version.

View File

@ -72,6 +72,7 @@
#define PIN_ZIF14 11
#define PIN_ZIF15 10
#define PIN_ZIF16 9
#define PIN_ZIF20 0b100000
#define PIN_ZIF21 0b10000
#define PIN_ZIF22 4
#define PIN_ZIF23 3
@ -144,6 +145,7 @@
typedef enum {
UNKNOWN,
GAL16V8,
GAL18V10,
GAL20V8,
GAL20XV10,
GAL22V10,
@ -163,6 +165,7 @@ typedef enum {
// config bit numbers
#define CFG_BASE_16 2048
#define CFG_BASE_18 3456
#define CFG_BASE_20 2560
#define CFG_BASE_20XV 1600
#define CFG_BASE_22 5808
@ -177,7 +180,7 @@ typedef enum {
// common CFG fuse address map for cfg16V8 and cfg20V8
// the only difference is the starting address: 2048 for cfg16V8 and 2560 for cfg20V8
// total size: 82
const unsigned char cfgV8[] PROGMEM =
static const unsigned char cfgV8[] PROGMEM =
{
80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
0,1,2,3,
@ -191,7 +194,7 @@ const unsigned char cfgV8[] PROGMEM =
// common CFG fuse address map for cfg16V8AB and cfg20V8AB
// the only difference is the starting address: 2048 for cfg16V8AB and 2560 for cfg20V8AB
// total size: 82
const unsigned char cfgV8AB[] PROGMEM =
static const unsigned char cfgV8AB[] PROGMEM =
{
0,1,2,3,
145,
@ -202,10 +205,18 @@ const unsigned char cfgV8AB[] PROGMEM =
4,5,6,7,
};
// common CFG fuse address map for cfg18V10
// starting address: 3456
// total size 20
static const unsigned char cfg18V10[] PROGMEM =
{
1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18
};
// common CFG fuse address map for cfg20XV10
// starting address: 1600
// total size 31
const unsigned char cfgXV10[] PROGMEM =
static const unsigned char cfgXV10[] PROGMEM =
{
30,
28, 29,
@ -295,16 +306,18 @@ galinfo[]=
// +-- 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},
{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, 62, 58, 8, 60, CFG_BASE_20 , cfgV8AB, sizeof(cfgV8AB) , CFG_STROBE_ROW},
{GAL20XV10, 0x65, 0x66, 1671, 24, 40, 40, 44, 1631, 5, 61, 60, 58, 5, 16, CFG_BASE_20XV, cfgXV10, sizeof(cfgXV10) , 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 },
{GAL6001, 0x40, 0x41, 8294, 24, 78, 75, 97, 8222, 9, 63, 62, 96, 8, 8, CFG_BASE_600 , cfg6001, sizeof(cfg6001) , CFG_SET_ROW },
{GAL6002, 0x44, 0x44, 8330, 24, 78, 75, 97, 8258, 9, 63, 62, 96, 8, 8, CFG_BASE_600 , cfg6002, sizeof(cfg6002) , CFG_SET_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},
{ATF20V8B, 0x00, 0x00, 2706, 24, 40, 64, 40, 2568, 8, 63, 62, 58, 8, 60, CFG_BASE_20 , cfgV8AB, sizeof(cfgV8AB) , CFG_STROBE_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, 62, 58, 10, 16, CFG_BASE_22 , cfgV10, sizeof(cfgV10) , CFG_SET_ROW },
, 0x00, 0x00, 5892, 24, 44, 132, 44, 5828, 8, 61, 62, 58, 10, 16, CFG_BASE_22 , cfgV10, sizeof(cfgV10) , CFG_SET_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},
{GAL18V10, 0x50, 0x51, 3540, 20, 36, 96, 44, 3476, 8, 61, 60, 58, 10, 16, CFG_BASE_18 , cfg18V10, sizeof(cfg18V10), CFG_SET_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},
{GAL20XV10, 0x65, 0x66, 1671, 24, 40, 40, 44, 1631, 5, 61, 60, 58, 5, 16, CFG_BASE_20XV, cfgXV10, sizeof(cfgXV10) , 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 },
{GAL6001, 0x40, 0x41, 8294, 24, 78, 75, 97, 8222, 9, 63, 62, 96, 8, 8, CFG_BASE_600 , cfg6001, sizeof(cfg6001) , CFG_SET_ROW },
{GAL6002, 0x44, 0x44, 8330, 24, 78, 75, 97, 8258, 9, 63, 62, 96, 8, 8, CFG_BASE_600 , cfg6002, sizeof(cfg6002) , CFG_SET_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},
{ATF20V8B, 0x00, 0x00, 2706, 24, 40, 64, 40, 2568, 8, 63, 62, 58, 8, 60, CFG_BASE_20 , cfgV8AB, sizeof(cfgV8AB) , CFG_STROBE_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, 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
@ -327,6 +340,7 @@ char uploadError;
unsigned char fusemap[MAXFUSES];
unsigned char flagBits;
char varVppExists;
uint8_t lastShiftRegVal = 0;
static void setFuseBit(unsigned short bitPos);
static unsigned short checkSum(unsigned short n);
@ -382,6 +396,22 @@ static void setPinMux(uint8_t pm) {
digitalWrite(PIN_ZIF_GND_CTRL, pm == OUTPUT ? HIGH: LOW);
break;
case GAL18V10:
pinMode(PIN_ZIF10, INPUT); //GND via MOSFET
pinMode(PIN_ZIF11, INPUT);
pinMode(PIN_ZIF13, INPUT);
pinMode(PIN_ZIF14, INPUT);
pinMode(PIN_ZIF9, INPUT_PULLUP); //DOUT
// ensure ZIF10 is Grounded via transistor
digitalWrite(PIN_ZIF_GND_CTRL, pm == OUTPUT ? HIGH: LOW);
//pull down unused pins
pinMode(PIN_ZIF15, pm);
pinMode(PIN_ZIF16, pm);
digitalWrite(PIN_ZIF15, LOW);
digitalWrite(PIN_ZIF16, LOW);
break;
case GAL20V8:
case ATF20V8B:
pinMode(PIN_ZIF10, pm);
@ -471,6 +501,7 @@ static void setupGpios(uint8_t pm) {
digitalWrite(PIN_SHR_CLK, 1)
static void setShiftReg(uint8_t val) {
lastShiftRegVal = val;
//assume CS is high
//ensure CLK is high (might be set low by other SPI devices)
@ -788,7 +819,13 @@ static void setVPP(char on) {
static void setSTB(char on) {
if (varVppExists) {
const unsigned short b = galinfo[gal].cfgbase;
const uint8_t pin = (b == CFG_BASE_16) ? PIN_ZIF15 : PIN_ZIF13;
uint8_t pin = PIN_ZIF13;
if (b == CFG_BASE_16) {
pin = PIN_ZIF15;
} else
if (b == CFG_BASE_18) {
pin = PIN_ZIF8;
}
digitalWrite(pin, on ? 1:0);
} else {
digitalWrite(PIN_STROBE, on ? 1:0);
@ -815,8 +852,17 @@ static void setPV(char on) {
static void setSDIN(char on) {
if (varVppExists) {
const unsigned short b = galinfo[gal].cfgbase;
if (b == CFG_BASE_18) {
if (on) {
lastShiftRegVal |= PIN_ZIF7;
} else {
lastShiftRegVal &= ~PIN_ZIF7;
}
setShiftReg(lastShiftRegVal);
} else {
const uint8_t pin = (b == CFG_BASE_16) ? PIN_ZIF9 : PIN_ZIF11;
digitalWrite(pin, on ? 1:0);
}
} else {
digitalWrite(PIN_SDIN, on ? 1:0);
}
@ -825,8 +871,17 @@ static void setSDIN(char on) {
static void setSCLK(char on){
if (varVppExists) {
const unsigned short b = galinfo[gal].cfgbase;
if (b == CFG_BASE_18) {
if (on) {
lastShiftRegVal |= PIN_ZIF6;
} else {
lastShiftRegVal &= ~PIN_ZIF6;
}
setShiftReg(lastShiftRegVal);
} else {
uint8_t pin = (b == CFG_BASE_16) ? PIN_ZIF8 : PIN_ZIF10;
digitalWrite(pin, on ? 1:0);
}
} else {
digitalWrite(PIN_SCLK, on ? 1:0);
}
@ -846,6 +901,14 @@ static void setRow(char row)
if (row & 0x10) srval |= PIN_ZIF6; //RA4
if (row & 0x20) srval |= PIN_ZIF7; //RA5
} else
if (b == CFG_BASE_18) {
digitalWrite(PIN_ZIF22, (row & 0x1)); //RA0
if (row & 0x2) srval |= PIN_ZIF21; //RA1
if (row & 0x4) srval |= PIN_ZIF20; //RA2
digitalWrite(PIN_ZIF3 , (row & 0x8)); //RA3
if (row & 0x10) srval |= PIN_ZIF4; //RA4
if (row & 0x20) srval |= PIN_ZIF5; //RA5
} else
if (b == CFG_BASE_22 || b == CFG_BASE_20XV || b == CFG_BASE_600) {
if (row & 0x1) srval |= PIN_ZIF4; //RA0
if (row & 0x2) srval |= PIN_ZIF5; //RA1
@ -884,6 +947,9 @@ static char getSDOUT(void)
} else
if (b == CFG_BASE_20) {
pin = PIN_ZIF15;
} else
if (b == CFG_BASE_18) {
pin = PIN_ZIF9;
}
return digitalRead(pin) != 0;
} else {
@ -1030,6 +1096,7 @@ static void strobeRow(char row, char setBit = BIT_NONE)
}
strobe(2); // pulse /STB for 2ms
break;
case GAL18V10:
case GAL20XV10:
case GAL22V10:
case ATF22V10B:
@ -1270,6 +1337,7 @@ void printPes(char type) {
// GAL type
switch (type) {
case GAL16V8: Serial.print(F("GAL16V8 ")); break;
case GAL18V10: Serial.print(F("GAL18V10 ")); break;
case GAL20V8: Serial.print(F("GAL20V8 ")); break;
case GAL20XV10: Serial.print(F("GAL20XV10 ")); break;
case GAL22V10: Serial.print(F("GAL22V10 ")); break;
@ -1501,7 +1569,7 @@ static unsigned short verifyGalFuseMap(const unsigned char* cfgArray, char useDe
if (doDiscardBits) {
discardBits(doDiscardBits);
}
for(bit = 0; bit < 64; bit++) {
for(bit = 0; bit < galinfo[gal].uesbytes * 8; bit++) {
addr = galinfo[gal].uesfuse;
addr += bit;
mapBit = getFuseBit(addr);
@ -1726,21 +1794,30 @@ static void readOrVerifyGal(char verify)
}
break;
case GAL18V10:
if (verify) {
i = verifyGalFuseMap(cfg18V10, 0, 0);
} else {
readGalFuseMap(cfg18V10, 0, 0);
}
break;
case GAL20XV10:
if (verify) {
i = verifyGalFuseMap(cfgXV10, 0, 0);
} else {
readGalFuseMap(cfgXV10, 0, 0);
}
break;
case GAL22V10:
case ATF22V10B:
case ATF22V10C:
//read with delay 1 ms, discard 68 cfg bits on ATFxx
bool isGAL = (gal == GAL20XV10 || gal == GAL22V10);
if (gal == GAL20XV10) {
cfgArray = (unsigned char*) cfgXV10;
} else {
cfgArray = (unsigned char*) cfgV10;
}
if (verify) {
i = verifyGalFuseMap(cfgArray, 1, isGAL ? 0 : 68);
i = verifyGalFuseMap(cfgV10, 1, (gal == GAL22V10) ? 0 : 68);
} else {
readGalFuseMap(cfgArray, 1, isGAL ? 0 : 68);
readGalFuseMap(cfgV10, 1, (gal == GAL22V10) ? 0 : 68);
}
break;
}
@ -1805,6 +1882,7 @@ static void writeGalFuseMapV10(const unsigned char* cfgArray, char fillUesStart,
unsigned short cfgAddr = galinfo[gal].cfgbase;
unsigned char row, bit;
unsigned short addr;
unsigned short uesFill = galinfo[gal].bits - galinfo[gal].uesbytes * 8;
setRow(0); //RA0-5 low
// write fuse rows
@ -1823,7 +1901,7 @@ static void writeGalFuseMapV10(const unsigned char* cfgArray, char fillUesStart,
// write UES
if (fillUesStart) {
sendBits(68, 1);
sendBits(uesFill, 1);
}
for (bit = 0; bit < galinfo[gal].uesbytes * 8; bit++) {
addr = galinfo[gal].uesfuse;
@ -1831,7 +1909,7 @@ static void writeGalFuseMapV10(const unsigned char* cfgArray, char fillUesStart,
sendBit(getFuseBit(addr));
}
if (!fillUesStart) {
sendBits(68, 1);
sendBits(uesFill, 1);
}
sendAddress(6, galinfo[gal].uesrow);
setPV(1);
@ -1957,17 +2035,18 @@ static void writeGal()
writeGalFuseMap600(cfg6002);
break;
case GAL18V10:
writeGalFuseMapV10(cfg18V10, 0, 0);
break;
case GAL20XV10:
writeGalFuseMapV10(cfgXV10, 1, 0);
break;
case GAL22V10:
case ATF22V10B:
case ATF22V10C:
bool isGAL = (gal == GAL22V10);
if (gal == GAL20XV10) {
cfgArray = (unsigned char*) cfgXV10;
} else {
cfgArray = (unsigned char*) cfgV10;
}
writeGalFuseMapV10(cfgArray, isGAL ? 0 : 1, (gal == ATF22V10C) ? 1 : 0);
writeGalFuseMapV10(cfgV10, (gal == GAL22V10) ? 0 : 1, (gal == ATF22V10C) ? 1 : 0);
break;
}
turnOff();
@ -2144,6 +2223,7 @@ static unsigned short checkSum(unsigned short n)
static void printGalName() {
switch (gal) {
case GAL16V8: Serial.println(F("GAL16V8")); break;
case GAL18V10: Serial.println(F("GAL18V10")); break;
case GAL20V8: Serial.println(F("GAL20V8")); break;
case GAL20XV10: Serial.println(F("GAL20XV10")); break;
case GAL22V10: Serial.println(F("GAL22V10")); break;
@ -2543,7 +2623,8 @@ void loop() {
setGalDefaults();
}
} else {
Serial.println(F("ER Unknown gal type"));
Serial.print(F("ER Unknown gal type "));
Serial.println(type, DEC);
}
} break;
case COMMAND_ENABLE_CHECK_TYPE: {

Binary file not shown.

Binary file not shown.

View File

@ -5,11 +5,11 @@ FileVersion[20091103]
PCB["outline" 3700.00mil 3100.00mil]
Grid[25.00mil 0.0000 0.0000 1]
Grid[5.00mil 0.0000 0.0000 1]
PolyArea[200000000.000000]
Thermal[0.500000]
DRC[8.00mil 8.00mil 8.00mil 8.00mil 15.00mil 10.00mil]
Flags("showdrc,nameonpcb,clearnew,newfullpoly,thindrawpoly")
Flags("showdrc,nameonpcb,clearnew,newfullpoly,showmask,thindrawpoly")
Groups("1,c:2,s:3:4")
Styles["Signal,10.00mil,40.00mil,20.00mil,10.00mil:Power,25.00mil,40.00mil,20.00mil,10.00mil:Fat,40.00mil,40.00mil,20.00mil,10.00mil:Skinny,14.00mil,40.00mil,20.00mil,10.00mil"]
Symbol[' ' 18.00mil]
@ -793,7 +793,7 @@ Symbol['~' 12.00mil]
SymbolLine[20.00mil 35.00mil 25.00mil 30.00mil 8.00mil]
)
Attribute("PCB::grid::unit" "mil")
Attribute("PCB::grid::size" "25.00mil")
Attribute("PCB::grid::size" "5.00mil")
Via[1405.00mil 660.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[1350.00mil 2150.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[1400.00mil 2100.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
@ -803,14 +803,12 @@ Via[1240.00mil 2280.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[1725.00mil 2075.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[415.00mil 1045.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[2475.00mil 1725.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[1845.00mil 1400.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2225.00mil 1415.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2275.00mil 1405.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2525.00mil 1025.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2645.00mil 1160.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[375.00mil 625.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[995.00mil 1420.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[2605.00mil 925.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2575.00mil 1590.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2620.00mil 1010.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2950.00mil 2300.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2900.00mil 2175.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
@ -820,6 +818,9 @@ Via[1645.00mil 960.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[1235.00mil 1150.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[615.00mil 915.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[960.00mil 1870.00mil 40.00mil 20.00mil 0.0000 20.00mil "" "thermal(0X,1X)"]
Via[1770.00mil 1400.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2550.00mil 1590.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Via[2205.00mil 1445.00mil 40.00mil 20.00mil 0.0000 20.00mil "" ""]
Element["" "" "" "" 2050.00mil 2480.00mil 0.0000 125.00mil 0 100 ""]
(
@ -1451,17 +1452,6 @@ Element["" "REF " "" "" 2410.00mil 1375.00mil 0.0000 -66.14mil 0 100 ""]
)
Element["" "" "" "" 1725.00mil 1525.00mil -0.0453mm -0.0355mm 0 100 ""]
(
Pin[0.0000 -175.00mil 60.00mil 10.00mil 66.00mil 38.00mil "" "1" ""]
Pin[0.0000 175.00mil 60.00mil 10.00mil 66.00mil 38.00mil "" "1" "thermal(0X,1X)"]
Pad[0.0000 -40.00mil 0.0000 -39.00mil 50.00mil 20.00mil 56.00mil "" "1" "square"]
Pad[0.0000 40.00mil 0.0000 41.00mil 50.00mil 20.00mil 56.00mil "" "2" "square,edge2"]
ElementLine [40.00mil -85.00mil 40.00mil 105.00mil 10.00mil]
ElementLine [-40.00mil -85.00mil -40.00mil 105.00mil 10.00mil]
)
Element["" "" "" "" 1335.00mil 1570.00mil -125.00mil 100.00mil 0 100 ""]
(
Pin[0.0000 0.0000 60.00mil 10.00mil 66.00mil 38.00mil "1" "1" ""]
@ -1890,8 +1880,6 @@ Layer(1 "top" "copper")
Line[2400.00mil 850.00mil 2400.00mil 800.00mil 10.00mil 20.00mil "clearline"]
Line[2470.00mil 635.00mil 2470.00mil 730.00mil 10.00mil 20.00mil "clearline"]
Line[2400.00mil 800.00mil 2470.00mil 730.00mil 10.00mil 20.00mil "clearline"]
Line[1725.00mil 1350.00mil 1725.00mil 1475.00mil 10.00mil 20.00mil "clearline"]
Line[1725.00mil 1700.00mil 1725.00mil 1575.00mil 10.00mil 20.00mil "clearline"]
Line[2200.00mil 850.00mil 2200.00mil 900.00mil 10.00mil 20.00mil "clearline"]
Line[2200.00mil 900.00mil 2225.00mil 925.00mil 10.00mil 20.00mil "clearline"]
Line[2040.00mil 1090.00mil 1900.00mil 950.00mil 10.00mil 20.00mil "clearline"]
@ -1900,8 +1888,7 @@ Layer(1 "top" "copper")
Line[2000.00mil 975.00mil 2000.00mil 850.00mil 10.00mil 20.00mil "clearline"]
Line[2125.00mil 975.00mil 2100.00mil 950.00mil 10.00mil 20.00mil "clearline"]
Line[2100.00mil 950.00mil 2100.00mil 850.00mil 10.00mil 20.00mil "clearline"]
Line[2200.00mil 1150.00mil 2200.00mil 1385.00mil 10.00mil 20.00mil "clearline"]
Line[2200.00mil 1385.00mil 2225.00mil 1410.00mil 10.00mil 20.00mil "clearline"]
Line[2200.00mil 1150.00mil 2200.00mil 1330.00mil 10.00mil 20.00mil "clearline"]
Line[2225.00mil 925.00mil 2605.00mil 925.00mil 10.00mil 20.00mil "clearline"]
Line[2040.00mil 1090.00mil 2575.00mil 1090.00mil 10.00mil 20.00mil "clearline"]
Line[2050.00mil 1025.00mil 2525.00mil 1025.00mil 10.00mil 20.00mil "clearline"]
@ -1929,7 +1916,6 @@ Layer(1 "top" "copper")
Line[575.00mil 800.00mil 575.00mil 750.00mil 10.00mil 20.00mil "clearline"]
Line[750.00mil 700.00mil 750.00mil 825.00mil 10.00mil 20.00mil "clearline"]
Line[750.00mil 1050.00mil 750.00mil 925.00mil 10.00mil 20.00mil "clearline"]
Line[1845.00mil 1400.00mil 1955.00mil 1400.00mil 14.00mil 20.00mil "clearline"]
Line[1955.00mil 1400.00mil 2015.00mil 1460.00mil 14.00mil 20.00mil "clearline"]
Line[2015.00mil 1460.00mil 2080.00mil 1460.00mil 14.00mil 20.00mil "clearline"]
Line[450.00mil 1130.00mil 410.00mil 1130.00mil 14.00mil 20.00mil ""]
@ -1961,9 +1947,8 @@ Layer(1 "top" "copper")
Line[2635.00mil 1865.00mil 2695.00mil 1865.00mil 10.00mil 20.00mil "clearline"]
Line[2695.00mil 1865.00mil 2775.00mil 1945.00mil 10.00mil 20.00mil "clearline"]
Line[2650.00mil 1915.00mil 2690.00mil 1915.00mil 10.00mil 20.00mil "clearline"]
Line[2690.00mil 1915.00mil 2710.00mil 1935.00mil 10.00mil 20.00mil "clearline"]
Line[2710.00mil 1935.00mil 2710.00mil 1980.00mil 10.00mil 20.00mil "clearline"]
Line[2710.00mil 1980.00mil 2770.00mil 2040.00mil 10.00mil 20.00mil "clearline"]
Line[2690.00mil 1915.00mil 2725.00mil 1950.00mil 10.00mil 20.00mil "clearline"]
Line[2725.00mil 1995.00mil 2770.00mil 2040.00mil 10.00mil 20.00mil "clearline"]
Line[2885.00mil 1965.00mil 2855.00mil 1965.00mil 10.00mil 20.00mil "clearline"]
Line[2855.00mil 1965.00mil 2840.00mil 1980.00mil 10.00mil 20.00mil "clearline"]
Line[2840.00mil 1980.00mil 2840.00mil 2145.00mil 10.00mil 20.00mil "clearline"]
@ -2007,7 +1992,6 @@ Layer(1 "top" "copper")
Line[2580.00mil 2115.00mil 2615.00mil 2115.00mil 14.00mil 20.00mil ""]
Line[2725.00mil 625.00mil 2850.00mil 625.00mil 10.00mil 20.00mil "clearline"]
Line[2950.00mil 625.00mil 3075.00mil 625.00mil 10.00mil 20.00mil "clearline"]
Line[2575.00mil 1590.00mil 2830.00mil 1590.00mil 25.00mil 20.00mil "clearline"]
Line[2830.00mil 1590.00mil 2995.00mil 1755.00mil 25.00mil 20.00mil "clearline"]
Line[250.00mil 1950.00mil 375.00mil 2075.00mil 10.00mil 20.00mil "clearline"]
Line[375.00mil 2075.00mil 375.00mil 2095.00mil 10.00mil 20.00mil "clearline"]
@ -2020,6 +2004,18 @@ Layer(1 "top" "copper")
Line[2470.00mil 585.00mil 2485.00mil 570.00mil 10.00mil 20.00mil "clearline"]
Line[2595.00mil 635.00mil 2595.00mil 595.00mil 10.00mil 20.00mil "clearline"]
Line[2595.00mil 595.00mil 2565.00mil 565.00mil 10.00mil 20.00mil "clearline"]
Line[2725.00mil 1950.00mil 2725.00mil 1995.00mil 10.00mil 20.00mil "clearline"]
Line[2665.00mil 1965.00mil 2680.00mil 1965.00mil 10.00mil 20.00mil "clearline"]
Line[2680.00mil 1965.00mil 2695.00mil 1980.00mil 10.00mil 20.00mil "clearline"]
Line[2695.00mil 1980.00mil 2695.00mil 2015.00mil 10.00mil 20.00mil "clearline"]
Line[2695.00mil 2015.00mil 2715.00mil 2035.00mil 10.00mil 20.00mil "clearline"]
Line[2715.00mil 2035.00mil 2715.00mil 2090.00mil 10.00mil 20.00mil "clearline"]
Line[2715.00mil 2090.00mil 2775.00mil 2150.00mil 10.00mil 20.00mil "clearline"]
Line[1770.00mil 1400.00mil 1955.00mil 1400.00mil 14.00mil 20.00mil "clearline"]
Line[2550.00mil 1590.00mil 2830.00mil 1590.00mil 25.00mil 20.00mil "clearline"]
Line[2200.00mil 1330.00mil 2275.00mil 1405.00mil 10.00mil 20.00mil "clearline"]
Line[2100.00mil 1145.00mil 2100.00mil 1340.00mil 10.00mil 20.00mil "clearline"]
Line[2100.00mil 1340.00mil 2205.00mil 1445.00mil 10.00mil 20.00mil "clearline"]
Polygon("clearpoly,fullpoly")
(
[125.00mil 550.00mil] [175.00mil 500.00mil] [3175.00mil 500.00mil] [3225.00mil 550.00mil] [3225.00mil 2550.00mil]
@ -2037,7 +2033,7 @@ Layer(2 "bottom" "copper")
Line[1750.00mil 675.00mil 1700.00mil 725.00mil 10.00mil 20.00mil "clearline"]
Line[1700.00mil 725.00mil 1700.00mil 850.00mil 10.00mil 20.00mil "clearline"]
Line[1525.00mil 1350.00mil 1615.00mil 1260.00mil 10.00mil 20.00mil "clearline"]
Line[2000.00mil 1150.00mil 1855.00mil 1295.00mil 10.00mil 20.00mil "clearline"]
Line[2000.00mil 1150.00mil 1830.00mil 1320.00mil 10.00mil 20.00mil "clearline"]
Line[1750.00mil 1800.00mil 1825.00mil 1725.00mil 14.00mil 20.00mil "clearline"]
Line[1825.00mil 1725.00mil 1825.00mil 1595.00mil 14.00mil 20.00mil "clearline"]
Line[550.00mil 1625.00mil 640.00mil 1715.00mil 10.00mil 20.00mil "clearline"]
@ -2114,7 +2110,6 @@ Layer(2 "bottom" "copper")
Line[1825.00mil 1595.00mil 1885.00mil 1535.00mil 14.00mil 20.00mil "clearline"]
Line[1900.00mil 1450.00mil 1975.00mil 1375.00mil 14.00mil 20.00mil "clearline"]
Line[2050.00mil 1375.00mil 1975.00mil 1375.00mil 14.00mil 20.00mil "clearline"]
Line[1845.00mil 1400.00mil 1835.00mil 1410.00mil 10.00mil 20.00mil "clearline"]
Line[1950.00mil 1725.00mil 2100.00mil 1725.00mil 40.00mil 20.00mil "clearline"]
Line[2100.00mil 1725.00mil 2150.00mil 1675.00mil 40.00mil 20.00mil "clearline"]
Line[2450.00mil 1200.00mil 2450.00mil 1000.00mil 14.00mil 20.00mil "clearline"]
@ -2136,13 +2131,7 @@ Layer(2 "bottom" "copper")
Line[2300.00mil 1050.00mil 2300.00mil 1150.00mil 10.00mil 20.00mil "clearline"]
Line[1850.00mil 590.00mil 1850.00mil 600.00mil 10.00mil 20.00mil "clearline"]
Line[1615.00mil 1260.00mil 1815.00mil 1260.00mil 10.00mil 20.00mil "clearline"]
Line[1625.00mil 1350.00mil 1680.00mil 1295.00mil 10.00mil 20.00mil "clearline"]
Line[1680.00mil 1295.00mil 1855.00mil 1295.00mil 10.00mil 20.00mil "clearline"]
Line[1725.00mil 1350.00mil 1900.00mil 1350.00mil 10.00mil 20.00mil "clearline"]
Line[1900.00mil 1350.00mil 2025.00mil 1225.00mil 10.00mil 20.00mil "clearline"]
Line[2025.00mil 1225.00mil 2075.00mil 1225.00mil 10.00mil 20.00mil "clearline"]
Line[2075.00mil 1225.00mil 2100.00mil 1200.00mil 10.00mil 20.00mil "clearline"]
Line[2100.00mil 1200.00mil 2100.00mil 1150.00mil 10.00mil 20.00mil "clearline"]
Line[1625.00mil 1350.00mil 1655.00mil 1320.00mil 10.00mil 20.00mil "clearline"]
Line[1400.00mil 1150.00mil 1350.00mil 1150.00mil 10.00mil 20.00mil "clearline"]
Line[1350.00mil 1150.00mil 1125.00mil 925.00mil 10.00mil 20.00mil "clearline"]
Line[1125.00mil 925.00mil 1125.00mil 625.00mil 10.00mil 20.00mil "clearline"]
@ -2179,9 +2168,8 @@ Layer(2 "bottom" "copper")
Line[2350.00mil 2480.00mil 2560.00mil 2480.00mil 10.00mil 20.00mil "clearline"]
Line[2330.00mil 2370.00mil 2645.00mil 2370.00mil 10.00mil 20.00mil "clearline"]
Line[2150.00mil 2325.00mil 2690.00mil 2325.00mil 10.00mil 20.00mil "clearline"]
Line[2665.00mil 1565.00mil 2665.00mil 1940.00mil 10.00mil 20.00mil "clearline"]
Line[2665.00mil 1555.00mil 2665.00mil 1940.00mil 10.00mil 20.00mil "clearline"]
Line[2665.00mil 1940.00mil 2775.00mil 2050.00mil 10.00mil 20.00mil "clearline"]
Line[2500.00mil 1515.00mil 2575.00mil 1590.00mil 25.00mil 20.00mil "clearline"]
Line[2775.00mil 1290.00mil 2645.00mil 1160.00mil 10.00mil 20.00mil "clearline"]
Line[1730.00mil 1220.00mil 1600.00mil 1220.00mil 10.00mil 20.00mil "clearline"]
Line[990.00mil 585.00mil 990.00mil 635.00mil 10.00mil 20.00mil "clearline"]
@ -2198,8 +2186,6 @@ Layer(2 "bottom" "copper")
Line[1335.00mil 1570.00mil 1335.00mil 1460.00mil 10.00mil 20.00mil "clearline"]
Line[1100.00mil 1225.00mil 1335.00mil 1460.00mil 10.00mil 20.00mil "clearline"]
Line[425.00mil 825.00mil 425.00mil 950.00mil 10.00mil 20.00mil "clearline"]
Line[1335.00mil 1570.00mil 1675.00mil 1570.00mil 14.00mil 20.00mil "clearline"]
Line[1675.00mil 1570.00mil 1845.00mil 1400.00mil 14.00mil 20.00mil "clearline"]
Line[1600.00mil 1220.00mil 1540.00mil 1280.00mil 10.00mil 20.00mil "clearline"]
Line[1540.00mil 1280.00mil 1490.00mil 1280.00mil 10.00mil 20.00mil "clearline"]
Line[1490.00mil 1280.00mil 1425.00mil 1345.00mil 10.00mil 20.00mil "clearline"]
@ -2217,7 +2203,6 @@ Layer(2 "bottom" "copper")
Line[975.00mil 1575.00mil 975.00mil 1650.00mil 10.00mil 20.00mil "clearline"]
Line[975.00mil 1650.00mil 925.00mil 1700.00mil 10.00mil 20.00mil "clearline"]
Line[2300.00mil 1515.00mil 2450.00mil 1515.00mil 25.00mil 20.00mil "clearline"]
Line[2450.00mil 1515.00mil 2495.00mil 1515.00mil 25.00mil 20.00mil "clearline"]
Line[2300.00mil 2510.00mil 2300.00mil 2445.00mil 10.00mil 20.00mil "clearline"]
Line[2300.00mil 2445.00mil 2340.00mil 2405.00mil 10.00mil 20.00mil "clearline"]
Line[2340.00mil 2405.00mil 2570.00mil 2405.00mil 10.00mil 20.00mil "clearline"]
@ -2255,8 +2240,6 @@ Layer(2 "bottom" "copper")
Line[2525.00mil 1025.00mil 2590.00mil 1090.00mil 10.00mil 20.00mil "clearline"]
Line[2590.00mil 1090.00mil 2590.00mil 1190.00mil 10.00mil 20.00mil "clearline"]
Line[2590.00mil 1190.00mil 2715.00mil 1315.00mil 10.00mil 20.00mil "clearline"]
Line[2225.00mil 1415.00mil 2515.00mil 1415.00mil 10.00mil 20.00mil "clearline"]
Line[2515.00mil 1415.00mil 2665.00mil 1565.00mil 10.00mil 20.00mil "clearline"]
Line[3075.00mil 1850.00mil 2925.00mil 1700.00mil 10.00mil 20.00mil "clearline"]
Line[2725.00mil 750.00mil 2725.00mil 625.00mil 10.00mil 20.00mil "clearline"]
Line[2620.00mil 1010.00mil 2825.00mil 1215.00mil 10.00mil 20.00mil "clearline"]
@ -2264,6 +2247,18 @@ Layer(2 "bottom" "copper")
Line[350.00mil 2350.00mil 200.00mil 2200.00mil 10.00mil 20.00mil "clearline"]
Line[950.00mil 675.00mil 950.00mil 750.00mil 10.00mil 20.00mil "clearline"]
Line[475.00mil 2380.00mil 360.00mil 2265.00mil 10.00mil 20.00mil "clearline"]
Line[2775.00mil 2150.00mil 2625.00mil 2000.00mil 10.00mil 20.00mil "clearline"]
Line[2625.00mil 2000.00mil 2625.00mil 1575.00mil 10.00mil 20.00mil "clearline"]
Line[1600.00mil 1570.00mil 1770.00mil 1400.00mil 14.00mil 20.00mil "clearline"]
Line[1260.00mil 1570.00mil 1600.00mil 1570.00mil 14.00mil 20.00mil "clearline"]
Line[1655.00mil 1320.00mil 1830.00mil 1320.00mil 10.00mil 20.00mil "clearline"]
Line[2475.00mil 1515.00mil 2550.00mil 1590.00mil 25.00mil 20.00mil "clearline"]
Line[2425.00mil 1515.00mil 2470.00mil 1515.00mil 25.00mil 20.00mil "clearline"]
Line[2275.00mil 1405.00mil 2510.00mil 1405.00mil 10.00mil 20.00mil "clearline"]
Line[2505.00mil 1455.00mil 2215.00mil 1455.00mil 10.00mil 20.00mil "clearline"]
Line[2215.00mil 1455.00mil 2205.00mil 1445.00mil 10.00mil 20.00mil "clearline"]
Line[2625.00mil 1575.00mil 2505.00mil 1455.00mil 10.00mil 20.00mil "clearline"]
Line[2515.00mil 1405.00mil 2665.00mil 1555.00mil 10.00mil 20.00mil "clearline"]
Polygon("clearpoly,fullpoly")
(
[125.00mil 550.00mil] [175.00mil 500.00mil] [3175.00mil 500.00mil] [3225.00mil 550.00mil] [3225.00mil 2550.00mil]
@ -2489,7 +2484,7 @@ Layer(6 "top silk" "silk")
Arc[2925.00mil 1700.00mil 25.00mil 25.00mil 10.00mil 20.00mil 0.000000 90.000000 "clearline"]
Arc[2925.00mil 1700.00mil 25.00mil 25.00mil 10.00mil 20.00mil 90.000000 90.000000 "clearline"]
Text[775.00mil 735.00mil 0 94 "R4" "clearline"]
Text[1575.00mil 1375.00mil 0 104 "R1 x 4" "clearline"]
Text[1575.00mil 1375.00mil 0 104 "R1 x 3" "clearline"]
Text[245.00mil 2515.00mil 0 92 "TP GND" "clearline"]
Text[350.00mil 1450.00mil 0 94 "U1" "clearline"]
Text[500.00mil 1025.00mil 0 94 "C3" "clearline"]
@ -2501,7 +2496,7 @@ Layer(6 "top silk" "silk")
Text[250.00mil 800.00mil 1 104 "-= olin =-" "clearline"]
Text[600.00mil 2045.00mil 0 104 "+" "clearline"]
Text[145.00mil 1580.00mil 0 94 "R5" "clearline"]
Text[160.00mil 760.00mil 1 126 "v. 3.0b" "clearline"]
Text[160.00mil 760.00mil 1 126 "v. 3.1a" "clearline"]
Text[155.00mil 1305.00mil 1 148 "Afterburner" "clearline"]
Text[155.00mil 1300.00mil 1 148 "Afterburner" "clearline"]
Text[225.00mil 1370.00mil 0 82 "TP VPP" "clearline"]
@ -2522,7 +2517,6 @@ Layer(6 "top silk" "silk")
Text[300.00mil 2300.00mil 0 94 "R8" "clearline"]
Text[2600.00mil 550.00mil 0 104 "C8" "clearline"]
Text[2180.00mil 1520.00mil 0 104 "C1" "clearline"]
Text[2240.00mil 1420.00mil 0 104 "+" "clearline"]
Text[1955.00mil 1340.00mil 0 104 "ON" "clearline"]
Text[2250.00mil 1325.00mil 0 104 "C2" "clearline"]
Text[2175.00mil 1725.00mil 0 80 "TP GND" "clearline"]
@ -2540,6 +2534,7 @@ Layer(6 "top silk" "silk")
Text[2250.00mil 1665.00mil 0 104 "-" "clearline"]
Text[2875.00mil 1550.00mil 0 94 "U2" "clearline"]
Text[3150.00mil 1675.00mil 0 94 "C9" "clearline"]
Text[2280.00mil 1400.00mil 0 104 "+" "clearline"]
Polygon("clearpoly,fullpoly")
(
[1285.00mil 1545.00mil] [1255.00mil 1575.00mil] [1285.00mil 1605.00mil]

Binary file not shown.

View File

@ -56,6 +56,7 @@ To compile: gcc -g3 -O0 afterburner afterburner.c
typedef enum {
UNKNOWN,
GAL16V8,
GAL18V10,
GAL20V8,
GAL20XV10,
GAL22V10,
@ -90,6 +91,7 @@ static struct {
galinfo[] = {
{UNKNOWN, 0x00, 0x00, "unknown", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0},
{GAL16V8, 0x00, 0x1A, "GAL16V8", 2194, 20, 32, 64, 32, 2056, 8, 63, 54, 58, 8, 60, 82},
{GAL18V10, 0x50, 0x51, "GAL18V10", 3540, 20, 36, 96, 36, 3476, 8, 61, 60, 58, 10, 16, 20},
{GAL20V8, 0x20, 0x3A, "GAL20V8", 2706, 24, 40, 64, 40, 2568, 8, 63, 59, 58, 8, 60, 82},
{GAL20XV10, 0x65, 0x66, "GAL20XV10", 1671, 24, 40, 40, 44, 1631, 5, 61, 60, 58, 5, 16, 31},
{GAL22V10, 0x48, 0x49, "GAL22V10", 5892, 24, 44, 132, 44, 5828, 8, 61, 60, 58, 10, 16, 20},
@ -221,7 +223,6 @@ static int8_t verifyArgs(char* type) {
break;
}
}
if (UNKNOWN == gal) {
printf("Error: unknown GAL type. Types: ");
printGalTypes();
@ -632,7 +633,7 @@ static char* stripPrompt(char* buf) {
len = i;
}
//strp rear new line characters
//strip rear new line characters
for (i = len - 1; i >= 0; i--) {
if (buf[i] != '\r' && buf[i] != '\n') {
break;
@ -1033,7 +1034,10 @@ static char operationSetGalType(Galtype type) {
if (openSerial() != 0) {
return -1;
}
sprintf(buf, "g%i\r", (int)type);
if (verbose) {
printf("sending 'g' command type=%i\n", type);
}
sprintf(buf, "g%c\r", '0' + (int)type);
result = sendGenericCommand(buf, "setGalType failed ?", 4000, 0);
closeSerial();
return result;
@ -1068,7 +1072,7 @@ static char operationWritePes(void) {
sendLine(buf, MAX_LINE, 300);
//set GAL type
sprintf(buf, "#t %i\r", (int) gal);
sprintf(buf, "#t %c\r", '0' + (int) gal);
sendLine(buf, MAX_LINE, 300);
//set new PES