Hey Andy, Can you share us your avrdude.conf file ? There should a pb in some definitions.
Doom. Le dim. 28 févr. 2021 à 03:42, Andy Bennett <[email protected]> a écrit : > Hi, > > I've been trying to get my JTAGICE3 to work in UPDI mode with an > ATTiny1604 > (One of the 0-series devices) and avrdude under Linux. > > I think it's getting stuck whilst trying to read the signature bytes from > the target. > > I'm using the SVN version of avrdude from a few weeks ago. > > > Initially I had firmware 1.25 on the JTAGICE3 so I had to upgrade it to > 3.37 using Atmel Studio under Windows. Otherwise I'm entirely using Linux; > I had to borrow a machine to get the firmware updated. > > Whilst I was there I tested that Atmel Studio could use the JTACICE3 with > the new firmware to read out the signature bytes of an ATMega1284p via > JTAG > and an ATTiny1604 via UPDI. Both were successful. > > The JTAGICE3 with the new firmware can also read the ATMega1284p with > avrdude in JTAG mode under linux. > > > However, it hangs with the ATTiny1604: > > ----- > $ ~/project/.../avrdudue/installation/bin/avrdude -p t1604 -c jtag3updi -P > usb -t > > avrdude: AVR device initialized and ready to accept instructions > > Reading | | 0% 0.00s > ----- > > It just sits here forever, never making any progress. > > If I increase the debugging level and attach GDB I see that it gets stuck > in avr.c:avr_read()'s call to jtag.c:jtag3_paged_load(). > > jtag3_paged_load() gets stuck in an infinite loop. > > It gets passed the correct parameters: > > ----- > (gdb) bt > #0 0x00007fbd14811ff7 in __GI___select (nfds=4, readfds=0x0, > writefds=0x7ffff003dca0, exceptfds=0x0, timeout=0x7ffff003dc30) > at ../sysdeps/unix/sysv/linux/select.c:41 > #1 0x00007fbd14aa57ad in ?? () from /lib/x86_64-linux-gnu/libusb-0.1.so.4 > #2 0x0000556ff4bf676d in usbdev_recv_frame (fd=0x556ff5ff6610, > buf=0x556ff62c5880 "\020m,\366oU", nbytes=512) > at usb_libusb.c:506 > #3 0x0000556ff4c1560f in jtag3_edbg_recv_frame (msg=0x7ffff003def8, > pgm=0x556ff5ff50d0) at jtag3.c:709 > #4 jtag3_recv_frame (msg=0x7ffff003def8, pgm=0x556ff5ff50d0) at > jtag3.c:647 > #5 jtag3_recv (pgm=pgm@entry=0x556ff5ff50d0, msg=msg@entry=0x7ffff003def8) > > at jtag3.c:780 > #6 0x0000556ff4c15bf1 in jtag3_command (pgm=pgm@entry=0x556ff5ff50d0, > cmd=cmd@entry=0x7ffff003df04 "\022!", > cmdlen=cmdlen@entry=12, resp=resp@entry=0x7ffff003def8, > descr=descr@entry=0x556ff4c332bc "read memory") at jtag3.c:827 > #7 0x0000556ff4c1677c in jtag3_paged_load (pgm=0x556ff5ff50d0, > p=0x556ff62754e0, m=0x556ff62766f0, page_size=0, addr=0, > n_bytes=1) at jtag3.c:1811 > #8 0x0000556ff4be3f07 in avr_read (pgm=pgm@entry=0x556ff5ff50d0, > p=p@entry=0x556ff62754e0, > memtype=memtype@entry=0x556ff4c1c165 "signature", v=v@entry=0x0) at > avr.c:406 > #9 0x0000556ff4be4733 in avr_signature (pgm=0x556ff5ff50d0, > p=0x556ff62754e0) at avr.c:1055 > #10 0x0000556ff4bdfc1a in main (argc=<optimized out>, argv=<optimized > out>) > at main.c:1046 > ----- > > In frame 7, m is the "signature" region with page_size = 1 and readsize = > 0. > > ----- > (gdb) frame 7 > #7 0x0000556ff4c1677c in jtag3_paged_load (pgm=0x556ff5ff50d0, > p=0x556ff62754e0, m=0x556ff62766f0, page_size=0, addr=0, > n_bytes=1) at jtag3.c:1811 > 1811 if ((status = jtag3_command(pgm, cmd, 12, &resp, "read > memory")) < 0) > (gdb) print m > $1 = (AVRMEM *) 0x556ff62766f0 > (gdb) print m->readsize > $2 = 0 > (gdb) print m->page_size > $3 = 1 > (gdb) print page_size > $4 = 0 > ----- > > > Then, on line 1769 of jtag3.c , jtag3_paged_load() does > > ----- > page_size = m->readsize; > ----- > > ...which causes the for loop on lin 1796: > > ----- > for (; addr < maxaddr; addr += page_size) { > ----- > > ... to go into an infinite loop because m->readsize == 0. > > > > I've tried commenting out the assignment to page_size and I can get > avrdude > to go into the interactive terminal: > > ----- > $ ~/project/.../avrdudue/installation/bin/avrdude -p t1604 -c jtag3updi -P > usb -t > > avrdude: AVR device initialized and ready to accept instructions > > Reading | | 0% > 0.00savrdude: bad response to read memory command: 0xa0 > Reading | ################################################## | 100% 0.01s > > avrdude: Device signature = 0x1e9425 (probably t1604) > avrdude> ^C > ----- > > > However, my cursory inspection of both the SVN history and the atmelice > driver suggest that this code has been untouched for a very long time and > is therefore most likely not at fault. > > I've also scoured avrdude.conf to see if there's anything unusual about > how > the ATTiny1604 is set up. I didn't notice anything and no parts seem to > have readsize assigned for the "signature" memory. > > > I've not looked in detail at how the JTAGICE3 is talking to the > ATMega1284p > in JTAG mode but the jtag3.c driver doesn't seem to define a > `read_sig_bytes` function anywhere so it's not falling into that special > case in avr_read (avr.c, line 430). Perhaps it's using the read_byte() > calls on line 440? > > > So my question is, does anyone know why the JTAGICE3 is hanging like this? > > > Atmel Studio can successfully connect to the same board using the same > JTAGICE3 and the verbose logging output of avrdude tells me that not only > is it succesfully connecting to the JTAGICE3 and the target, it is also > able to send the AVR sign-on command and read the SIB, so I'm pretty sure > the hardware is all OK. I can also interact with the device using pyudpi > on > Linux. > > ----- > avrdude: Sending AVR sign-on command: > avrdude: jtag3_edbg_send(): sending 4 bytes > avrdude: jtag3_edbg_recv(): > avrdude: jtag3_recv(): Got message seqno 14 (command_sequence == 14) > > Raw message: > 12 84 00 74 69 6e 79 00 > [AVR] Data returned: > 0x00 0x74 0x69 0x6e 0x79 0x00 > avrdude: Partial Family_ID returned: "tiny" > avrdude: AVR device initialized and ready to accept instructions > > Reading | avrdude: jtag3_paged_load(.., signature, 1, 0x0, 1) > mapped to address: 0x1100 > avrdude: Sending enter progmode command: > avrdude: jtag3_edbg_send(): sending 3 bytes > avrdude: jtag3_edbg_recv(): > avrdude: jtag3_recv(): Got message seqno 15 (command_sequence == 15) > ----- > > > I've attached a (compressed) log that shows the output of > ----- > $ ~/project/.../avrdudue/installation/bin/avrdude -p t1604 -c jtag3updi -P > usb -t -vvvv > avrdude-jtagice3updi.log 2>&1 > ----- > > > > Thanks for any pointers you can offer! > > > > > Best wishes, > @ndy > > -- > [email protected] > http://www.ashurst.eu.org/ > 0x7EBA75FF
