flash_the_atmega
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
flash_the_atmega [2013/10/03 15:49] – [Flashing the controller] breaker27 | flash_the_atmega [2013/11/17 14:05] – breaker27 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Get the firmware ====== | ====== Get the firmware ====== | ||
- | You can either take a pre-built firmware package from [[http:// | + | You can either take a pre-built firmware package from [[http:// |
+ | |||
+ | ====== Three different storage areas ====== | ||
+ | |||
+ | Every microcontroller has three parts that can be flashed (written): | ||
+ | |||
+ | * Three **fuse bytes** contains microcontroller specific configuration bits. These should only be set once. | ||
+ | * The **flash memory** contains the firmware. It can be overwritten about 10.000 times. | ||
+ | * The **EEPROM memory** contains (firmware) configuration data. It is also written to by the device in normal operation. It can we overwritten about 100.000 times. | ||
+ | |||
+ | {{danger.gif}} **In general, it's a good idea to only flash what you need to, because of the limited amount of possible write cycles.** | ||
====== Programming fuses ====== | ====== Programming fuses ====== | ||
- | If you have built your binaries by yourself with " | + | ===== Using a make rule ===== |
+ | |||
+ | If you build your binaries by yourself with " | ||
< | < | ||
Line 13: | Line 25: | ||
Be sure about the fuse settings you want to write in your microcontroller. With wrong fuse settings, your microcontroller might not be accessible anymore! | Be sure about the fuse settings you want to write in your microcontroller. With wrong fuse settings, your microcontroller might not be accessible anymore! | ||
- | ====== Programming your own fuses ====== | + | ===== Calling avrdude directly |
- | Depending on the use of an external crystal | + | If you are creating a new or modified SHC device, you may want to write other than the default fuses. You can do so with: |
- | Please see the text files in the [[http:// | + | < |
+ | avrdude -p ATMEGA328P -U lfuse:w:0x??:m | ||
+ | </code> | ||
- | You can write fuses by calling e.g. | + | (replace ?? by the hex value for the needed fuse settings and use " |
+ | |||
+ | ===== Strange avrdude error messages ===== | ||
+ | |||
+ | Some fuses only use a part of their bits. If you set such a fuse, avrdude may complain at verification that it read out another value than it wrote. | ||
+ | |||
+ | Writing the EFuse of the ATMega168 or 328 returns a value of only the last 3 bits (upper 5 unused), so a value of xxxxxyyy is read out as 00000yyy. Example: | ||
< | < | ||
- | avrdude | + | avrdude: |
+ | 0xfc != 0x04 | ||
+ | avrdude: verification error; content mismatch | ||
+ | </ | ||
+ | |||
+ | Don't worry. The warning is only returned because avrdude does not know that the upper 6 bits are always 1 (as per spec). | ||
+ | |||
+ | ====== Flashing the firmware / eeprom ====== | ||
+ | |||
+ | ===== Using flash scripts ===== | ||
+ | |||
+ | After setting up avrdude, you can flash the firmware by calling the flash scripts | ||
+ | |||
+ | * **flash.cmd** / **flash.sh** for flashing firmware, eeprom and fuses | ||
+ | * **flash_firmware.cmd** / **flash_firmware.sh** for flashing only the firmware | ||
+ | * FIXME: The Linux scripts do not exist yet. | ||
+ | |||
+ | ===== Using a make rule ===== | ||
+ | |||
+ | If you have the source code on your machine, you can flash the firmware with the following command from the firmware subdirectory: | ||
+ | |||
+ | < | ||
+ | make program | ||
</ | </ | ||
- | (replace ?? by the needed fuse settings and use " | + | ===== Calling avrdude directly ===== |
- | ====== Flashing the controller ====== | + | If you want to call avrdude by hand you can flash everything with: |
< | < | ||
- | pi@ninjablock ~/ | + | avrdude -p m328p -U flash:w:shc_basestation.hex -U eeprom: |
</ | </ | ||
+ | (leave one part "-U ..." out to flash only a part). |
flash_the_atmega.txt · Last modified: 2023/03/01 19:40 by breaker27