Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

The Atmel AVR Toolchain is a collection of tools/libraries used to create applications for AVR microcontrollers. This collection includes compiler, assembler, linker and Standard C & math libraries.

As-of-yet this toolchain has not been integrated into the main OpenWSN Scons build environment.

Currently, the OpenWSN Zigduino fork (available at https://github.com/SvenAkk/openwsn-fw ) contains adjusted Sconstruct and Sconscript files that allow working with this toolchain for AVRDUDE based programming of a Zigduino (an Arduino board) using a JTAGICE3 on a configured Windows Machine. These files are also included to this page but the most recent versions are always on the fork.

Using this guide allows a Windows 8.1 machine, using a jtagice3 programmer, to flash the Zigduino platform with the OpenWSN Zigduino port firmware. No guarantees are made for other software or hardware although this will likely be similar.

AVR-GCC and AVRDUDE for Windows 

There are no official easy-to-use recent avr-gcc versions available. The easiest way to work with AVR for Windows is using Atmel Studio, but which forces using a big software solution, or using the outdated WinAVR tools, which is incompatible with more recent JTAG devices such as jtagice3.  In addition, most online resources are (partly) outdated, though still useful (See also: http://m8051.blogspot.be/2015/01/avrdude-on-windows-long-time-after.html ). This guide describes how to easily get a more recent version of AVRDUDE working with Windows. Alternatively, you can always compile the most recent version of AVRDUDE yourself (from http://www.nongnu.org/avrdude/ ) but this is a fairly painful process on an unconfigured Windows computer (see also).

There is a recent avr-gcc version compiled for Windows which can be found here: http://andybrown.me.uk/downloads/ .

  1. Extract the zip file to a location on your hard disk. These command-line tools are not happy to see pathnames with spaces in them so I recommend that you extract to the root directory of your C: drive. That will result in everything being installed into c:\avr-gcc.
  2. It’ll be most convenient to add c:\avr-gcc\bin to your PATH environment variable.
  3. You may need to logout and login again to detect the changes to PATH.

The AVR toolchain itself should now be working on your computer. Test it out by opening the command line terminal and doing and seeing the following:

 

> avrdude -v
avrdude: Version 6.1-svn-20131205, compiled on Dec 5 2013 at 17:34:22
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\avr-gcc\bin\avrdude.conf"

JTAGICE3 with Windows

Unfortunately, AVRDUDE relies on the JTAGICE3 programmer to be connected to a Linux USB port such as LibUSB (source). In addition, depending on the firmware of the JTAGICE3 the USB descriptors might be totally different (source and source).

First, if needed, downgrade the firmware of your JTAGICE3 device to a v2. To do so follow this guide.

Second, connect your JTAGICE3 device to your computer. It should be recognized and automatically install some USB drivers. At this point, avrdude will most likely not work.

To fix this, download Zadig and run it. Select your JTAGICE3 from the list of devices and install the libusbK driver. 

Normally, you should now be able to use avrdude to flash your firmware using a JTAGICE3.

 

AVR Toolchain on Linux

The adjusted Sconscript has also been used on Linux, on Ubuntu 14.04.

Simply install the avr toolchain using:

 

sudo apt-get install avr-libc binutils-avr gcc-avr avrdude avarice gdb-avr

and everything should work as is, with the modified files.

Note that Linux might require adding "sudo" in front of commands to get access to the relevant USB ports to be able to flash.

Note also that this does not install the most recent versions of this software. Therefore, it is sufficient to program but, for example, lacks debugging support with the JTAGICE3.
See the "Debugging" section for more info on how to make this work. 

Tying it together – integrating it all and flashing the Zigduino firmware

As a reference on how you can use this toolchain for your own port, we describe how to do it for the Zigduino platform.

Download the openwsn-fw code as found on  https://github.com/SvenAkk/openwsn-fw.

Connect your JTAG to your Zigduino and your PC and have the Zigduino be powered.

Using a terminal, navigate to the openwsn-fw directory and do and see the following to flash the openwsn project:

Sven@S-WORK-LAPTOP C:\Users\Sven\Desktop\OpenWSN_Sven\openwsn-fw
> scons board=zigduino toolchain=avr jtag=com8 oos_openwsn
scons: Reading SConscript files ..
 ___                 _ _ _  ___  _ _
| . | ___  ___ ._ _ | | | |/ __>| \ |
| | || . \/ ._>| ' || | | |\__ \|   |
`___'|  _/\___.|_|_||__/_/ <___/|_\_|
     |_|                  openwsn.org

scons: done reading SConscript files.
scons: Building targets ...
Dynifying build\zigduino_avr\openapps\openapps_dyn.c
avr-size build\zigduino_avr\projects\common\03oos_openwsn_prog.exe
   text    data     bss     dec     hex filename
  94658    4918    4511  104087   19697 build\zigduino_avr\projects\common\03oos_openwsn_prog.exe
avrdude -c jtag3isp -p m128rfa1 -B 1 -U flash:w:build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.25s

avrdude: Device signature = 0x1ea701
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex"
avrdude: input file build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex auto detected as Intel Hex
avrdude: writing flash (99576 bytes):

Writing | ################################################## | 100% 11.00s

avrdude: 99576 bytes of flash written
avrdude: verifying flash memory against build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex:
avrdude: load data flash data from input file build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex:
avrdude: input file build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex auto detected as Intel Hex
avrdude: input file build\zigduino_avr\projects\common\03oos_openwsn_prog.ihex contains 99576 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 9.25s

avrdude: verifying ...
avrdude: 99576 bytes of flash verified

avrdude: safemode: Fuses OK (E:F5, H:D7, L:F7)

avrdude done.  Thank you.

scons: done building targets.

 

If you see this, your Zigduino has been correctly flashed with the OpenWSN firmware.

Note that Sconscript needs a 'jtag=' command to work with a jtag programmer.  The variable included does not actually matter; the jtag port itself is automatically detected and will simply flash the board it is connected to. 

Adjusting fuses

If you need to adjust the fuses, simply go to the following code in Sconscript:

 

#============================ upload over JTAG ================================
def jtagUploadFunc(location):
if env['toolchain']=='armgcc':
if env['board'] in ['iot-lab_M3','iot-lab_A8-M3']:
return Builder(
action = os.path.join('bsp','boards',env['board'],'tools','flash.sh') + " $SOURCE",
suffix = '.phonyupload',
src_suffix = '.ihex',
)
# LOW: Transceiver osc as CLK (16Mhz when prescaler 0x0), maximum start-up delay
# HIGH: JTAG/OCD off, SPI on, WatchDog override off (can be enabled at runtime), Bootsize 512b,
# start bootsector at 0xfe00 (word address!), save EEPROM on reflash, start at addr 0000
# EXT: BrownOut at 1.9V
# Last fuse fd -> f5 due to immutable bits, otherwise avrdude gives a verification error
elif env['toolchain']=='avr':
return Builder(
action = 'avrdude -c jtag3isp -p m128rfa1 -B 1 -U flash:w:$SOURCE',
#+ ' -U lfuse:w:0xf7:m -U hfuse:w:0xd7:m -U efuse:w:0xf5:m', #if you need to do fuses
suffix = '.phonyupload',
src_suffix = '.ihex',

and uncomment the following line:

 

#+ ' -U lfuse:w:0xf7:m -U hfuse:w:0xd7:m -U efuse:w:0xf5:m', #if you need to do fuses

Remember that you only need to set the fuses once per change. Once changed, you can recomment the line again.


Alternative ports

If you have another board and want to use the same toolchain and programmer, you only need the Sconstruct and Sconscript files with some small additions.

For the Sconstruct file look for the mention of 'zigduino' and simply add the name of your board similarly.

For the Sconscript file look for all mentions of 'zigduino' and follow that example to add the relevant code for your (type of) board.

 

Debugging with the jtagice3 on Linux

Note, that I have not been able to get debugging working on Windows due to the lack of support for a recent standalone AVR-toolchain version on this platform. E.g., the jtagice3 has no support.

Therefore, only Linux is described. Thanks goes out to http://www.mikrocontroller.net/topic/301030#postform.

If you want to debug with the JTAGICE3, you aren't finished yet.

First off, you will need to update Avarice to the most recent version from their repo (2.13):

 

svn checkout svn://svn.code.sf.net/p/avarice/code/trunk avarice-code
sudo ./Bootstrap
sudo ./configure
sudo make
sudo make install
:/tmp/avarice-code/avarice$ avarice -h
AVaRICE version 2.13svn20130104, Jun 30 2013 21:26:37
Usage: avarice [OPTION]... [[HOST_NAME]:PORT]
Options:
-h, --help Print this message.
-1, --mkI Connect to JTAG ICE mkI (default)
-2, --mkII Connect to JTAG ICE mkII
-3, --jtag3 Connect to JTAGICE3

Then you need to connect your JTAGICE3 to your board. You will need to connect to 5 pins (+ 2 for ground) (reference: link ).
Note that your platform might not have a compliant 10-pin JTAG header. In that case, you will need to use the provided squid cable to connect.

For instance, this is necessary for the Zigduino platform (see also pinout on which wires to connect where).

You should have established a successful JTAG interface connection now. 

 

To start debugging, run avarice through the following command:

sven@ubuntu:~$ sudo avarice -P atmega128rfa1 -3 -j usb :4242

And finally, in another terminal, you can then start your debug session through:

sven@ubuntu:~$ gdb
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) target remote :4242
Remote debugging using :4242
0x0041ff00 in ?? ()

 

 

  • No labels