Menu

#23 program fuse bits through avr-gdb, avarice and debugwire

v1.0_(example)
open
nobody
5
2016-03-25
2016-03-11
sep
No

Hey,

there exist a problem with avarice with the program loading within the avr-gdb.
If there are fuse bits defined in the source code, then it is not possible to load the program with avr-gdb.
Here is a short example code

#include <avr/io.h>

FUSES =
{
    .low = FUSE_CKSEL0 & FUSE_SUT1,
    .high = FUSE_BOOTSZ0 & FUSE_BOOTSZ1 & FUSE_EESAVE & FUSE_SPIEN,
    .extended = FUSE_BODLEVEL0 & FUSE_HWBE,
};

int __attribute__((OS_main)) main( void ) {
    while(1);
    return 0;
}

I compiled this with:

avr-gcc -mmcu=atmega32u2 -O0 -g -o firmware.elf main.c

For the ATmega32U2. Debugwire is enabled.
For debugging I use a Atmel JTAGICE mkII. To use avarice with th ATmega32U2 I used this patch.
I've started avarice with:

$ avarice -2 -P atmega32u2 -w -j usb -C :4242 -d

and avr-gdb:

$ avr-gdb firmware.elf 
GNU gdb (Gentoo 7.11 vanilla) 7.11
Copyright (C) 2016 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 "--host=x86_64-pc-linux-gnu --target=avr".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://bugs.gentoo.org/>.
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 firmware.elf...done.
(gdb) target remote :4242
Remote debugging using :4242
main () at main.c:11
11          while(1);
(gdb) load
Loading section .fuse, size 0x3 lma 0x820000
Load failed
(gdb) quit
A debugging session is active.

        Inferior 1 [Remote target] will be killed.

Quit anyway? (y or n) y

The avarice log file is attached.

Greetings sep

1 Attachments

Discussion

  • Jes Bodi Klinke

    Jes Bodi Klinke - 2016-03-25

    The DebugWire protocol does not support setting fuses, you will have to use ISP (or high-voltage programming) load such a program - at least initially.

    Regards
    Jes

     
  • Joerg Wunsch

    Joerg Wunsch - 2016-03-25

    The DebugWire protocol does not support setting fuses

    That's not the point. The point is that attempt to program fuses should be silently discarded, so GDB will proceed.

     

Log in to post a comment.