Bootloader Programming

From Class Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Bootloader Programming

The bootloader is a program that needs to be loaded into the ATMEGA328P before you can program your Arduino with the USB/serial programmer.

We really should have provided a programming header for that as well as the one for the USB/serial programmer, but since we didn't, the professor will program your ATMEGA328P units using the information on this web page.

On the USBtinyISP six pin header, the connections I made are: Pin 1 in brown. Pin 2 in red. Pin 3 is orange. Pin 4 is yellow. Pin 5 is green. Pin 5 is blue. The connections on the Pro Mini are from here. Programmer connections.jpg

First I need to check to see that the fuses are okay, and that the USBtinyISP will work.

$ avrdude -c usbtiny -p m328p

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

I read the original firmware into an Intel hex file using this command below just in case the ATmegaBOOT_168_atmega328_pro_8MHz.hex file doesn't work.

$ avrdude -c usbtiny -p m328p -U flash:r:original.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: reading flash memory:

Reading | ################################################## | 100% 50.06s



avrdude: writing output file "original.hex"

avrdude: safemode: Fuses OK

avrdude done.  Thank you.


Now I programmed the ATMEGA328 using the following command: Don't do this! It turned out to be a good thing I backed up the original firmware, because though the following programmed okay, I couldn't use the serial programmer to load sketches from the Arduino IDE.

$ avrdude -c usbtiny -p m328p -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "ATmegaBOOT_168_atmega328_pro_8MHz.hex"
avrdude: input file ATmegaBOOT_168_atmega328_pro_8MHz.hex auto detected as Intel Hex
avrdude: writing flash (32652 bytes):

Writing | ################################################## | 100% 68.70s



avrdude: 32652 bytes of flash written
avrdude: verifying flash memory against ATmegaBOOT_168_atmega328_pro_8MHz.hex:
avrdude: load data flash data from input file ATmegaBOOT_168_atmega328_pro_8MHz.hex:
avrdude: input file ATmegaBOOT_168_atmega328_pro_8MHz.hex auto detected as Intel Hex
avrdude: input file ATmegaBOOT_168_atmega328_pro_8MHz.hex contains 32652 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 48.37s



avrdude: verifying ...
avrdude: 32652 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

So after testing and finding this bootloader wouldn't allow programming sketches from the Arduino IDE, I flashed back the original firmware, and it worked.

$ avrdude -c usbtiny -p m328p -U flash:w:original.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "original.hex"
avrdude: writing flash (32670 bytes):

Writing | ################################################## | 100% 67.85s



avrdude: 32670 bytes of flash written
avrdude: verifying flash memory against original.hex:
avrdude: load data flash data from input file original.hex:
avrdude: input file original.hex contains 32670 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 49.58s



avrdude: verifying ...
avrdude: 32670 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

The next step was to unsolder the ATMEGA328P and solder in a new one to program. Sockets for these are expensive, and even if we had the budget, there is no time for any other method.