This post shows some possible debuggers for the ATMEL AVR MCU. Due to a more and more difficult handling with the debug server AVARICE under Linux the subject is no longer pursued.
Because it's hard to find a serial interface (RS232) on todays PC's the Olimex-Debugger must be connected with a serial to USB adapter like the PL2303 to a PC.
The Linux kernel should load the module usbserial and have an udev device entry /dev/ttyUSBx
created.
The new udev rule (e.g. in /etc/udev/rules.d/z60_olimex.rules
) should add a link from /dev/avrjtag
to /dev/usbx
while detecting the PL2303. Then the Olimex debugger is accessible under /dev/avrjtag
.
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303" SYMLINK+="avrjtag"
It's important that idVendor
and idProduct
corresponds to the real values of the adapter figured out by lsusb.
~# lsusb
.............
Bus 004 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
.............
Test: After plugging in of the PL2303 adapter the device file /dev/avrjtag
should be generated. After removing it should disappear.
The Olimex JTAG debugger can be used both to flash or debug the ATMEL AVR MCU.
The debugger is similar to an Atmel JTAG ICE MKI. It is also an equivalent and cheap replacement for the Olimex JTAG debugger. The device is detected as a simple “USB to serial” adapter on /dev/ttyUSBx
.
The new udev rule (e.g. in /etc/udev/rules.d/z60_jtagicemki.rules
) should add a link from /dev/avrjtagicemki
to /dev/usbx
while detecting the debugger. The JTAG ICE MKI debugger is then accessible under /dev/avrjtagicemki
.
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523" SYMLINK+="avrjtagicemki"
It's important that idVendor
and idProduct
corresponds to the real values of the adapter figured out by lsusb.
~# lsusb
.............
Bus 007 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
.............
Test: After pluging in of the JTAG ICE MKI the device file /dev/avrjtagicemki
should be generated. After removing it should disappear.
The JTAG ICE MKI debugger can be used both to flash or debug the ATMEL AVR MCU.
The JTAGICE3 is more up-to-date than the devices describes before. It supports also the ATMEGA 644 MCU in contrast to the Olimex or JTAG ICE MKI.
When the device is connect to the PC's USB port, it appears as /dev/usb/hiddev0
. For having a distinct name a udev rule e.g. in /etc/udev/rules.d/z61_jtagice3.rules
must create a link:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2140" SYMLINK+="avrjtagice3"
SUBSYSTEM=="usbmisc", KERNEL=="hiddev*", MODE="0664", GROUP="plugdev"
It's important that idVendor
and idProduct
corresponds to the real values of the adapter figured out by lsusb.
~# lsusb
.............
Bus 004 Device 005: ID 03eb:2140 Atmel Corp.
.............
Test: After pluging in of the JTAGICE3 the device file /dev/avrjtagice3
should be generated. After removing it should disappear.
The tool AVRDUDE can be used on your PC to program the MCU attached local by one of the debugger. In order to program flash of the ATMEGA by AVRDUDE with one of the debugger (/dev/avrjtag
, /dev/avrjtagicemki
or /dev/avrjtagice3
) over the network from one PC to another, the device must be made transparent by the tool ser2net. The tool offers telnet or raw connections over TCP/IP to a local serial interface.
First install ser2net:
~# apt-get install ser2net
The matching config file /etc/ser2net.conf
contains entries to make /dev/avrjtag
available as raw interface with 115200 Baud on port 4244 in IP based network:
4244:raw:0:/dev/avrjtag:115200 8DATABITS NONE 1STOPBIT
On the client PC the connection with AVRDUDE to /dev/avrjtag
on the server can be established by calling AVRDUDE with options -P net:<servername>:4244
. In Eclipse there is an entry needed in properties of menu AVR → AVRDUDE, Tab Programmer → Edit, “Override Default Port (-P)”.
Calling AVRDUDE on command line:
guest:~$ avrdude -cjtagmkI -P/dev/avrjtag
Newer versions of AVRDUDE have problems with AVR-JTAG-L adapters. The version 5.10 in Debian repositories is working properly.
AVARICE is a GDB-server which offers a AVR-GDB remote session over network. Installation:
~# apt-get install avarice
AVARICE must be started as user in a shell. In this example it should listen on port 4242 for incoming GDB remote sessions. A JTAG-frequency of 250kHz is the default. The MCU in our example is a ATMEGA16:
guest:~$ avarice -1 --ignore-intr -d -l -j /dev/avrjtag -P atmega16 :4242
guest:~$ avarice -1 --ignore-intr -d -l -j /dev/avrjtagicemki -P atmega16 :4242
guest:~$ avarice -4 -P atmega169 -d :4242
The last option is only possible with the latest version of avarice from the SVN repositories.
It is not possible to start AVARICE by xinetd or systemd. It must be started manually and also after a crash which could happen by use of Eclipse and GDB on a remote PC.
Because AVARICE refuses proper operation on a ATMEGA644, debugging is not possible. It seems the AVARICE development is orphaned. For a good working debug session ATMELStudio of Microchip is needed, but is running only on Windows systems.