Fri, 12 Nov 2010

# Atmel 8-bit devices and invalid device signatures

It just took me the better part of a day to find out why my oh-so-simple microcontroller couldn't be programmed. I've this really simple board, consisting basically of an ATmega8 or ATmega8l, a 6-pin standard ISP connector and some surrounding power supply parts (no external clock).

Now, if you take a ATmega8 from the reel it comes pre-programmed to run with 1 MHz from the internal oscillator. Trying to access and program the device connected to an STK500 SDK using avrdude always resulted in errors:

avrdude: Device signature = 0x010305

or

avrdude: Device signature = 0x010307

Strange. Because normally you can either program the device or it doesn't respond at all (0x010301 and 0x010304 also turned up sometimes — in AVR Studio speak: 0x01 0x03 [0x05,0x04,0x01]).

I double checked all solder connections and even tried three different devices on different PCBs, even from different production lots. Always the same error. Meanwhile I had already checked the STK500 against other development boards equipped with an ATmega168 and ATmega8 — those worked.

Finally I dug out an old Windows XP machine running the AVR Studio, and there it occurred to me:

ATmega8 STK500 ISP frequency setting

To speed up programming, I had increased the ISP frequency from default 115.2 kHz to 460.8 kHz. Turns out that the fine print says the ISP frequency should be lower than 1/4 of the microcontroller clock (1 MHz in this case). 1 MHz / 4 = 250 kHz — so I was well above. Turning the frequency down to 115.2 kHz made everything magically work:

avrdude: Device signature = 0x1e9307
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

I hope to save someone else some time with this post.

posted at 11:06 | path: /uc | permanent link to this entry

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.