Difference between revisions of "DuPAL"

From Proghq
Jump to: navigation, search
(Building)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
WIP
+
==Quick start==
 +
You will need:
  
Pre-compiled: https://proghq.org/media/dupal/
+
*Ubuntu 20.04
 +
*Assembled DuPAL 2.0 w/ 20 pin ZIF installed
 +
**ATMEGA328P blank / in any state
 +
*DuPAL power supply and USB serial
 +
*avrdude compatible programmer
 +
**I used avrispmkII
 +
*PAL16L8
 +
*Optional: tool to flash PAL16L8
 +
**TL866 won't work :(
  
<br />
+
===Quick flash===
 +
 
 +
For more information see the [https://github.com/DuPAL-PAL-DUmper/DuPAL_Board main page]
 +
 
 +
Pre-compiled hex files: https://proghq.org/media/dupal/
 +
 
 +
mkdir ~/dupal
 +
cd ~/dupal
 +
sudo apt-get install -y avrdude minicom
 +
wget https://proghq.org/media/dupal/optiboot_v8.0_atmega328_57600.hex
 +
wget https://proghq.org/media/dupal/dupal_v0.1.2.hex
 +
 
 +
ISP connection:
 +
  * Pin 1 (red stripe in cable) towards crystal
 +
  * Notch faces towards ATMEGA
 +
 
 +
You need an avrdude compatible programmer. To see the list of compatible programmers type
 +
 
 +
avrdude -c help
 +
 
 +
Once you know the flag you need, here's an example assuming avrispmkII:
 +
 
 +
avrdude -v -c avrispmkII -P usb -p atmega328p -e -u \
 +
    -U efuse:w:0xFD:m \
 +
    -U hfuse:w:0xDE:m \
 +
    -U lfuse:w:0xFF:m \
 +
    -U flash:w:optiboot_v8.0_atmega328_57600.hex
 +
 +
You should see a green blinky LED
 +
 
 +
avrdude -v -c avrispmkII -P usb -p atmega328p -u -D \
 +
    -U flash:w:dupal_v0.1.2.hex
 +
 
 +
The green blinky might stop. Hit the reset button and it should blink again
 +
 
 +
Start up a serial port at 57600 baud using your favorite terminal emulator such as:
 +
 
 +
minicom -b 57600 -D /dev/ttyUSB0
 +
 
 +
Hit "reset" and you should see:
 +
 
 +
(blinky for a few seconds)
 +
 
 +
Then:
 +
 
 +
DuPAL - 0.1.2
 +
 +
REMOTE_CONTROL_ENABLED
 +
 
 +
If you see this, congrats! your DuPAL is flashed and ready to go! Press ^A and then x to exit minicom
 +
 
 +
A healthy board should have a steady red power LED and a brief green blink at power on
 +
 
 +
===Quick test===
 +
 
 +
For more information see the [https://github.com/DuPAL-PAL-DUmper/DuPAL_Analyzer main page]
 +
 
 +
cd ~/dupal
 +
wget https://proghq.org/media/dupal/dupal-analyzer-0.1.4-5430dab.jar
 +
java -jar dupal-analyzer-0.1.4-5430dab.jar
 +
 
 +
Example output:
 +
 
 +
$ java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar -h
 +
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
 +
[main] ERROR info.hkzlab.dupal.analyzer.App - Wrong number of arguments passed.
 +
dupal_analyzer <serial_port> <pal_type> [<output_file> hex_output_mask]
 +
Where <pal_type> can be:
 +
10L8
 +
12H6
 +
16L8
 +
20L8
 +
16R4
 +
16R6
 +
16R8
 +
20R4
 +
20R6
 +
20R8
 +
 
 +
Burn trackstar128_u33_pal16l8a2nc.jed (FIXME: instructions)
 +
 
 +
wget https://proghq.org/media/dupal/trackstar128_u33_pal16l8a2nc.jed
 +
 
 +
Testing:
 +
 
 +
Turn off DuPAL
 +
Insert PAL into 20 pin socket
 +
Turn on DuPAL
 +
java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar /dev/ttyUSB0 16L8 out.json
 +
Both the activity green light and the "20 pin active" LED should turn on
 +
Let run. Took just over a minute on my setup
 +
Note: .json file will not be produced
 +
 
 +
Sample output:
 +
 
 +
$ java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar /dev/ttyUSB0 16L8 out.json
 +
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Starting IO type detection... This could take a while.
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Currently detected mask is 07
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Detected the following IO as Outputs mask: 07
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Now, turn OFF and ON again the DuPAL to reset the PAL and run this tool again by specifying the mask
 +
and output file.
 +
 
 +
Now re-run with the suggested mask option:
 +
 
 +
java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar /dev/ttyUSB0 16L8 out.json 07
 +
 
 +
Sample output:
 +
 
 +
 
 +
==Testing==
 +
 
 +
With no chip in it takes about 9 minutes and gives a mask of 00. Be suspicious if you see this
 +
 
 +
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Starting IO type detection... This could take a while.
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Currently detected mask is 00
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Detected the following IO as Outputs mask: 00
 +
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Now, turn OFF and ON again the DuPAL to reset the PAL and run this tool again by specifying the mask
 +
and output file.
 +
 
 +
 
 +
==Building==
  
== Building ==
+
===MCU===
  
 
Optiboot
 
Optiboot
Line 23: Line 154:
 
  # 8a16ce8d98d7bf002c54c7aa911bfd124d9e1961  optiboot_atmega328.hex
 
  # 8a16ce8d98d7bf002c54c7aa911bfd124d9e1961  optiboot_atmega328.hex
  
Flash optiboot. Example CLI to use ISP header, but can also put into tl866 etc:
+
Flash optiboot. Example CLI to use ISP header, but can also put into tl866 etc
  
  avrdude -c dragon_isp -P usb \
+
Sample command line:
    -p atmega328p -e -u -U efuse:w:0xFD:m -U hfuse:w:0xDE:m \
+
 
    -U lfuse:w:0xFF:m -U flash:w:optiboot_atmega328.hex
+
[[DuPAL optiboot flash output|Sample output]]
 +
 
 +
Originally I tried using BP Microsystems but didn't work (fuses not set right?). I then flashed using avrdude / header and worked (green LED blinking).
 +
 
 +
TODO: dump end flash so can program using bp
 +
 
 +
cd DuPAL_Firmware
 +
make
 +
make program
 +
 
 +
===Analyzer===
 +
 
 +
sudo apt install maven
 +
mvn compile
 +
sudo mvn install
 +
 
 +
You should now see something like
 +
 
 +
$ ls -lah ./target/*.jar
 +
  -rw-r--r-- 1 root root 51K May 21 14:34 ./target/dupal-analyzer-0.1.4.jar
 +
-rw-r--r-- 1 root root 536K May 21 14:35 ./target/dupal-analyzer-0.1.4-jar-with-dependencies.jar
 +
$ java -jar ./target/dupal-analyzer-0.1.4-jar-with-dependencies.jar -h
 +
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
 +
[main] ERROR info.hkzlab.dupal.analyzer.App - Wrong number of arguments passed.
 +
dupal_analyzer <serial_port> <pal_type> [<output_file> hex_output_mask]
 +
Where <pal_type> can be:
 +
10L8
 +
12H6
 +
16L8
 +
20L8
 +
16R4
 +
16R6
 +
16R8
 +
20R4
 +
20R6
 +
20R8
 +
 
 +
== Logic minimization ==
 +
The recommended flow is to use espresso. Unfortunately this program is a bit old and crusty
 +
 
 +
java -jar target/espresso-converter-0.0.3-jar-with-dependencies.jar ~/doc/ext/dupal/u33.json out.esp
 +
 
 +
 
 +
found this but it crashes under most usage scenarios...I had to work to find something that didn't
 +
 
 +
git clone <nowiki>https://github.com/JackHack96/logic-synthesis.git</nowiki>
 +
<br />

Latest revision as of 21:45, 28 May 2022

Quick start

You will need:

  • Ubuntu 20.04
  • Assembled DuPAL 2.0 w/ 20 pin ZIF installed
    • ATMEGA328P blank / in any state
  • DuPAL power supply and USB serial
  • avrdude compatible programmer
    • I used avrispmkII
  • PAL16L8
  • Optional: tool to flash PAL16L8
    • TL866 won't work :(

Quick flash

For more information see the main page

Pre-compiled hex files: https://proghq.org/media/dupal/

mkdir ~/dupal
cd ~/dupal
sudo apt-get install -y avrdude minicom
wget https://proghq.org/media/dupal/optiboot_v8.0_atmega328_57600.hex
wget https://proghq.org/media/dupal/dupal_v0.1.2.hex

ISP connection:

 * Pin 1 (red stripe in cable) towards crystal
 * Notch faces towards ATMEGA

You need an avrdude compatible programmer. To see the list of compatible programmers type

avrdude -c help

Once you know the flag you need, here's an example assuming avrispmkII:

avrdude -v -c avrispmkII -P usb -p atmega328p -e -u \
    -U efuse:w:0xFD:m \
    -U hfuse:w:0xDE:m \
    -U lfuse:w:0xFF:m \
    -U flash:w:optiboot_v8.0_atmega328_57600.hex

You should see a green blinky LED

avrdude -v -c avrispmkII -P usb -p atmega328p -u -D \
    -U flash:w:dupal_v0.1.2.hex

The green blinky might stop. Hit the reset button and it should blink again

Start up a serial port at 57600 baud using your favorite terminal emulator such as:

minicom -b 57600 -D /dev/ttyUSB0

Hit "reset" and you should see:

(blinky for a few seconds)

Then:

DuPAL - 0.1.2

REMOTE_CONTROL_ENABLED

If you see this, congrats! your DuPAL is flashed and ready to go! Press ^A and then x to exit minicom

A healthy board should have a steady red power LED and a brief green blink at power on

Quick test

For more information see the main page

cd ~/dupal
wget https://proghq.org/media/dupal/dupal-analyzer-0.1.4-5430dab.jar
java -jar dupal-analyzer-0.1.4-5430dab.jar

Example output:

$ java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar -h
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
[main] ERROR info.hkzlab.dupal.analyzer.App - Wrong number of arguments passed.
dupal_analyzer <serial_port> <pal_type> [<output_file> hex_output_mask]
Where <pal_type> can be:
	10L8
	12H6
	16L8
	20L8
	16R4
	16R6
	16R8
	20R4
	20R6
	20R8

Burn trackstar128_u33_pal16l8a2nc.jed (FIXME: instructions)

wget https://proghq.org/media/dupal/trackstar128_u33_pal16l8a2nc.jed

Testing:

Turn off DuPAL
Insert PAL into 20 pin socket
Turn on DuPAL
java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar /dev/ttyUSB0 16L8 out.json
Both the activity green light and the "20 pin active" LED should turn on
Let run. Took just over a minute on my setup
Note: .json file will not be produced

Sample output:

$ java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar /dev/ttyUSB0 16L8 out.json
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Starting IO type detection... This could take a while.
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Currently detected mask is 07
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Detected the following IO as Outputs mask: 07
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Now, turn OFF and ON again the DuPAL to reset the PAL and run this tool again by specifying the mask 
and output file.

Now re-run with the suggested mask option:

java -jar dupal-analyzer-0.1.4-5430dab-jar-with-dependencies.jar /dev/ttyUSB0 16L8 out.json 07

Sample output:


Testing

With no chip in it takes about 9 minutes and gives a mask of 00. Be suspicious if you see this

[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Starting IO type detection... This could take a while.
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - detectIOTypeMask -> Currently detected mask is 00
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Detected the following IO as Outputs mask: 00
[main] INFO info.hkzlab.dupal.analyzer.board.boardio.DuPALAnalyzer - Now, turn OFF and ON again the DuPAL to reset the PAL and run this tool again by specifying the mask 
and output file.


Building

MCU

Optiboot

# https://github.com/Optiboot/optiboot

# 328P uses 115200?
# a few use 57600 but not the one we need :(
# wget https://github.com/Optiboot/optiboot/releases/download/v8.0/Optiboot-8.0.zip

git clone https://github.com/Optiboot/optiboot.git
cd optiboot
git checkout -b v8.0 v8.0
cd bootloaders/optiboot
make atmega328 AVR_FREQ=20000000L LED_START_FLASHES=8 BAUD_RATE=57600
# sha1sum optiboot_atmega328.hex
# 8a16ce8d98d7bf002c54c7aa911bfd124d9e1961  optiboot_atmega328.hex

Flash optiboot. Example CLI to use ISP header, but can also put into tl866 etc

Sample command line:

Sample output

Originally I tried using BP Microsystems but didn't work (fuses not set right?). I then flashed using avrdude / header and worked (green LED blinking).

TODO: dump end flash so can program using bp

cd DuPAL_Firmware
make
make program

Analyzer

sudo apt install maven
mvn compile
sudo mvn install

You should now see something like

$ ls -lah ./target/*.jar
-rw-r--r-- 1 root root  51K May 21 14:34 ./target/dupal-analyzer-0.1.4.jar
-rw-r--r-- 1 root root 536K May 21 14:35 ./target/dupal-analyzer-0.1.4-jar-with-dependencies.jar
$ java -jar ./target/dupal-analyzer-0.1.4-jar-with-dependencies.jar -h
[main] INFO info.hkzlab.dupal.analyzer.App - DuPAL Analyzer 0.1.4
[main] ERROR info.hkzlab.dupal.analyzer.App - Wrong number of arguments passed.
dupal_analyzer <serial_port> <pal_type> [<output_file> hex_output_mask]
Where <pal_type> can be:
	10L8
	12H6
	16L8
	20L8
	16R4
	16R6
	16R8
	20R4
	20R6
	20R8

Logic minimization

The recommended flow is to use espresso. Unfortunately this program is a bit old and crusty

java -jar target/espresso-converter-0.0.3-jar-with-dependencies.jar ~/doc/ext/dupal/u33.json out.esp


found this but it crashes under most usage scenarios...I had to work to find something that didn't

git clone https://github.com/JackHack96/logic-synthesis.git