...
Using this guide allows a Windows 8.1 or Linux (tested with Ubuntu 14.04) 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 Toolchain 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, which forces using a big software solution, or using the outdated WinAVR tools, which is incompatible with more recent JTAG devices such as the 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).
...
Code Block |
---|
> 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).
...
You should now be able to use avrdude to flash your firmware using a JTAGICE3.
AVR Toolchain on Linux
Using the AVR-toolchain is much simpler on Linux.
Simply install the avr toolchain using:
Code Block |
---|
sudo apt-get install avr-libc binutils-avr gcc-avr avrdude avarice gdb-avr |
This installs can possibly install an outdated version of avrdude.
To get a more recent one (that can work with the JTAGICE3) do the following:
...
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.
...
Using a terminal, navigate to the openwsn-fw directory and do and see the following to flash the openwsn project over a JTAG interface:
Code Block |
---|
Sven@S-WORK-LAPTOP C:\Users\Sven\Desktop\OpenWSN_Sven\openwsn-fw > scons board=zigduino toolchain=avr jtag=com8x 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 successfully flashed with the OpenWSN firmware.
Note that the adjusted Sconscript can also flash using an ISP interface. To use JTAG, simply do the above with a a 'jtag=' command. To use ISP, simply replace that command with 'isp='.
The The variable included does not actually matter; the 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:
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#============================ 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 jtag3ispjtag3 -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 non-debug fuses #+ ' -U lfuse:w:0xf7:m -U hfuse:w:0xd70x17:m -U efuse:w:0xf5:m', #if you need to do debug fuses suffix = '.phonyupload', src_suffix = '.ihex', |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#+ ' -U lfuse:w:0xf7:m -U hfuse:w:0xd7:m -U efuse:w:0xf5:m', #if you need to do non-debug fuses
|
Remember that you only need to set the fuses once per change. Once changed, you can recomment the line again.
Note that if you flash over ISP, you need to adjust the same lines but in the "==== upload over ISP ====" section.
...
For other ports with the same toolchain and programmer
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 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
This section explains how to debug an atmel board with a JTAGICE3 on Linux.
...
Therefore, only Linux is described. Thanks goes out to http://www.mikrocontroller.net/topic/301030#postform.
Also note that, if you want to debug a Zigduino, you'll need to adjust the fuses accordingly.
If you want to debug with the JTAGICE3, you aren't finished yet.
...
In both cases, you need to have started avarice as above.
GDB in the command line interface
Simple, point GDB to the project file you want to debug, for example, oos_openwsn, and then attach it to avarice. Then you can start debugging away.
Code Block |
---|
sven@ubuntu:~/Desktop/OpenWSN_Sven/openwsn-fw$ gdb /home/sven/Desktop/OpenWSN_Sven/openwsn-fw/build/zigduino_avr/projects/common/03oos_openwsn_prog 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"... Reading symbols from /home/sven/Desktop/OpenWSN_Sven/openwsn-fw/build/zigduino_avr/projects/common/03oos_openwsn_prog...done. (gdb) target remote localhost:4242 Remote debugging using localhost:4242 0x0041ff00 in ?? () (gdb) list 30 extern uint8_t radio_trx_end_isr(); 31 extern uint8_t radiotimer_compare_isr(); 32 extern uint8_t radiotimer_overflow_isr(); 33 34 //=========================== main ============================================ 35 uint8_t mcusr_backup; 36 37 extern int mote_main(void); 38 39 int main(void) { |
Debugging through Eclipse
Debugging through a graphical front-end can be easier. This has been tried out with Eclipse. This section has been copied mostly from http://avr-eclipse.sourceforge.net/wiki/index.php/Debugging with some relevant adjustments.
...