Maybe readsize parameter is missing in the family. Can you tried the avrdude.conf (avrdude.conf.in) of the repo : https://github.com/doom-fr/avrdude ? You may override your current conf file with the -C option.
And if it does not work, you can also try the full avrdude version of this repo. Doom. ᐧ Le dim. 28 févr. 2021 à 13:14, Andy Bennett <andy...@ashurst.eu.org> a écrit : > Hi. > > > Can you share us your avrdude.conf file ? > > There should a pb in some definitions. > > I've attached it. > > It's the one that gets installed by `make install`. > > > > > > > > Doom. > > > > > > Le dim. 28 févr. 2021 à 03:42, Andy Bennett > > <andy...@ashurst.eu.org> 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 > > > > -- > Best wishes, > @ndy > > -- > andy...@ashurst.eu.org > http://www.ashurst.eu.org/ > 0x7EBA75FF