|
|
|
|
|
|
|
where is the (optiboot) bootloader? Hex file is here:
|
|
arduino-1.8.5/hardware/arduino/avr/bootloaders/optiboot_atmega328.hex
|
|
|
|
ref: https://forum.arduino.cc/index.php?topic=125622.0
|
|
|
|
example cmd:
|
|
avrdude -c dragon_isp -P usb -p atmega328p -U flash:w:main.hex:i
|
|
|
|
ref: https://forum.arduino.cc/index.php?topic=350727.0
|
|
|
|
HOWEVER THAT IS WRONG. TRAP.
|
|
|
|
EDIT: also need fuse bits programmed or else this will not work.
|
|
(external crystal is used, in uno.)
|
|
TRAP #2: you need an external crystal (16MHz) in the avrdragon, AFTER programming
|
|
the fuse bits. You can solder wires to another uno board's crystal
|
|
with the chip removed, if you don't have a 16MHz piece of quartz around.
|
|
|
|
|
|
|
|
see https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader
|
|
example there (note this is usbtiny)
|
|
#avrdude -b 19200 -c dragon_isp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
|
|
EDIT: looks like sparkfun has incorrect information (or outdated).
|
|
see arduino-1.8.5/hardware/arduino/avr/boards.txt
|
|
for what arduino has for board values
|
|
wrong entry (out of date):
|
|
avrdude -b 19200 -c dragon_isp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
|
|
|
|
correct entry: (efuse must be 0xFD, as the reserved high bits must be set as 1's)
|
|
avrdude -b 19200 -c dragon_isp -p m328p -v -e -U efuse:w:0xFD:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m
|
|
|
|
below are fuse bits. These should be used as well.
|
|
avrdude -b 19200 -c dragon_isp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m
|
|
|
|
see also
|
|
http://www.martyncurrey.com/arduino-atmega-328p-fuse-settings/
|
|
|
|
|
|
|
|
|
|
Get a good ziff socket for the dragon.
|
|
|
|
Notice that the first header is VCC/GND breakout, the second is ICSP, and the
|
|
third is directly tied to ZIFF socket.
|
|
|
|
Also notice that JTAG and HV_PRG are not connected.
|
|
|
|
My dragon was already setup for this, though some extra gnds were connected
|
|
(e.g. I had vcc/gnd header's gnd connected to ICSP #6, and then another GND to
|
|
pin 8 on the third breakout. But this picture has only ISP #6 to 8 (omitting
|
|
the ground loop). Possibly either will work. I know mine works.
|
|
|
|
|
|
|
|
You can watch the leds on the uno to see if it's working.
|
|
|
|
if you do it correctly, LED 13 lights up with optiboot, then goes blank (or
|
|
into sketch). If you have it failed, from a blank atmega328p, it will
|
|
go solid, then after a short while start to blink.
|
|
|
|
|
|
I have a dedicated Avrdragon for programming optiboot onto atmega328p.
|
|
makes things easy.
|
|
|
|
|
|
WRONG CHIP:
|
|
remember atmega328p-pu is the right chip
|
|
atmega328-pu is wrong.
|
|
You can program atmega328-pu, by changing avrdude paramters, or using
|
|
-F
|
|
|
|
In this case, I changed atmega328p to atmega328 to reflect that I had the
|
|
incorrect chip
|
|
|
|
|
|
|
|
error:
|
|
sometimes it will error out:
|
|
avrdude: usbdev_open(): Found AVRDRAGON, serno: 00#########
|
|
avrdude: jtagmkII_getsync(): sign-on command: status -1
|
|
^C
|
|
|
|
|
|
at this point, just disconnect and reconnect avrdragon from gnulinux box
|