mirror of
https://github.com/ole00/afterburner.git
synced 2024-11-22 21:32:09 +00:00
298 lines
12 KiB
Markdown
298 lines
12 KiB
Markdown
# afterburner
|
|
GAL chip programmer for Arduino
|
|
![Board image](https://github.com/ole00/afterburner/raw/master/img/afterburner_small.jpg "afterburner")
|
|
|
|
This is a GAL IC programmer software that allows to program GAL IC chips
|
|
from various manfucaturers. It is based on work of several other people:
|
|
|
|
Bruce Abbott:
|
|
https://web.archive.org/web/20220121030038/http://www.bhabbott.net.nz/atfblast.html
|
|
|
|
Manfred Winterhoff:
|
|
http://www.armory.com/%7Erstevew/Public/Pgmrs/GAL/_ClikMe1st.htm
|
|
|
|
Yorck Thiele:
|
|
https://www.ythiee.com/2021/06/06/galmate-hardware/
|
|
|
|
who did the most of the hard work of deciphering and publishing the programming
|
|
protocol of these chips. Some of their early programs were Windows based and relied on
|
|
presence of parallel port (LPT). Afterburner was written for Linux OS
|
|
(also works on Win32/64, Mac OSX64), and requires serial connection to
|
|
Arduio UNO, which does the programming of the GAL chip.
|
|
|
|
Supported GAL chips:
|
|
|
|
* Atmel ATF16V8B, ATF16V8BQL, ATF16V8C, ATF16V8CZ, ATF22V10B, ATF22V10CQZ
|
|
* Lattice GAL16V8A, GAL16V8B, GAL16V8D
|
|
* Lattice GAL22V10B
|
|
* National GAL16V8
|
|
* Lattice GAL20V8B via [adapter board](https://github.com/ole00/afterburner/raw/master/img/gal20v8_adapter.png)
|
|
|
|
**Update 25/03/2023:** Added support securing the GAL contents. Use '-sec' parameter during write or verify to protect the GAL.
|
|
Added support for Atmel's Power-Down feature on ATF16V8C and ATF22V10C GALs. The Power-Down is enabled or diabled depending
|
|
on the JED file contents. Both features are based on GALmate software. Upload the latest afterburner.ino sketch and
|
|
recompile the PC software, or use the precompiled PC software binaries (ver 0.4.2) in the 'releases' directory.
|
|
|
|
**Update 21/03/2023:** Added support for ATF16V8C. Based on GALmate code by Yorck. Upload the latest afterburner.ino sketch
|
|
and use parameter '-t ATF16V8B' with the PC app.
|
|
|
|
**Update 24/01/2023:** fixed an isse where GAL chip could be accidentally zapped/damaged during insertion into ZIF socket.
|
|
Please upload the latest afterburner.ino into your Arduino. The PC software may or may not need recompilation depending on its version.
|
|
If you are unsure, either download the latest or recompile it.
|
|
|
|
Setup:
|
|
* Upload the afterburner.ino sketch to your Arduino UNO.
|
|
|
|
* Connect the pins of the GAL chip to Arduino UNO according to
|
|
the schematics images. Ideally use a PCB (ether etched or made
|
|
in a fab) that's provided in 'pcb' and 'gerbers' directory.
|
|
You can also hardwire on protoboard or breadboard.
|
|
|
|
* Compile the afteburner.c to get afterburner executable. Run
|
|
./compile.sh to do that.
|
|
|
|
* Set the programming voltage (VPP) on the voltage up-converter
|
|
module (MT3608) depending on the GAL chip
|
|
- Atmel ATF*: 10 .. 10.5V
|
|
- Lattice GAL*: 12V
|
|
- Others - between 10 - 14V - untested
|
|
|
|
* Check the programming voltage (VPP) without the GAL chip being
|
|
inserted / connected to Arduino UNO. Test the voltage on MT3608
|
|
module VOUT- and VOUT+ pins while running the following command:
|
|
<pre>
|
|
./afterburner s
|
|
</pre>
|
|
|
|
* Check the chip identification by runnig the following command:
|
|
<pre>
|
|
./afterburner i -t [GAL_type]
|
|
</pre>
|
|
|
|
If you get some meaningfull GAL chip identification like:
|
|
<pre>
|
|
PES info: Atmel ATF16V8B VPP=10.0 Timing: prog=10 erase=25
|
|
</pre>
|
|
then all should be well and you can try to erase the chip and then
|
|
programm it to contain your .jed file.
|
|
|
|
If you get an unknown chip identification like:
|
|
<pre>
|
|
PES info: 3.3V Unknown GAL, try VPP=10..14 in 1V steps
|
|
</pre>
|
|
then look at the troubleshooting section
|
|
|
|
* Read the content fo your GAL chip. This only works if the contents
|
|
of the chip is not protected. Use the following command:
|
|
<pre>
|
|
./afterburner r -t [GAL_type]
|
|
</pre>
|
|
or to save the printed .jed fuse map to a file use:
|
|
<pre>
|
|
./afterburner r -t [GAL_type] > my_gal.jed
|
|
</pre>
|
|
|
|
* Erase the GAL chip. Before writing / programming the chip it must
|
|
be erased - even if it is a brand new chip that has not been used
|
|
before. Use the following command:
|
|
<pre>
|
|
./afterburner e -t [GAL type]
|
|
</pre>
|
|
|
|
* Program and verify the GAL chip via the following command:
|
|
<pre>
|
|
./afterburner wv -t [GAL type] -f my_new_gal.jed
|
|
</pre>
|
|
|
|
How aferburner works:
|
|
---------------------
|
|
- PC code reads and parses .jed files, then produces a binary which
|
|
can be then uploaded to Arduino via serial port. By default
|
|
/dev/ttyUSB0 is used, but that can be changed to any other device
|
|
by passing the following option to afterburner:
|
|
<pre>
|
|
-d /my/serial/device
|
|
</pre>
|
|
|
|
- PC code of afterburner communicates with Arduino UNO's afterburner
|
|
sketch by a trivial text based protocol. You can also connect directly
|
|
to Arduino UNO via serial terminal of your choice and issue some basic
|
|
commands manually.
|
|
|
|
- Arduino UNO's afterburner sketch does 2 things:
|
|
* parses commands and data sent from the PC afterburner code
|
|
* toggles the GPIO pins and drives programming of the GAL content
|
|
|
|
- more information about GAL chips and their programming can be found here:
|
|
|
|
http://www.bhabbott.net.nz/atfblast.html
|
|
|
|
http://www.armory.com/%7Erstevew/Public/Pgmrs/GAL/_ClikMe1st.htm
|
|
|
|
|
|
PCB:
|
|
---------------
|
|
If you decide to use a PCB rather than making breadboard or protoboard
|
|
build, then you have several options.
|
|
- Etch your own PCB.
|
|
* The etching design is stored in 'pcb' directory, use
|
|
afterburner_etch_1200dpi_bot.png file to transfer the design to the
|
|
copper board.
|
|
* It's a single sided design, but you'll have to patch 3
|
|
traces. See the the combined image where the patch traces are highlighted
|
|
in blue color. Two short patch wires are located near the top left corner,
|
|
the last one, slightly longer, is located underneath the MT3608 module.
|
|
* Resistors are not through hole but smt 1206 package to reduce drilling.
|
|
* The copper is on the bottom side, to make it easy to solder the socket
|
|
and capacitors. However, that makes it a bit complicated to solder the Arduino
|
|
pins. What needs to be done is to push the pins from the top part of the board
|
|
(side without copper) so that the metal bits are flush with the plastic which keeps
|
|
the pins together (plastic on the top), then solder the pins on the bottom side. You
|
|
may then take off the plastic from the top side and slide it in from the bottom side.
|
|
* You may need to flip the image before the transfer to the copper board, because
|
|
the copper is on the bottom side.
|
|
|
|
- Order it online on jlcpcb.com, pcbway.com, allpcb.com etc. Use one of the zip archive
|
|
stored in the gerbers directory and upload it to the manufacturesr's site of your choice.
|
|
Use fab_1_2.zip for smaller PCB design that allows to program 16V8 devices only.
|
|
Use fab_2_1.zip for a bigger design that allows to program 16V8 and 22V10 devices.
|
|
The price difference should be minimal as both designs fit within 100x100 mm area.
|
|
|
|
* Dimensions of the fab_1_1 board is 55x53 mm
|
|
* Dimensions of the fab_2_0 board is 57*72 mm
|
|
* 2 layer board
|
|
* PCB Thickness: 1.6, or 1.2
|
|
* Copper Weight: 1
|
|
* The rest of the options can stay default or choose whatever you fancy (colors, finish etc.)
|
|
|
|
|
|
|
|
Troubleshooting:
|
|
----------------
|
|
- it does not work!
|
|
|
|
* double check the schematics and the connection between Arduino UNO and
|
|
the GAL chip.
|
|
|
|
* ensure the GAL chip is inserted to the IC socket the right way (check
|
|
the pin 1 location)
|
|
|
|
* ensure the VPP is set correctly on the MT3608 module. If unsure which
|
|
voltage to use then try individual voltages one by one:
|
|
10V, 11V, 12V, 13V, 14V, 15V. Do not go beyond 15V as you may damage the
|
|
GAL chip.
|
|
|
|
* measure the VPP only when the GAL chip is physically DISCONNECTED (taken
|
|
out of the afterburner socket). Some brands of the GAL chip (Atmel) - when
|
|
connected - iternally lower the voltage on the Edit (VPP) pin (voltage divider?)
|
|
and such voltage reading is misleading.
|
|
|
|
* use an external power supply for your Arduino UNO, powering
|
|
just via serial USB cable may not be sufficient for driving the GAL chip and the
|
|
voltage up-converter
|
|
|
|
- I've set the VPP voltage to 14 V, put the chip into the Ziff socket, turned on
|
|
the power switch then run Afterburner with the 'i' command. My Arduino made a tiny
|
|
short buzzing noise and then reset itself. What went wrong ?
|
|
|
|
* most likely the VPP is set too high and the IC does not like that, it pulls the VPP
|
|
pin down several times causing the Arduino to reset on brown out. Solution: reduce the
|
|
VPP voltage by turning the pot clockwise on the MT3608 module.
|
|
|
|
* this happens for example on ATF devices when VPP is set to 12V. ATF should use VPP
|
|
set to 10V when programmed by Afterburner.
|
|
|
|
- afterburner reports it can not connect to /dev/ttyUSB0, permission denied
|
|
|
|
* ensure your user is member of the of the dialup group or alernatively run
|
|
afterburner as superuser (use: sudo ./afterburner ...)
|
|
|
|
* ensure no other programm on your PC uses that serial port. Close putty, minicom or other
|
|
terminals you may be running.
|
|
|
|
- afterburner fails to connect to /dev/ttyUSB0
|
|
|
|
* ensure your PC is actually connected to Arduino UNO, check a serial device
|
|
exists:
|
|
<pre>
|
|
ls -alF /dev/ttyUSB*
|
|
</pre>
|
|
|
|
- my MT3608 module does not have EN pin
|
|
|
|
* that's unfortanetly a common problem. You have to mod the module as follows:
|
|
|
|
* cut the PCB trace between pin 4 & 5 of the MT3608 chip. Verify the trace
|
|
is cut by continuity probe (no beep is audible) between pins 4 & 5.
|
|
|
|
<pre>
|
|
| Blue Potentiometer |
|
|
|_________________________|
|
|
| ______________
|
|
| | |
|
|
| | SMT Capacit. |
|
|
| |______________|
|
|
|
|
|
| 3 2 1
|
|
| | | |
|
|
| +-------+
|
|
| | |
|
|
| |4 5 |
|
|
| +-------+
|
|
| |X | |
|
|
|
|
|
|<-- left long edge of the module
|
|
</pre>
|
|
|
|
* X marks the spot - here make the vertical cut. Do not cut the pins
|
|
itself! Just cut the trace between the pins, which is only barely visible
|
|
without magnification.
|
|
|
|
* solder a thin keynar wire to pin 4 which is your ENable pin.
|
|
|
|
![See the MT3608 image in img directory for more details.](https://github.com/ole00/afterburner/raw/master/img/mt3608_mod.jpg "EN pin mod")
|
|
|
|
|
|
* Once that is done, toggling the EN pin will change the output voltage
|
|
of the module between 5V (actually slightly less than that) and the
|
|
voltage set by the potentiometer (10V and more).
|
|
|
|
- my MT3608 module does not seem to work - turning the pot does nothing
|
|
|
|
* The pot needs to be turned at least 10 revolutions counter-clockwise
|
|
to do anything useful. Keep trying.
|
|
|
|
- where to get the MT3608 module ?
|
|
|
|
* usual places: ebay, aliexpress
|
|
|
|
- how to run afterburner on Win32, Win64 or MacOSX ?
|
|
* the same way as on Linux: compile the source code
|
|
* OR use pre-compiled afterburner binaries located in 'releases' directory
|
|
* then run afterburner in terminal (use 'cmd' on WinXX) as described above
|
|
* ensure your serial device name is passed via '-d' option. For example -d COM5 on WinXX
|
|
|
|
- what are the .jed files and how to produce them
|
|
|
|
* Use WinCUPL software from Atmel. Works under Wine as well.
|
|
|
|
https://www.microchip.com/design-centers/fpgas-and-plds/splds-cplds/pld-design-resources
|
|
|
|
* WinCUPL User's manual: http://ww1.microchip.com/downloads/en/DeviceDoc/doc0737.pdf
|
|
|
|
* Try GAL Asm to produce .jed files - see link bellow.
|
|
|
|
Other GAL related links:
|
|
------------------------
|
|
- GAL chip info: https://k1.spdns.de/Develop/Projects/GalAsm/info/galer/gal16_20v8.html
|
|
|
|
- GAL chip programming protocol info: https://k1.spdns.de/Develop/Projects/GalAsm/info/galer/proggal.html
|
|
|
|
- GALmate: another open source GAL programmer: https://www.ythiee.com/2021/06/06/galmate-hardware/
|
|
|
|
- JDEC file standard 3A: https://k1.spdns.de/Develop/Projects/GalAsm/info/JEDEC%20File%20Standard%203A.txt
|
|
|
|
- GAL Asm : https://github.com/dwery/galasm
|
|
|
|
- CUPL Reference: https://web.archive.org/web/20200215065020/http://ee.sharif.edu/~logic_circuits_t/readings/CUPL_Reference.pdf
|