User Tools

Site Tools


flash_the_atmega

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
flash_the_atmega [2013/10/05 11:29] breaker27flash_the_atmega [2023/03/01 19:40] (current) – [Using flash scripts] breaker27
Line 1: Line 1:
 ====== Get the firmware ====== ====== Get the firmware ======
  
-You can either take a pre-built firmware package from [[http://www.smarthomatic.org/builds/builds.html]] or build your own firmware. If you take the prebuilt package, extract it to a directory of your choice.+You can either take a pre-built firmware package from [[http://www.smarthomatic.org/builds/builds.html]] or [[build your own firmware|build your own firmware]]. If you take the prebuilt package, extract it to a directory of your choice. 
 + 
 +====== 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 ======
 +
 +===== Using a make rule =====
  
 If you build your binaries by yourself with "make", your fuse settings should be available as files **lfuse.bin**, **hfuse.bin** and **efuse.bin** in the bin subdirectory **of the device you want to flash**. You can write these fuses with: If you build your binaries by yourself with "make", your fuse settings should be available as files **lfuse.bin**, **hfuse.bin** and **efuse.bin** in the bin subdirectory **of the device you want to flash**. You can write these fuses 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 =====
  
 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: 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:
Line 23: Line 35:
 (replace ?? by the hex value for the needed fuse settings and use "lfuse", "hfuse" or "efuse" accordingly). (replace ?? by the hex value for the needed fuse settings and use "lfuse", "hfuse" or "efuse" accordingly).
  
-====== Flashing the controller ======+===== 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: 
 + 
 +<code> 
 +avrdude: verification error, first mismatch at byte 0x0000 
 +         0xfc != 0x04 
 +avrdude: verification error; content mismatch 
 +</code> 
 + 
 +Don't worry. The warning is only returned because avrdude does not know that the upper 5 bits are always 1 (as per spec). 
 + 
 +====== Flashing the firmware / eeprom ======
  
 ===== Using flash scripts ===== ===== Using flash scripts =====
Line 31: Line 57:
   * **flash.cmd** / **flash.sh** for flashing firmware, eeprom and fuses   * **flash.cmd** / **flash.sh** for flashing firmware, eeprom and fuses
   * **flash_firmware.cmd** / **flash_firmware.sh** for flashing only the firmware   * **flash_firmware.cmd** / **flash_firmware.sh** for flashing only the firmware
-  * FIXME: The Linux scripts do not exist yet. 
  
-===== Calling avrdude directly =====+===== Using a make rule =====
  
-If you want to call avrdude by hand you can flash everything with:+If you have the source code on your machine, you can flash the firmware with the following command from the firmware subdirectory:
  
 <code> <code>
-avrdude -p m328p -U flash:w:shc_basestation.hex -U eeprom:w:shc_basestation.e2p:r -U lfuse:w:lfuse.bin:r -U hfuse:w:hfuse.bin:r -U efuse:w:efuse.bin:r+make program
 </code> </code>
  
-(leave one part "-U ..." out to flash only a part).+===== Calling avrdude directly =====
  
-You should only write the fuses once. **And in general, it's a good idea to only flash what you need to, because there is a limited amount of possible flash cycles.** +If you want to call avrdude by hand you can flash everything with:
- +
-===== 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:+
  
 <code> <code>
-make program+avrdude -p m328p -U flash:w:shc_basestation.hex -U eeprom:w:shc_basestation.e2p:r -U lfuse:w:lfuse.bin:r -U hfuse:w:hfuse.bin:r -U efuse:w:efuse.bin:r
 </code> </code>
 +
 +(leave one part "-U ..." out to flash only a part).
flash_the_atmega.1380965374.txt.gz · Last modified: 2013/10/05 11:29 by breaker27