|
|||||||||||||||||||||||||||||||||||
This site uses Google Analytics to track visits.
Privacy Statement |
Atmel AVR toolchain
• Compiler Tool ChainCompile and install binutils: > wget http://ftp.gnu.org/gnu/binutils/binutils-2.17.tar.bz2 > tar -xjf binutils-2.17.tar.bz2 > cd binutils-2.17 > ./configure --prefix=/opt/avr --target=avr --disable-nls > make > make install Add binutils to PATH: NOTE: If you are compiling (make) as a user and installing (make install) as root, as you should be, remember to set the PATH for both users.
> export PATH="/opt/avr/bin:$PATH"
Compile and install GCC: > wget ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-3.4.6/gcc-core-3.4.6.tar.bz2 > tar -xjf gcc-core-3.4.6.tar.bz2 > cd gcc-3.4.6 > ./configure --prefix=/opt/avr --target=avr --enable-languages=c --disable-nls --disable-libssp --with-dwarf2 > make > make install Compile and install avr-libc: > wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.4.6.tar.bz2 > tar -xjf avr-libc-1.4.6.tar.bz2 > cd avr-libc-1.4.6 > ./configure --prefix=/opt/avr --build=`./config.guess` --host=avr > make > make install Finally, make sure that /opt/avr/bin is permanently added to your PATH.
• Simple Test Program• File: simple.c
#include <inttypes.h> #include <avr/io.h> int main(void) { DDRB = 0xFF; // Set Port B to outputs uint8_t data = 0x00; while (1) { PORTB = data; data ++; } } The commands below will compile the source file and then generate a hex file. > avr-gcc -Wall -mmcu=atmega128 -o simple.o simple.c > avr-objcopy -j .text -O ihex simple.o simple.hex
• AVR Programming using JTAG and LinuxI've only found one working linux based method for programming an AVR via its JTAG interface. It's not too elegant, but it works. There are two stages:
This approach makes use of a Xilinx DLC5 Parallel Cable III. This is a very simple JTAG programming cable. The online schematics make it easy to build your own. Stage 1: Hex to SVFThe AVR hex to SVF utility, avrsvf, can be download from the Atmel website. Unfortunately it's a windows exe, but it works fine with Wine. Below is a fairly simple example that converts a hex file for a atmega128 device into a SVF file. The generated SVF file will contain the instructions to first erase the device, then program the flash.
> wine avrsvf.exe -datmega128 -e -ifdata.hex -pf -ovdata.svf
If you've got a more complex JTAG chain than just a single device, you can specify the arrangement. For example, for the chain below the FPGA has a 5bit wide instruction register.
This command takes care of the chain and will also set the AVR fuses.
> wine avrsvf.exe -datmega128 -e -ifdata.hex -pf -ovdata.svf -wc1000 -chd1 -chi5
Stage 2: ProgrammingThe lmilk utility hasn't changed for years, but it still seems to work. > wget http://warmcat.com/milksop/lmilk-0.20.tar.gz > tar -xzf lmilk-0.20.tar.gz > cd lmilk-0.20 > ./configure --prefix=/opt/avr > make > make install You need to be root to use the utilty
> lmilk -j -p simple.svf
• Other Linux JTAG ToolsAnother useful linux friendly JTAG tool is available here http://openwince.sourceforge.net/jtag/. Follow the instructions below: Note: The newer version of the include package does not seem to work with the jtag program. The trailing slash on the end of the --with-include part of the jtag configure is important. First download and configure the include files: > wget http://belnet.dl.sourceforge.net/sourceforge/openwince/include-0.3.2.tar.bz2 > tar -jxf include-0.3.2.tar.bz2 > cd include-0.3.2 > ./configure Second, download, configure, make and install the actual JTAG program: > wget http://switch.dl.sourceforge.net/sourceforge/openwince/jtag-0.5.1.tar.bz2 > tar -jxf jtag-0.5.1.tar.bz2 > cd jtag-0.5.1 > ./configure --prefix=/opt/jtag-0.5.1 --with-include=/files/jtag/include-0.3.2/ > make > make install To use jtag as non-root, you need to enable ppdev in your kernel. The option can be found as follows:
-> Device Drivers
-> Character Devices
-> <*> Support for user-space parallel port device drivers
Recompile your kernel, and reboot. You should have the device file /dev/parport0. A JTAG chain detection can be performed as shown below. This example uses a Xilinx DLC5 parallel port cable. > /opt/jtag-0.5.1/bin/jtag jtag> cable ppdev /dev/parport0 DLC5 Initializing Xilinx DLC5 JTAG Parallel Cable III on parallel port at 0x378 jtag> detect Chain length: 1 Device Id: 00101001011000001001000000111111 Manufacturer: Atmel Unknown part! chain.c(110) Part 0 without active instruction chain.c(133) Part 0 without active instruction chain.c(110) Part 0 without active instruction jtag> quit
|
||||||||||||||||||||||||||||||||||