Difference between revisions of "Quick Start Guide/Flashing"

From Ethersex_Wiki
Jump to: navigation, search
(AVR Fuses)
 
(29 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{i18n|Flashing}}
+
{{i18n|Quick Start Guide/Flashing}}
  
= Flash AVR Net-IO with "ATMEL Evaluations-Board" made by Pollin=
+
= Flashing =
  
As a beginner it's difficult to understand everything in terms of flashing.
+
After compiling the ''ethersex.hex'' you can flash it with avrdude. You can either use avrdude on the command line or call the target ''program'' from the [[Ethersex]] Makefile.
And it's also difficult to find all information.
 
  
== What's needed? ==
+
== Prerequisites ==
* AVR Net-IO
 
* ATMEL Evaluation-Board
 
* a 1 on 1 Cable for the [[ISP]]-Port (10-pin Connector).
 
  
=== Other ISP Programmers ===
+
* the previously selected board, e.g. AVR NET-IO, ready built and (hopefully) tested
 +
* an ISP-Programmer of your choice supported by [http://www.nongnu.org/avrdude avrdude]
 +
* an ISP connector cable that fits to your programmer and your board (either 6 or 10-pin)
 +
* an ethersex.hex compiled in the [[Quick_Start_Guide/Configuration | previous step]]
  
If you have a ISP-Programmer with 6-pin port you can create an adaptor. You can see the pin configuration in figure 4-1 at page 5 [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf AVR042: AVR Hardware Design Considerations].
+
If you have an ISP-Programmer with a 6-pin port and a board with a 10-pin header - like the AVR NET-IO - you can create an adapter. You can see the pin configuration in figure 4-1 at page 5 [http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf AVR042: AVR Hardware Design Considerations]. Note that Pin 4 of the 10-pin connector is not used on the AVR NET-IO. GND has to be connected to one of the other Pins (6, 8 or 10).
  
Warning: Pin 4 of the 10-pin connector is not used on the Net-IO. GND has to be connected to one of the other Pins (6, 8 or 10)
+
== Flashing the image with avrdude ==
  
== Flashing with Linux ==
+
The following commands are just examples, the actual command line depends on your ISP-Programmer and hardware.
*Connect the 10-pin Cable to the ISP-Connector.
 
*Plug in the power adaptor of the AVR Net-IO.
 
*If everything is connected right, the yellow LED of the Evaluation-Board is shining.
 
  
After compiling the ethersex.hex you can flash it with avrdude. The following commands depend on your ISP-Programmer. This example is for a serial connection:
+
This example is for a serial connection (e.g. the ATMEL Evaluation-Board):
  
 
   avrdude -v -p m32 -c ponyser -P /dev/ttyS0 -U flash:w:ethersex.hex  
 
   avrdude -v -p m32 -c ponyser -P /dev/ttyS0 -U flash:w:ethersex.hex  
  
For a USB-ISP-Programmer this command should be used:
+
This example for a real USB ISP-Programmer:
 +
 
 +
  avrdude -p m1284p -c avrispmkII -P usb -U flash:w:ethersex.hex
 +
 
 +
For a serial programmer connected via an USB-serial-adapter this may be used:
  
 
   avrdude -v -p m32 -c stk500v2 -P /dev/ttyACM0 -U flash:w:ethersex.hex
 
   avrdude -v -p m32 -c stk500v2 -P /dev/ttyACM0 -U flash:w:ethersex.hex
  
For a parallel ISP-Cable:
+
And this one for a parallel ISP-Cable:
  
 
   avrdude -p m32 -e -c stk200 -U flash:w:ethersex.hex
 
   avrdude -p m32 -e -c stk200 -U flash:w:ethersex.hex
Line 36: Line 36:
 
After flashing remove the ISP-Cable and interrupt the power connection for a short time to reboot the board.
 
After flashing remove the ISP-Cable and interrupt the power connection for a short time to reboot the board.
  
   * -p m32: ATMega32; -p m644: ATMega644
+
   * -p m32: ATMega32; -p m644: ATMega644; -p ? to list the valid parts
 
   * -v: display debug messages  
 
   * -v: display debug messages  
   * -c ponyser: the way avrdude speaks with the Evaluation Board; -c stkk500v2 for the Atmel board
+
   * -c ponyser: traditional serial programmer; -c stkk500v2 for the Atmel board
   * -P /dev/tty.serial the serial port your programmer is connected to; -P COM1 for windows machines
+
   * -P /dev/tty.serial the serial port your programmer is connected to; -P COM1 for windows machines; -P usb for USB
 
   * -U the command you want to execute. In our case we want to flash: -U flash:w:ethersex.hex
 
   * -U the command you want to execute. In our case we want to flash: -U flash:w:ethersex.hex
  
In some cases you have to set the FUSE Bits, which is possible with this command:
+
== Using avrdude from the makefile ==
 
 
  * -U lfuse:w:0xCF:m -U hfuse:w:0xDC:m
 
 
 
To get the correct FUSE-Settings you should visit http://www.engbedded.com/fusecalc/
 
 
 
Parameters for MyAVR mySmartusb light (the -e is important):
 
  avrdude -p m32 -e -c stk500v2  -P /dev/ttyUSB0 -U flash:w:ethersex.hex
 
 
 
== Replace ATMega32 with an ATMega644, ATMega644p or ATMega1284p ==
 
 
 
ATMega644, ATMega644p and ATMega1284p have got a bigger flash then the ATMega32. This gives the possibility to add more modules to your Image.
 
 
 
=== Swapping the Microcontroller ===
 
* Disconnect power and ISP-Connector.
 
* Remove the old processor from your board.
 
* Insert the new processor while the slot is at the same position as in the socket.
 
 
 
=== Setting the FUSE-Bits ===
 
* Reconnect the ISP and the power.
 
* Set the FUSE-Bits.
 
* '''Important: ''' in the condition as supplied the 644 is programmed to 8 MHz internal RC-Oscillator '''and''' the clock is divided by 8 -> 1 MHz clock speed. If an external Quarz is used, the Bit CKDIV8 has to be set to 0.
 
 
 
  
* (taken from dinus) The ATMega has a clock speed of 1 MHz, no JTAG.
+
Since [https://github.com/ethersex/ethersex/commit/16c2a388ec775b51c049db1eeff3a8171c6ad71b 16c2a388ec] the [[Ethersex]] makefile supports two new targets, ''program'' and ''fuses'', to invoke avrdude. The target ''program'' calls avrdude with the options to flash the previously compiled ''ethersex.hex'' to the MCU. The ''fuses'' target may be used to program the MCUs fuse registers.
  avrdude -p m644 -c ponyser -P /dev/ttyS0 -U lfuse:w:0xE7:m -U hfuse:w:0xDC:m -U efuse:w:0xFF:m
 
  
Fuse-Bits from "DiDi". JTAG is turned ON.
+
AVRDUDE options and MCU fuse register settings may be configured via a menuconfig dialog. All settings will be saved to the current profile ''.config''.
  
  * -U lfuse:w:0xf7:m -U hfuse:w:0x99:m -U efuse:w:0xfc:m
+
Available settings and choices on the AVRDUDE configuration page depend on the MCU and clock frequency configured on the General Setup dialog. Please go back to the [[Quick_Start_Guide/Configuration | previous step]] if you haven't done that yet.
  
Fuse-Bits from "loddel". JTAG is turned OFF.
+
=== AVRDUDE Configuration ===
  
  * -U lfuse:w:0xf7:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m
+
If - and only if - the avrdude executable could be found in your ''PATH'', menuconfig's mainmenu will show an option to enter AVRDUDE configuration.
  * -U lfuse:w:0xe7:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m
 
  
Fuse-Bits from "Gregor". "The 644 runs at 16 MHz Quartz and is not divided by 8." JTAG is turned ON.
+
[[File:avrdude_mainmenu.png|right|sub|thumb|200px|menuconfig's mainmenu with AVRDUDE Configuration selected]]
  
  * -U lfuse:w:0xef:m -U hfuse:w:0x99:m -U efuse:w:0xff:m
+
The AVRDUDE configuration page allows to setup the most common options for avrdude:
  
=== flash Ethersex ===
+
[[File:avrdude_menu.png|right|sub|thumb|200px|AVRDUDE configuration page]]
* change Config of Ethersex (make menuconfig) to ATMega644 and build (make)
 
* flash with
 
  avrdude -p m644 -c ponyser -P /dev/ttyS0 -U flash:w:ethersex.hex -v
 
  
=== Differentes bettween ATMega32, ATMega644, ATMega644p and ATMega1284p===
+
;Programmer Type
 +
:avrdude option '-c'.
 +
:Use the programmer configuration choosen from the list.
 +
:
 +
:Refer to the official avrdude documentation if you're in doubt about the correct choice for your programmer ([http://www.nongnu.org/avrdude/ avrdude home]).
 +
:
 +
:NB: The list of choices is generated by calling 'avrdude -c ?' and contains all the programmers your avrdude executable supports.
 +
;Port
 +
:avrdude option '-P'.
 +
:Specify the port the programmer is connected to. Serial devices like ponyprog use for example ''/dev/ttyS0'' (= COM1 under Windows!), most modern programmers use ''usb''.
 +
:
 +
: Note that most old-style serial programmers will not work properly when connected to an USB-serial-Adapter!
 +
; Extra verbose output
 +
:avrdude option '-v -v'.
 +
:Be more verbose. Default is '-v'. Use this, if you experience problems while flashing or simply want to see in detail whats going on...
 +
;Do NOT verify after programming
 +
:avrdude option '-V'.
 +
:Do NOT verify flash memory after programming. Use with care and only if you're really sure that your setup is perfect. Speeds things up a bit but it's use is generally discouraged.
 +
;Count # of erase cycles in EEPROM
 +
:avrdude option '-y'.
 +
:Tell avrdude to maintain an erase cycle counter in the last four bytes of the eeprom. The counter has to be initialized by calling avrdude with the option '-Y 1' once.
 +
:
 +
: Do not use this option if your e6 configuration uses the last four bytes of the eeprom.
 +
;Bitclock for ISP or JTAG
 +
:avrdude option '-B'.
 +
:Specify the bit clock period for the JTAG interface or the ISP clock.
 +
:Setting a lower value means higher programming speed. Use higher values if you experience programming errors in your setup.
 +
 +
: The available choices depend on the MCU frequency setting and should not exceed 4/F_CPU in micro seconds:
 +
:
 +
:*4 micro seconds is required for F_CPU < 4 MHz.
 +
:*1 micro second is appropriate for F_CPU < 10 MHz.
 +
:*0.5 micro seconds is appropriate for F_CPU < 16 MHz.
 +
:*0.3 micro seconds is appropriate for F_CPU >= 16 MHz.
 +
:
 +
;Pass extra options to avrdude
 +
:If your programmer or setup requires any extra options to avrdude you may pass them here.
  
{| border=1 cellspacing=0 padding=4 class=wikitable "
+
=== AVR Fuses ===
!          !! ATMega32 !! ATMega644 !! ATMega644p !! ATMega1284p
 
|-
 
| Housing  || DIL-40  || DIL-40    || DIL-40    || DIL-40
 
|-
 
| MHz   || max. 16  || max. 20  || max. 20    || max. 20
 
|-
 
| Flash    || 32 KB    || 64 KB    || 64 KB      || 128 KB
 
|-
 
| EEProm  || 1 KB    || 2 KB      || 2 KB      || 4 KB
 
|-
 
| RAM      || 2 KB    || 4 KB      || 4 KB      || 16 KB
 
|-
 
| I/O      || 32      || 32        || 32        || 32
 
|-
 
| PWM      || 4        || 6        || 6          || 6
 
|-
 
| ext. INT || 3        || 32        || 32        || 32
 
|-
 
| Ser-Port || 1        || 1        || 2          || 2
 
|}
 
  
====Datenblätter====
+
The fuse registers enable/disable or control the basic functionality of the different units of the MCU. One can e. g. enable or disable the Watchdog, the JTAG interface or even the ISP Interface. Configuration of the MCUs clock source or the brown-out detector is also done via the fuse registers.
* AtMega32
 
* ATMega644
 
* ATMega644p
 
* [http://www.atmel.com/dyn/resources/prod_documents/8059S.pdf ATMega1284p]
 
  
== Flashing with Windows ==
 
There a two main possibilities:
 
#Flash with avrdude
 
#Flash with AVR Studio
 
  
If you don't want to install one of those programs, there is a [[Live CD]] to use.
+
'''[[WARNING:]] Programming wrong fuse values may render your MCU UNUSABLE''' (...unless you've access to a JTAG- and/or HV-Programmer.)
  
===Flashing with avrdude===
+
* '''There is nothing like ''the universal correct fuse setting'' or ''default fuse setting''.'''
The flashing with avrdude is just like in Linux.
+
* '''Fuse registers are MCU-specific and their correct settings heavily depend on the circuit and parts in use.'''
 +
* '''Be careful, read the datasheet for the MCU acually in use and think twice what is correct for YOUR hardware!!'''
 +
* '''Do NOT use generic settings you've found somewhere in the net...'''
  
You can get the Windows-Binary as a part of [http://sourceforge.net/projects/winavr/ WinAVR]
 
  
In the command line you have to adjust the name of the serial Ports. (COMx instead of /dev/ttyxx)  
+
;Fuse Low Byte (FLB)
avrdude -v -p m32 -c ponyser -P com3 -U flash:w:ethersex.hex
+
:AVR Fuse Low Byte, two-digit hex value.
 +
:
 +
;Fuse High Byte (FHB)
 +
:AVR Fuse High Byte, two-digit hex value.
 +
:
 +
;Extended Fuse Byte (EFB)
 +
:AVR Extended Fuse Byte, two-digit hex value.
  
If the programmer is connected via USB you need:
+
The necessary hex values for the fuse registers might be calculated with e.g. an online [http://www.engbedded.com/fusecalc AVR fuse calculator].
* for real USB-Programmers: libusb0.dll (Part of WinAVR)
 
* USB-to-Serial Converter a matching Driver: [http://www.ftdichip.com/Drivers/VCP.htm]
 
  
===Flashing with AVR Studio===
+
[http://www.mikrocontroller.net/articles/AVR_Fuses Article on mikrocontroller.net for reference (German).]
[[AVR Studio]] from Atmel offers a GUI to Controll the ISPs.
 
  
AVR Studio also brings USB-Drivers for the Programmers with it, which can be installed together with it.
+
== Writing the Bytes ==
  
For USB-to-Serial converters you need a matching Driver: [http://www.ftdichip.com/Drivers/VCP.htm]
+
* Disconnect the power from the target board
 +
* Connect your ISP cable to the programmer and the target board
 +
* Reconnect the power and connect your programmer to the PC
 +
* Execute the command you assembled earlier or type ''make program''
 +
* Congratulations! If [[avrdude]] finished without any error you successfully flashed [[Ethersex]] to your target board!
 +
* Disconnect the power and the programmer from the target
 +
* Reconnect the power, your target should boot up with [[Ethersex]]
  
== Live-CD ==
+
[[Quick_Start_Guide/Configuration | previous step]]
You don't have to worry about your System if you use a Live CD to flash your build.
 
  
* Download and burn the CD: [http://www.ethersex.de/index.php?title=Live_CD]
+
[[Category:Ethersex]]
* Get the libncurses5 Package: apt-get install libncurses5-dev
+
[[Category:Quick Start Guide]]
* Update and install the software for ethersex just like described here: [http://ethersex.de/index.php/Quick_Start_Guide/Preparation]
+
[[Category:StepByStep]]
* If menuconfig fails try this command: apt-get install dialog
 
* Flash like described in the "Flashing with Linux" section is described.
 

Latest revision as of 20:20, 29 August 2014

Flashing

After compiling the ethersex.hex you can flash it with avrdude. You can either use avrdude on the command line or call the target program from the Ethersex Makefile.

Prerequisites

  • the previously selected board, e.g. AVR NET-IO, ready built and (hopefully) tested
  • an ISP-Programmer of your choice supported by avrdude
  • an ISP connector cable that fits to your programmer and your board (either 6 or 10-pin)
  • an ethersex.hex compiled in the previous step

If you have an ISP-Programmer with a 6-pin port and a board with a 10-pin header - like the AVR NET-IO - you can create an adapter. You can see the pin configuration in figure 4-1 at page 5 AVR042: AVR Hardware Design Considerations. Note that Pin 4 of the 10-pin connector is not used on the AVR NET-IO. GND has to be connected to one of the other Pins (6, 8 or 10).

Flashing the image with avrdude

The following commands are just examples, the actual command line depends on your ISP-Programmer and hardware.

This example is for a serial connection (e.g. the ATMEL Evaluation-Board):

 avrdude -v -p m32 -c ponyser -P /dev/ttyS0 -U flash:w:ethersex.hex 

This example for a real USB ISP-Programmer:

 avrdude -p m1284p -c avrispmkII -P usb -U flash:w:ethersex.hex

For a serial programmer connected via an USB-serial-adapter this may be used:

 avrdude -v -p m32 -c stk500v2 -P /dev/ttyACM0 -U flash:w:ethersex.hex

And this one for a parallel ISP-Cable:

 avrdude -p m32 -e -c stk200 -U flash:w:ethersex.hex

After flashing remove the ISP-Cable and interrupt the power connection for a short time to reboot the board.

 * -p m32: ATMega32; -p m644: ATMega644; -p ? to list the valid parts
 * -v: display debug messages 
 * -c ponyser: traditional serial programmer; -c stkk500v2 for the Atmel board
 * -P /dev/tty.serial the serial port your programmer is connected to; -P COM1 for windows machines; -P usb for USB
 * -U the command you want to execute. In our case we want to flash: -U flash:w:ethersex.hex

Using avrdude from the makefile

Since 16c2a388ec the Ethersex makefile supports two new targets, program and fuses, to invoke avrdude. The target program calls avrdude with the options to flash the previously compiled ethersex.hex to the MCU. The fuses target may be used to program the MCUs fuse registers.

AVRDUDE options and MCU fuse register settings may be configured via a menuconfig dialog. All settings will be saved to the current profile .config.

Available settings and choices on the AVRDUDE configuration page depend on the MCU and clock frequency configured on the General Setup dialog. Please go back to the previous step if you haven't done that yet.

AVRDUDE Configuration

If - and only if - the avrdude executable could be found in your PATH, menuconfig's mainmenu will show an option to enter AVRDUDE configuration.

menuconfig's mainmenu with AVRDUDE Configuration selected

The AVRDUDE configuration page allows to setup the most common options for avrdude:

AVRDUDE configuration page
Programmer Type
avrdude option '-c'.
Use the programmer configuration choosen from the list.
Refer to the official avrdude documentation if you're in doubt about the correct choice for your programmer (avrdude home).
NB: The list of choices is generated by calling 'avrdude -c ?' and contains all the programmers your avrdude executable supports.
Port
avrdude option '-P'.
Specify the port the programmer is connected to. Serial devices like ponyprog use for example /dev/ttyS0 (= COM1 under Windows!), most modern programmers use usb.
Note that most old-style serial programmers will not work properly when connected to an USB-serial-Adapter!
Extra verbose output
avrdude option '-v -v'.
Be more verbose. Default is '-v'. Use this, if you experience problems while flashing or simply want to see in detail whats going on...
Do NOT verify after programming
avrdude option '-V'.
Do NOT verify flash memory after programming. Use with care and only if you're really sure that your setup is perfect. Speeds things up a bit but it's use is generally discouraged.
Count # of erase cycles in EEPROM
avrdude option '-y'.
Tell avrdude to maintain an erase cycle counter in the last four bytes of the eeprom. The counter has to be initialized by calling avrdude with the option '-Y 1' once.
Do not use this option if your e6 configuration uses the last four bytes of the eeprom.
Bitclock for ISP or JTAG
avrdude option '-B'.
Specify the bit clock period for the JTAG interface or the ISP clock.
Setting a lower value means higher programming speed. Use higher values if you experience programming errors in your setup.
The available choices depend on the MCU frequency setting and should not exceed 4/F_CPU in micro seconds:
  • 4 micro seconds is required for F_CPU < 4 MHz.
  • 1 micro second is appropriate for F_CPU < 10 MHz.
  • 0.5 micro seconds is appropriate for F_CPU < 16 MHz.
  • 0.3 micro seconds is appropriate for F_CPU >= 16 MHz.
Pass extra options to avrdude
If your programmer or setup requires any extra options to avrdude you may pass them here.

AVR Fuses

The fuse registers enable/disable or control the basic functionality of the different units of the MCU. One can e. g. enable or disable the Watchdog, the JTAG interface or even the ISP Interface. Configuration of the MCUs clock source or the brown-out detector is also done via the fuse registers.


WARNING: Programming wrong fuse values may render your MCU UNUSABLE (...unless you've access to a JTAG- and/or HV-Programmer.)

  • There is nothing like the universal correct fuse setting or default fuse setting.
  • Fuse registers are MCU-specific and their correct settings heavily depend on the circuit and parts in use.
  • Be careful, read the datasheet for the MCU acually in use and think twice what is correct for YOUR hardware!!
  • Do NOT use generic settings you've found somewhere in the net...


Fuse Low Byte (FLB)
AVR Fuse Low Byte, two-digit hex value.
Fuse High Byte (FHB)
AVR Fuse High Byte, two-digit hex value.
Extended Fuse Byte (EFB)
AVR Extended Fuse Byte, two-digit hex value.

The necessary hex values for the fuse registers might be calculated with e.g. an online AVR fuse calculator.

Article on mikrocontroller.net for reference (German).

Writing the Bytes

  • Disconnect the power from the target board
  • Connect your ISP cable to the programmer and the target board
  • Reconnect the power and connect your programmer to the PC
  • Execute the command you assembled earlier or type make program
  • Congratulations! If avrdude finished without any error you successfully flashed Ethersex to your target board!
  • Disconnect the power and the programmer from the target
  • Reconnect the power, your target should boot up with Ethersex

previous step