Thursday, January 24, 2013

How to use the Atmel ATmega1284 (non-P version) with tools that don't support it

I found out by accident there is now an Atmel ATmega1284 microcontroller, as well as the older ATmega1284P. The first I knew was when I tried to upload the bootloader and avrdude warned of a signature mismatch:

avrdude: Device signature = 0x1e9706
avrdude: Expected signature for ATMEGA1284P is 1E 97 05
              Double check chip, or use -F to override this check

Correcting the device didn't help, avrdude doesn't recognise the ATmega1284. That could be fixed easily by creating a custom entry in $HOME/.avrduderc. I didn't bother with that since avr-gcc doesn't support the ATmega1284. At this point I was slightly worried as I had ordered a large quantity of ATmega1284 instead of the ATmega1284P.

A work-around

Fortunately there is a work-around. The two microcontrollers are essentially identically except for some small electrical differences relating to power usage and the last signature byte. Therefore code compiled for the ATmega1284P will run on the ATmega1284. If you are using avrdude to upload just add the -F command line option to force the signature check to pass.

If you use the xboot bootloader you should have no further problems after installing the bootloader since xboot doesn't check the signature bytes. Users of the Optiboot bootloader are probably not so fortunate; I believe the signature is checked - I haven't tested it since I'm now using xboot on all of my Calunium development boards.


  1. Hi,

    Can you point me to that code that can be write on Atmega1284 (non P version).
    Also till now, I cannot have connection to it through my USBasp v2 programmer. I tried with some ISP softwares and Atmel Studio.

    Do you have any idea?


    1. I think any code that is valid on the ATmega1284P is valid on the ATmega1284 non-P version. I believe the P signifies picopower, which allows the brownout detection circuitry to be disabled. The non-P version still allows the register bit to be set for disabling brownout; I presume it has no effect on power consumption. I haven't noticed any ill-effects of setting it.

      I cannot provide support for the USBasp programmer. Please contribute the manufacturer or your supplier.