Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Report: Incorrect SerialUPDI control of AVR64EA32 #1529

Closed
askn37 opened this issue Oct 21, 2023 · 101 comments
Closed

Report: Incorrect SerialUPDI control of AVR64EA32 #1529

askn37 opened this issue Oct 21, 2023 · 101 comments
Labels
bug Something isn't working

Comments

@askn37
Copy link
Contributor

askn37 commented Oct 21, 2023

Report: Incorrect SerialUPDI control of AVR64EA32

This is a known bug as of commit 481a91d.

  1. You are trying to read the "Chip Silicon Revision" register without checking the status of the target device. This will fail if the target device is "resetting" or "sleeping".
  2. The address width used to access the flash area is incorrectly set to 16 bits. Therefore, the IO memory area is accessed instead of the flash area. The correct address width must be 24 bits.(Shouldn't we send 0x55 0x6A 0x00 0x00 0x80 here?)

case.1 Debug log

avrdude: sending 2 bytes [0x55, 0xe6]
avrdude: send: U [55] . [e6] 
avrdude: recv: U [55] . [e6] 
avrdude: recv: A [41] V [56] R [52]   [20]   [20]   [20]   [20]   [20] P [50] : [3a] 3 [33] D [44] : [3a] 1 [31] - [2d] 3 [33] M [4d] 2 [32]   [20] ( [28] B [42] 1 [31] . [2e] 5 [35] 9 [39] F [46] 0 [30] 2 [32] . [2e] 0 [30] ) [29] . [00] 
avrdude: received 32 bytes [0x41, 0x56, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x3a, 0x33, 0x44, 0x3a, 0x31, 0x2d, 0x33, 0x4d, 0x32, 0x20, 0x28, 0x42, 0x31, 0x2e, 0x35, 0x39, 0x46, 0x30, 0x32, 0x2e, 0x30, 0x29, 0x00]
avrdude: received SIB: [AVR     P:3D:1-3M2 (B1.59F02.0)]
avrdude: Device family ID: AVR     
avrdude: NVM interface: P:3
avrdude: Debug interface: D:1
avrdude: PDI oscillator: 3M2 
avrdude: Extra information: (B1.59F02.0)
avrdude: NVM type 3: 16-bit, page oriented
avrdude: reading 1 bytes from 0x000F01
avrdude: ST_PTR to 0x000F01
avrdude: sending 4 bytes [0x55, 0x69, 0x01, 0x0f]
avrdude: send: U [55] i [69] . [01] . [0f] 
avrdude: recv: U [55] i [69] . [01] . [0f] 
avrdude: ser_recv(): programmer is not responding
avrdude: serialupdi_recv(): programmer is not responding
avrdude: UPDI ST_PTR recv failed on ACK
avrdude: ST_PTR operation failed
avrdude serialupdi_initialize() [serialupdi.c:636] error: Reading chip silicon revision failed
avrdude main() [main.c:1404] error: initialization failed, rc=-1
        - double check the connections and try again
        - use -b to set lower baud rate, e.g. -b 57600
        - use -F to override this check

case.2 Debug log

avrdude: processing -U flash:r:avr64ea32/Flash.hex:i
avrdude: reading flash memory ...
avrdude: reading 128 bytes from 0x800000
avrdude: ST_PTR to 0x800000
avrdude: sending 4 bytes [0x55, 0x69, 0x00, 0x00]
avrdude: send: U [55] i [69] . [00] . [00] 
avrdude: recv: U [55] i [69] . [00] . [00] 
avrdude: recv: @ [40] 
avrdude: received 1 bytes [0x40]
avrdude: repeat 128
avrdude: sending 3 bytes [0x55, 0xa0, 0x7f]
avrdude: send: U [55] . [a0] . [7f] 
avrdude: recv: U [55] . [a0] . [7f] 
avrdude: LD8 from ptr++
avrdude: sending 2 bytes [0x55, 0x24]
avrdude: send: U [55] $ [24] 
avrdude: recv: U [55] $ [24] 
avrdude: recv: . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [ff] . [7f] . [02]   [20] . [00] . [07] . [00]   [20] . [00] . [07] . [00]   [20] . [00] . [07] . [00]   [20] . [00] . [07] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [07] . [00] . [00] . [00] . [00] . [00] . [00] . [05] . [00] . [00] . [00] . [00] * [2a] . [00] . [06] . [00] . [00] . [00] . [00] . [00] . [00] . [10] . [00] . [00] . [00] . [2e] . [00] . [00] . [00] . [00] . [00] . [00] 
avrdude: received 128 bytes [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x02, 0x20, 0x00, 0x07, 0x00, 0x20, 0x00, 0x07, 0x00, 0x20, 0x00, 0x07, 0x00, 0x20, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]

Need additional information?

I design my own program writer and create firmware that meets various practical needs. This time, we also acquired control including HV programming using AVR64EA32. I noticed this problem when I was doing comparison testing with other programmers.

  • NVMCTRL version 3 can correctly interpret 24-bit extended addresses. Although this is clearly stated in the datasheet, NVMCTRL_ADDRESS is a 24-bit register. This allows 16-bit address commands for UPDI access to correspond to LD/ST instructions, and 24-bit address commands to correspond to ELPM/SPM instructions. To treat the flash memory area linearly, you need to set his MSB of this address. In other words, the setting value is 0x800000 or higher. This behavior is equivalent to the AVR_Dx series (NVMCTRL version 2).

  • This series has a maximum flash capacity of 64KiB, so there is no RAMPZ register. The FLMAP field, which switches the latter bank of data space, also uses only one bit. However, there is no need to manipulate these from UPDI.

  • REVID register 0xF01 is a register in the IO memory space, so it can only be read when the CPU is active or in his NVMPROG mode. The current implementation of SerialUPDI probably does not take into account the existence of power-saving devices that regularly use CPU sleep.

  • (Supplement) Use PF6 (RESET pad) to enable high voltage mode. The datasheet states the absolute rating is 9V. Therefore, a suitable high voltage here is 8.2 V when using a Zener diode. However, PICkit4 can exceed this voltage and violate ESD protection.

Further additional information

There are two execution result logs here. Both are displayed when -vvvvq is specified. One result is the target device is asleep, and the other result is the target device is running.

test_run.log
test_sleep.log

@stefanrueger
Copy link
Collaborator

@dbuchwald Do you want to have a look? I suspect that 24-bit addresses are needed for the 64k device because the effective address after adding the flash offset exceeds 16 bit.

@dbuchwald
Copy link
Contributor

I will take a look, but might not be able to test it though, as I don't have the AVR64EA32 chip at hand. Anyway, will keep you posted!

@mcuee mcuee added the bug Something isn't working label Oct 21, 2023
@dbuchwald
Copy link
Contributor

OK, so this is what I came up with: according to the logs above, NVM link mode is version 3, which is 16-bit address/page oriented write. I checked it again in the original Microchip's pymcuprog implementation, and this is what they do:

https://github.com/microchip-pic-avr-tools/pymcuprog/blob/main/pymcuprog/serialupdi/application.py#L130

And this is what I do:

https://github.com/avrdudes/avrdude/blob/main/src/serialupdi.c#L163

So, as long as the chip itself reports to be NVM link version 3, we should and will use 16-bit addresses.

The only thing I can suggest now is for @askn37 to try to program the original device using pymcuprog software and see if it works. If it fails, then probably there is some bug in interface/documentation provided by Microchip.
If it does work, then please, run pymcuprog with the highest verbosity level and post the output here - it will produce almost identical trace (with all the NVM commands listed), and I can use it to trace the issue back to the source.

@mcuee
Copy link
Collaborator

mcuee commented Oct 21, 2023

Edit: I realized that the issue is about SerialUPDI. I need to see how I can test this. I have not soldered the pin headers. I will see if I can carry out the test using serialupdi next week.

+++++++++++++++++
I tested this before avrdude 7.2 release and it was okay.
#1257 (comment)

Just tested again with latest git main and it is still okay. I am using Microchip AVR64EA48 Curiosity Nano bought from Mouser SIngapore.

PS C:\work\avr\avrdude_test\avrdude_bin> .\avrdude
Usage: avrdude [options]
...
...
avrdude version 7.2-20231018 (481a91dd), https://github.com/avrdudes/avrdude

P> .\avrdude -c pkobn_updi -p avr64ea48 -U .\median_Release_1.0.0.hex
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e961e (probably avr64ea48)
avrdude: Note: flash memory has been specified, an erase cycle will be performed.
         To disable this feature, specify the -D option.
avrdude: erasing chip

avrdude: processing -U flash:w:.\median_Release_1.0.0.hex:i
avrdude: reading input file .\median_Release_1.0.0.hex for flash
         with 5122 bytes in 1 section within [0, 0x1401]
         using 41 pages and 126 pad bytes
avrdude: writing 5122 bytes flash ...
Writing | ################################################## | 100% 2.49 s
avrdude: 5122 bytes of flash written
avrdude: verifying flash memory against .\median_Release_1.0.0.hex
Reading | ################################################## | 100% 1.24 s
avrdude: 5122 bytes of flash verified

avrdude done.  Thank you.

Full debug log here.

click for the big full debug log with -vvvv
PS>.\avrdude -c pkobn_updi -p avr64ea48 -U .\median_Release_1.0.0.hex -vvvv

avrdude: Version 7.2-20231018 (481a91dd)
         Copyright the AVRDUDE authors;
         see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

         System wide configuration file is C:\work\avr\avrdude_test\avrdude_bin\avrdude.conf

         Using Port                    : usb
         Using Programmer              : pkobn_updi
avrdude: jtag3_open_updi()
avrdude: HV UPDI support: 1
avrdude: usbhid_open(): probing for max packet size
avrdude: usbhid_open(): setting max_xfer from DAP_Info response to 64
avrdude: found CMSIS-DAP compliant device, using EDBG protocol
avrdude: jtag3_getsync()

avrdude: jtag3_edbg_prepare()
avrdude: jtag3_edbg_prepare(): connection status 0x01
avrdude: sending sign-on command:
avrdude: jtag3_edbg_send(): sending 3 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 0 (command_sequence == 0)

Raw message:
01  80  00
[general] OK
avrdude: defaulting memtype in -U w:.\median_Release_1.0.0.hex option to "flash"
avrdude: input file .\median_Release_1.0.0.hex auto detected as Intel Hex
         AVR Part                      : AVR64EA48
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         Serial program mode           : yes
         Parallel program mode         : yes
         Memory Detail                 :

                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse0       wdtcfg      0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse1       bodcfg      0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse2       osccfg      0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse5       syscfg0     0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse6       syscfg1     0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse7       codesize    0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuse8       bootsize    0     0     0    0 no          1    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           fuses                   0     0     0    0 no         16   16      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock                    0     0     0    0 no          4    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           prodsig     sigrow      0     0     0    0 no        128  128      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           tempsense               0     0     0    0 no          4    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           sernum                  0     0     0    0 no         16    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           userrow     usersig     0     0     0    0 no         64   64      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           data                    0     0     0    0 no          0    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           io                      0     0     0    0 no       4160    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           sib                     0     0     0    0 no         32    1      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom                  0     0     0    0 no        512    8      0     0     0 0x00 0x00
                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash                   0     0     0    0 no      65536  128      0     0     0 0x00 0x00

         Programmer Type : JTAGICE3_UPDI
         Description     : Curiosity nano (nEDBG) in UPDI mode
avrdude: jtag3_getparm()
avrdude: sending get parameter (scope 0x01, section 0, parm 0) command:
avrdude: jtag3_edbg_send(): sending 6 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 1 (command_sequence == 1)

Raw message:
01  84  01  00  01  1b  81  00  00
[general] Data returned:
0x01 0x00 0x01 0x1b 0x81 0x00 0x00
         ICE HW version  : 0
         ICE FW version  : 1.27 (rel. 129)
         Serial number   : MCHP3428031800001161
avrdude: jtag3_getparm()
avrdude: sending get parameter (scope 0x01, section 0, parm 1) command:
avrdude: jtag3_edbg_send(): sending 6 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 2 (command_sequence == 2)

Raw message:
01  84  01  01  1b  00
[general] Data returned:
0x01 0x01 0x1b 0x00
avrdude: jtag3_setparm()
avrdude: sending set parameter (scope 0x12, section 0, parm 0) command:
avrdude: jtag3_edbg_send(): sending 7 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 3 (command_sequence == 3)

Raw message:
12  80  00
[AVR] OK
avrdude: jtag3_setparm()
avrdude: sending set parameter (scope 0x12, section 0, parm 1) command:
avrdude: jtag3_edbg_send(): sending 7 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 4 (command_sequence == 4)

Raw message:
12  80  00
[AVR] OK
avrdude: jtag3_setparm()
avrdude: sending set parameter (scope 0x12, section 1, parm 0) command:
avrdude: jtag3_edbg_send(): sending 7 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 5 (command_sequence == 5)

Raw message:
12  80  00
[AVR] OK
avrdude: jtag3_getparm()
avrdude: sending get parameter (scope 0x01, section 1, parm 0) command:
avrdude: jtag3_edbg_send(): sending 6 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 6 (command_sequence == 6)

Raw message:
01  84  01  ef  0c  00
[general] Data returned:
0x01 0xef 0x0c 0x00
         Vtarget         : 3.31 V
avrdude: jtag3_getparm()
avrdude: sending get parameter (scope 0x12, section 1, parm 0) command:
avrdude: jtag3_edbg_send(): sending 6 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 7 (command_sequence == 7)

Raw message:
12  84  00  08  00
[AVR] Data returned:
0x00 0x08 0x00
avrdude: jtag3_getparm()
avrdude: sending get parameter (scope 0x12, section 0, parm 0) command:
avrdude: jtag3_edbg_send(): sending 6 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 8 (command_sequence == 8)

Raw message:
12  84  00  05  00
[AVR] Data returned:
0x00 0x05 0x00
avrdude: jtag3_getparm()
avrdude: sending get parameter (scope 0x12, section 1, parm 49) command:
avrdude: jtag3_edbg_send(): sending 6 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 9 (command_sequence == 9)

Raw message:
12  84  00  64  00  00
[AVR] Data returned:
0x00 0x64 0x00 0x00
         PDI/UPDI clk    : 100 kHz

UPDI SET:
        xd->prog_base_msb=80
        xd->prog_base=0 0
        xd->flash_page_size_msb=0
        xd->flash_page_size=80
        xd->eeprom_page_size=8
        xd->nvmctrl=0 10
        xd->ocd=80 f
        xd->address_mode=1
avrdude: jtag3_setparm()
avrdude: sending set parameter (scope 0x12, section 2, parm 0) command:
avrdude: jtag3_edbg_send(): sending 54 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 10 (command_sequence == 10)

Raw message:
12  80  00
[AVR] OK
avrdude: sending AVR sign-on command:
avrdude: jtag3_edbg_send(): sending 4 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 11 (command_sequence == 11)

Raw message:
12  84  00  41  56  52  20  00
[AVR] Data returned:
0x00 0x41 0x56 0x52 0x20 0x00
avrdude: partial Family_ID returned: "AVR "
avrdude: sending read SIB command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 12 (command_sequence == 12)

Raw message:
12  84  00  41  56  52  20  20  20  20  20  50  3a  33  44  3a
31  2d  33  4d  32  20  28  42  31  2e  35  39  46  30  32  2e
30  29  00  00
[AVR] Data returned:
0x00 0x41 0x56 0x52 0x20 0x20 0x20 0x20 0x20 0x50 0x3a 0x33 0x44 0x3a 0x31 0x2d
0x33 0x4d 0x32 0x20 0x28 0x42 0x31 0x2e 0x35 0x39 0x46 0x30 0x32 0x2e 0x30 0x29
0x00 0x00
avrdude: jtag3_read_sib(): received SIB: AVR     P:3D:1-3M2 (B1.59F02.0)
avrdude: jtag3_read_byte(.., io, 0xf01, ...)
avrdude: sending enter progmode command:
avrdude: jtag3_edbg_send(): sending 3 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 13 (command_sequence == 13)

Raw message:
12  80  00
[AVR] OK
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 14 (command_sequence == 14)

Raw message:
12  84  00  21  00
[AVR] Data returned:
0x00 0x21 0x00
avrdude: jtag3_read_chip_rev(): received chip silicon revision: 0x21
avrdude: silicon revision: 2.1
avrdude: AVR device initialized and ready to accept instructions
Reading |                                                    | 0% 0.00 s
avrdude: jtag3_read_byte(.., signature, 0x0, ...)
         mapped to address: 0x1100
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 15 (command_sequence == 15)

Raw message:
12  84  00  1e  96  1e  00
[AVR] Data returned:
0x00 0x1e 0x96 0x1e 0x00
avrdude: jtag3_read_byte(.., signature, 0x1, ...)
         mapped to address: 0x1101
Reading | #################                                  | 33% 0.02 s
avrdude: jtag3_read_byte(.., signature, 0x2, ...)
         mapped to address: 0x1102
Reading | ################################################## | 100% 0.03 s
avrdude: device signature = 0x1e961e (probably avr64ea48)
avrdude: Note: flash memory has been specified, an erase cycle will be performed.
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: sending chip erase command:
avrdude: jtag3_edbg_send(): sending 8 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 16 (command_sequence == 16)

Raw message:
12  80  00
[AVR] OK

avrdude: processing -U flash:w:.\median_Release_1.0.0.hex:i
avrdude: reading input file .\median_Release_1.0.0.hex for flash
         with 5122 bytes in 1 section within [0, 0x1401]
         using 41 pages and 126 pad bytes
avrdude: writing 5122 bytes flash ...
Writing |                                                    | 0% 0.00 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1400, 128)
avrdude: jtag3_paged_load(): block_size at addr 5120 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 17 (command_sequence == 17)

Raw message:
12  84  00  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  00
[AVR] Data returned:
0x00 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0x00
avrdude: padding flash [0x1400, 0x147f]
avrdude: jtag3_paged_write(.., flash, 128, 0x0000, 128)
avrdude: jtag3_paged_write(): block_size at addr 0 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 18 (command_sequence == 18)

Raw message:
12  80  00
[AVR] OK
Writing | #                                                  | 2% 0.15 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0080, 128)
avrdude: jtag3_paged_write(): block_size at addr 128 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 19 (command_sequence == 19)

Raw message:
12  80  00
[AVR] OK
Writing | ##                                                 | 4% 0.23 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0100, 128)
avrdude: jtag3_paged_write(): block_size at addr 256 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 20 (command_sequence == 20)

Raw message:
12  80  00
[AVR] OK
Writing | ####                                               | 7% 0.30 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0180, 128)
avrdude: jtag3_paged_write(): block_size at addr 384 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 21 (command_sequence == 21)

Raw message:
12  80  00
[AVR] OK
Writing | #####                                              | 9% 0.37 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0200, 128)
avrdude: jtag3_paged_write(): block_size at addr 512 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 22 (command_sequence == 22)

Raw message:
12  80  00
[AVR] OK
Writing | ######                                             | 12% 0.44 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0280, 128)
avrdude: jtag3_paged_write(): block_size at addr 640 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 23 (command_sequence == 23)

Raw message:
12  80  00
[AVR] OK
Writing | #######                                            | 14% 0.52 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0300, 128)
avrdude: jtag3_paged_write(): block_size at addr 768 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 24 (command_sequence == 24)

Raw message:
12  80  00
[AVR] OK
Writing | #########                                          | 17% 0.59 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0380, 128)
avrdude: jtag3_paged_write(): block_size at addr 896 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 25 (command_sequence == 25)

Raw message:
12  80  00
[AVR] OK
Writing | ##########                                         | 19% 0.66 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0400, 128)
avrdude: jtag3_paged_write(): block_size at addr 1024 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 26 (command_sequence == 26)

Raw message:
12  80  00
[AVR] OK
Writing | ###########                                        | 21% 0.73 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0480, 128)
avrdude: jtag3_paged_write(): block_size at addr 1152 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 27 (command_sequence == 27)

Raw message:
12  80  00
[AVR] OK
Writing | ############                                       | 24% 0.81 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0500, 128)
avrdude: jtag3_paged_write(): block_size at addr 1280 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 28 (command_sequence == 28)

Raw message:
12  80  00
[AVR] OK
Writing | #############                                      | 26% 0.88 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0580, 128)
avrdude: jtag3_paged_write(): block_size at addr 1408 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 29 (command_sequence == 29)

Raw message:
12  80  00
[AVR] OK
Writing | ###############                                    | 29% 0.96 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0600, 128)
avrdude: jtag3_paged_write(): block_size at addr 1536 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 30 (command_sequence == 30)

Raw message:
12  80  00
[AVR] OK
Writing | ################                                   | 31% 1.03 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0680, 128)
avrdude: jtag3_paged_write(): block_size at addr 1664 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 31 (command_sequence == 31)

Raw message:
12  80  00
[AVR] OK
Writing | #################                                  | 34% 1.11 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0700, 128)
avrdude: jtag3_paged_write(): block_size at addr 1792 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 32 (command_sequence == 32)

Raw message:
12  80  00
[AVR] OK
Writing | ##################                                 | 36% 1.18 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0780, 128)
avrdude: jtag3_paged_write(): block_size at addr 1920 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 33 (command_sequence == 33)

Raw message:
12  80  00
[AVR] OK
Writing | ####################                               | 39% 1.25 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0800, 128)
avrdude: jtag3_paged_write(): block_size at addr 2048 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 34 (command_sequence == 34)

Raw message:
12  80  00
[AVR] OK
Writing | #####################                              | 41% 1.32 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0880, 128)
avrdude: jtag3_paged_write(): block_size at addr 2176 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 35 (command_sequence == 35)

Raw message:
12  80  00
[AVR] OK
Writing | ######################                             | 43% 1.39 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0900, 128)
avrdude: jtag3_paged_write(): block_size at addr 2304 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 36 (command_sequence == 36)

Raw message:
12  80  00
[AVR] OK
Writing | #######################                            | 46% 1.47 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0980, 128)
avrdude: jtag3_paged_write(): block_size at addr 2432 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 37 (command_sequence == 37)

Raw message:
12  80  00
[AVR] OK
Writing | ########################                           | 48% 1.54 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0a00, 128)
avrdude: jtag3_paged_write(): block_size at addr 2560 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 38 (command_sequence == 38)

Raw message:
12  80  00
[AVR] OK
Writing | ##########################                         | 51% 1.61 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0a80, 128)
avrdude: jtag3_paged_write(): block_size at addr 2688 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 39 (command_sequence == 39)

Raw message:
12  80  00
[AVR] OK
Writing | ###########################                        | 53% 1.69 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0b00, 128)
avrdude: jtag3_paged_write(): block_size at addr 2816 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 40 (command_sequence == 40)

Raw message:
12  80  00
[AVR] OK
Writing | ############################                       | 56% 1.76 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0b80, 128)
avrdude: jtag3_paged_write(): block_size at addr 2944 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 41 (command_sequence == 41)

Raw message:
12  80  00
[AVR] OK
Writing | #############################                      | 58% 1.83 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0c00, 128)
avrdude: jtag3_paged_write(): block_size at addr 3072 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 42 (command_sequence == 42)

Raw message:
12  80  00
[AVR] OK
Writing | ##############################                     | 60% 1.90 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0c80, 128)
avrdude: jtag3_paged_write(): block_size at addr 3200 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 43 (command_sequence == 43)

Raw message:
12  80  00
[AVR] OK
Writing | ################################                   | 63% 1.98 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0d00, 128)
avrdude: jtag3_paged_write(): block_size at addr 3328 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 44 (command_sequence == 44)

Raw message:
12  80  00
[AVR] OK
Writing | #################################                  | 65% 2.05 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0d80, 128)
avrdude: jtag3_paged_write(): block_size at addr 3456 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 45 (command_sequence == 45)

Raw message:
12  80  00
[AVR] OK
Writing | ##################################                 | 68% 2.12 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0e00, 128)
avrdude: jtag3_paged_write(): block_size at addr 3584 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 46 (command_sequence == 46)

Raw message:
12  80  00
[AVR] OK
Writing | ###################################                | 70% 2.20 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0e80, 128)
avrdude: jtag3_paged_write(): block_size at addr 3712 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 47 (command_sequence == 47)

Raw message:
12  80  00
[AVR] OK
Writing | #####################################              | 73% 2.27 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0f00, 128)
avrdude: jtag3_paged_write(): block_size at addr 3840 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 48 (command_sequence == 48)

Raw message:
12  80  00
[AVR] OK
Writing | ######################################             | 75% 2.34 s
avrdude: jtag3_paged_write(.., flash, 128, 0x0f80, 128)
avrdude: jtag3_paged_write(): block_size at addr 3968 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 49 (command_sequence == 49)

Raw message:
12  80  00
[AVR] OK
Writing | #######################################            | 78% 2.41 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1000, 128)
avrdude: jtag3_paged_write(): block_size at addr 4096 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 50 (command_sequence == 50)

Raw message:
12  80  00
[AVR] OK
Writing | ########################################           | 80% 2.49 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1080, 128)
avrdude: jtag3_paged_write(): block_size at addr 4224 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 51 (command_sequence == 51)

Raw message:
12  80  00
[AVR] OK
Writing | #########################################          | 82% 2.56 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1100, 128)
avrdude: jtag3_paged_write(): block_size at addr 4352 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 52 (command_sequence == 52)

Raw message:
12  80  00
[AVR] OK
Writing | ###########################################        | 85% 2.63 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1180, 128)
avrdude: jtag3_paged_write(): block_size at addr 4480 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 53 (command_sequence == 53)

Raw message:
12  80  00
[AVR] OK
Writing | ############################################       | 87% 2.70 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1200, 128)
avrdude: jtag3_paged_write(): block_size at addr 4608 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 54 (command_sequence == 54)

Raw message:
12  80  00
[AVR] OK
Writing | #############################################      | 90% 2.78 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1280, 128)
avrdude: jtag3_paged_write(): block_size at addr 4736 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 55 (command_sequence == 55)

Raw message:
12  80  00
[AVR] OK
Writing | ##############################################     | 92% 2.85 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1300, 128)
avrdude: jtag3_paged_write(): block_size at addr 4864 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 56 (command_sequence == 56)

Raw message:
12  80  00
[AVR] OK
Writing | ################################################   | 95% 2.92 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1380, 128)
avrdude: jtag3_paged_write(): block_size at addr 4992 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 57 (command_sequence == 57)

Raw message:
12  80  00
[AVR] OK
Writing | #################################################  | 97% 2.99 s
avrdude: jtag3_paged_write(.., flash, 128, 0x1400, 128)
avrdude: jtag3_paged_write(): block_size at addr 5120 is 128
avrdude: sending write memory command:
avrdude: jtag3_edbg_send(): sending 141 bytes
avrdude: jtag3_edbg_send(): fragmenting into 3 packets
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 58 (command_sequence == 58)

Raw message:
12  80  00
[AVR] OK
Writing | ################################################## | 100% 3.06 s
avrdude: 5122 bytes of flash written
avrdude: verifying flash memory against .\median_Release_1.0.0.hex
avrdude: reading on-chip flash data ...
Reading |                                                    | 0% 0.00 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0000, 128)
avrdude: jtag3_paged_load(): block_size at addr 0 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 59 (command_sequence == 59)

Raw message:
12  84  00  5c  c0  00  00  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  00
[AVR] Data returned:
0x00 0x5c 0xc0 0x00 0x00 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x00
Reading | #                                                  | 2% 0.08 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0080, 128)
avrdude: jtag3_paged_load(): block_size at addr 128 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 60 (command_sequence == 60)

Raw message:
12  84  00  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  0c  94  60  08  0c  94  60  08  0c
94  60  08  0c  94  60  08  68  00  69  02  80  00  80  91  01
10  8f  7c  80  60  80  68  98  ed  94  bf  80  93  01  10  11
24  1f  be  cf  ef  cd  bf  df  e7  de  bf  e4  eb  f0  e0  40
e0  17  c0  b5  91  a5  91  35  91  25  91  05  91  07  fd  0c
c0  95  91  85  91  ef  01  f9  2f  e8  2f  05  90  0d  92  a2
17  b3  07  00
[AVR] Data returned:
0x00 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60 0x08 0x0c 0x94 0x60
0x08 0x0c 0x94 0x60 0x08 0x68 0x00 0x69 0x02 0x80 0x00 0x80 0x91 0x01 0x10 0x8f
0x7c 0x80 0x60 0x80 0x68 0x98 0xed 0x94 0xbf 0x80 0x93 0x01 0x10 0x11 0x24 0x1f
0xbe 0xcf 0xef 0xcd 0xbf 0xdf 0xe7 0xde 0xbf 0xe4 0xeb 0xf0 0xe0 0x40 0xe0 0x17
0xc0 0xb5 0x91 0xa5 0x91 0x35 0x91 0x25 0x91 0x05 0x91 0x07 0xfd 0x0c 0xc0 0x95
0x91 0x85 0x91 0xef 0x01 0xf9 0x2f 0xe8 0x2f 0x05 0x90 0x0d 0x92 0xa2 0x17 0xb3
0x07 0x00
Reading | ##                                                 | 4% 0.16 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0100, 128)
avrdude: jtag3_paged_load(): block_size at addr 256 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 61 (command_sequence == 61)

Raw message:
12  84  00  d9  f7  fe  01  04  c0  1d  92  a2  17  b3  07  e1
f7  e9  3b  f4  07  31  f7  0e  94  5b  09  0c  94  f8  09  f8
94  ff  cf  93  95  94  92  93  97  9c  9f  9c  93  87  82  84
8b  91  94  94  92  91  91  92  93  92  8d  84  7b  75  75  79
7e  81  81  82  85  8d  95  9b  9e  9c  97  95  99  a0  a4  a2
99  8f  8a  8b  8d  8c  86  7c  71  6c  6c  6e  6e  6d  6d  70
74  7a  7f  82  83  84  88  8e  94  96  93  8d  89  8b  90  95
96  93  8c  84  7d  77  70  68  62  5d  56  4e  47  45  4d  5c
6b  76  7d  00
[AVR] Data returned:
0x00 0xd9 0xf7 0xfe 0x01 0x04 0xc0 0x1d 0x92 0xa2 0x17 0xb3 0x07 0xe1 0xf7 0xe9
0x3b 0xf4 0x07 0x31 0xf7 0x0e 0x94 0x5b 0x09 0x0c 0x94 0xf8 0x09 0xf8 0x94 0xff
0xcf 0x93 0x95 0x94 0x92 0x93 0x97 0x9c 0x9f 0x9c 0x93 0x87 0x82 0x84 0x8b 0x91
0x94 0x94 0x92 0x91 0x91 0x92 0x93 0x92 0x8d 0x84 0x7b 0x75 0x75 0x79 0x7e 0x81
0x81 0x82 0x85 0x8d 0x95 0x9b 0x9e 0x9c 0x97 0x95 0x99 0xa0 0xa4 0xa2 0x99 0x8f
0x8a 0x8b 0x8d 0x8c 0x86 0x7c 0x71 0x6c 0x6c 0x6e 0x6e 0x6d 0x6d 0x70 0x74 0x7a
0x7f 0x82 0x83 0x84 0x88 0x8e 0x94 0x96 0x93 0x8d 0x89 0x8b 0x90 0x95 0x96 0x93
0x8c 0x84 0x7d 0x77 0x70 0x68 0x62 0x5d 0x56 0x4e 0x47 0x45 0x4d 0x5c 0x6b 0x76
0x7d 0x00
Reading | ####                                               | 7% 0.24 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0180, 128)
avrdude: jtag3_paged_load(): block_size at addr 384 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 62 (command_sequence == 62)

Raw message:
12  84  00  81  84  88  8c  8e  8e  8c  88  85  86  8a  8e  8f
8c  88  84  80  7a  73  6b  60  56  51  51  57  5e  62  63  63
67  71  7f  8a  8c  86  7e  7a  7c  83  8b  8e  8d  88  84  82
80  7e  7a  75  6f  68  63  61  61  62  64  68  6e  74  79  7d
80  81  82  82  81  80  80  81  83  87  8b  8d  8e  8e  8c  89
86  84  81  7b  73  6d  6c  70  75  7a  7f  83  85  84  85  87
8b  8e  8c  85  7d  78  79  7f  87  8d  92  95  95  93  92  95
9a  9e  9e  97  8c  83  83  89  90  94  95  93  91  91  92  93
93  8f  87  00
[AVR] Data returned:
0x00 0x81 0x84 0x88 0x8c 0x8e 0x8e 0x8c 0x88 0x85 0x86 0x8a 0x8e 0x8f 0x8c 0x88
0x84 0x80 0x7a 0x73 0x6b 0x60 0x56 0x51 0x51 0x57 0x5e 0x62 0x63 0x63 0x67 0x71
0x7f 0x8a 0x8c 0x86 0x7e 0x7a 0x7c 0x83 0x8b 0x8e 0x8d 0x88 0x84 0x82 0x80 0x7e
0x7a 0x75 0x6f 0x68 0x63 0x61 0x61 0x62 0x64 0x68 0x6e 0x74 0x79 0x7d 0x80 0x81
0x82 0x82 0x81 0x80 0x80 0x81 0x83 0x87 0x8b 0x8d 0x8e 0x8e 0x8c 0x89 0x86 0x84
0x81 0x7b 0x73 0x6d 0x6c 0x70 0x75 0x7a 0x7f 0x83 0x85 0x84 0x85 0x87 0x8b 0x8e
0x8c 0x85 0x7d 0x78 0x79 0x7f 0x87 0x8d 0x92 0x95 0x95 0x93 0x92 0x95 0x9a 0x9e
0x9e 0x97 0x8c 0x83 0x83 0x89 0x90 0x94 0x95 0x93 0x91 0x91 0x92 0x93 0x93 0x8f
0x87 0x00
Reading | #####                                              | 9% 0.32 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0200, 128)
avrdude: jtag3_paged_load(): block_size at addr 512 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 63 (command_sequence == 63)

Raw message:
12  84  00  7e  77  75  78  7d  80  81  81  83  8a  92  99  9d
9d  99  96  97  9d  a4  a4  9e  94  8b  8a  8c  8d  89  80  75
6d  6b  6d  6e  6d  6d  6f  73  78  7e  82  83  84  86  8b  92
96  94  8f  8a  89  8e  94  97  96  90  87  7f  79  72  6b  65
5f  58  50  48  45  4a  58  67  73  7a  7f  83  87  8b  8d  8e
8c  89  86  86  8a  8e  8f  8d  89  86  82  7d  76  6d  63  59
52  50  55  5c  61  63  63  65  6d  7a  87  8c  88  81  7b  7b
81  89  8e  8e  8a  85  82  81  7f  7c  77  71  6a  64  61  61
62  63  66  00
[AVR] Data returned:
0x00 0x7e 0x77 0x75 0x78 0x7d 0x80 0x81 0x81 0x83 0x8a 0x92 0x99 0x9d 0x9d 0x99
0x96 0x97 0x9d 0xa4 0xa4 0x9e 0x94 0x8b 0x8a 0x8c 0x8d 0x89 0x80 0x75 0x6d 0x6b
0x6d 0x6e 0x6d 0x6d 0x6f 0x73 0x78 0x7e 0x82 0x83 0x84 0x86 0x8b 0x92 0x96 0x94
0x8f 0x8a 0x89 0x8e 0x94 0x97 0x96 0x90 0x87 0x7f 0x79 0x72 0x6b 0x65 0x5f 0x58
0x50 0x48 0x45 0x4a 0x58 0x67 0x73 0x7a 0x7f 0x83 0x87 0x8b 0x8d 0x8e 0x8c 0x89
0x86 0x86 0x8a 0x8e 0x8f 0x8d 0x89 0x86 0x82 0x7d 0x76 0x6d 0x63 0x59 0x52 0x50
0x55 0x5c 0x61 0x63 0x63 0x65 0x6d 0x7a 0x87 0x8c 0x88 0x81 0x7b 0x7b 0x81 0x89
0x8e 0x8e 0x8a 0x85 0x82 0x81 0x7f 0x7c 0x77 0x71 0x6a 0x64 0x61 0x61 0x62 0x63
0x66 0x00
Reading | ######                                             | 12% 0.40 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0280, 128)
avrdude: jtag3_paged_load(): block_size at addr 640 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 64 (command_sequence == 64)

Raw message:
12  84  00  6b  72  78  7c  7f  81  81  82  81  80  7f  80  82
85  89  8d  8f  8f  8e  8a  87  84  82  7e  76  6f  6c  6d  72
78  7e  83  85  85  85  87  8a  8d  8d  87  7f  79  78  7d  84
8c  92  95  96  94  93  94  99  9d  9f  9a  8f  84  82  86  8e
93  94  93  91  91  92  93  93  90  89  80  79  76  77  7c  80
81  81  83  88  90  98  9c  9d  99  95  95  9a  a1  a5  a1  97
8d  89  8b  8d  8b  83  78  6e  6a  6c  6e  6d  6d  6e  71  76
7d  82  84  84  84  88  8e  94  95  91  8b  88  8b  91  96  96
92  8a  82  00
[AVR] Data returned:
0x00 0x6b 0x72 0x78 0x7c 0x7f 0x81 0x81 0x82 0x81 0x80 0x7f 0x80 0x82 0x85 0x89
0x8d 0x8f 0x8f 0x8e 0x8a 0x87 0x84 0x82 0x7e 0x76 0x6f 0x6c 0x6d 0x72 0x78 0x7e
0x83 0x85 0x85 0x85 0x87 0x8a 0x8d 0x8d 0x87 0x7f 0x79 0x78 0x7d 0x84 0x8c 0x92
0x95 0x96 0x94 0x93 0x94 0x99 0x9d 0x9f 0x9a 0x8f 0x84 0x82 0x86 0x8e 0x93 0x94
0x93 0x91 0x91 0x92 0x93 0x93 0x90 0x89 0x80 0x79 0x76 0x77 0x7c 0x80 0x81 0x81
0x83 0x88 0x90 0x98 0x9c 0x9d 0x99 0x95 0x95 0x9a 0xa1 0xa5 0xa1 0x97 0x8d 0x89
0x8b 0x8d 0x8b 0x83 0x78 0x6e 0x6a 0x6c 0x6e 0x6d 0x6d 0x6e 0x71 0x76 0x7d 0x82
0x84 0x84 0x84 0x88 0x8e 0x94 0x95 0x91 0x8b 0x88 0x8b 0x91 0x96 0x96 0x92 0x8a
0x82 0x00
Reading | #######                                            | 14% 0.48 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0300, 128)
avrdude: jtag3_paged_load(): block_size at addr 768 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 65 (command_sequence == 65)

Raw message:
12  84  00  7b  75  6e  66  60  5a  53  4c  46  47  51  61  6f
78  7e  82  85  88  8c  8d  8d  8a  87  85  87  8b  8e  8e  8b
88  84  7f  78  71  68  5d  54  50  52  58  5f  63  64  65  69
74  82  8b  8b  84  7d  7a  7d  85  8c  8f  8c  87  84  82  80
7e  7a  74  6d  66  62  61  62  63  65  69  6f  76  7b  7f  81
82  82  81  80  7f  7f  81  84  87  8c  8f  90  8f  8c  89  86
83  80  7a  73  6d  6c  70  75  7c  81  85  86  85  86  88  8c
8e  8b  83  7c  79  7b  81  89  8f  94  96  95  94  93  96  9b
9e  9c  95  00
[AVR] Data returned:
0x00 0x7b 0x75 0x6e 0x66 0x60 0x5a 0x53 0x4c 0x46 0x47 0x51 0x61 0x6f 0x78 0x7e
0x82 0x85 0x88 0x8c 0x8d 0x8d 0x8a 0x87 0x85 0x87 0x8b 0x8e 0x8e 0x8b 0x88 0x84
0x7f 0x78 0x71 0x68 0x5d 0x54 0x50 0x52 0x58 0x5f 0x63 0x64 0x65 0x69 0x74 0x82
0x8b 0x8b 0x84 0x7d 0x7a 0x7d 0x85 0x8c 0x8f 0x8c 0x87 0x84 0x82 0x80 0x7e 0x7a
0x74 0x6d 0x66 0x62 0x61 0x62 0x63 0x65 0x69 0x6f 0x76 0x7b 0x7f 0x81 0x82 0x82
0x81 0x80 0x7f 0x7f 0x81 0x84 0x87 0x8c 0x8f 0x90 0x8f 0x8c 0x89 0x86 0x83 0x80
0x7a 0x73 0x6d 0x6c 0x70 0x75 0x7c 0x81 0x85 0x86 0x85 0x86 0x88 0x8c 0x8e 0x8b
0x83 0x7c 0x79 0x7b 0x81 0x89 0x8f 0x94 0x96 0x95 0x94 0x93 0x96 0x9b 0x9e 0x9c
0x95 0x00
Reading | #########                                          | 17% 0.56 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0380, 128)
avrdude: jtag3_paged_load(): block_size at addr 896 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 66 (command_sequence == 66)

Raw message:
12  84  00  8a  83  84  8a  90  94  95  93  92  92  93  93  93
8e  86  7d  78  76  79  7d  81  82  82  84  8b  94  9a  9d  9c
97  94  97  9e  a4  a4  9d  92  8a  8a  8c  8d  88  7f  73  6c
6b  6d  6e  6d  6d  6f  73  79  7f  82  83  83  85  8b  91  95
93  8d  88  89  8e  93  96  94  8e  86  7f  79  72  6a  63  5e
58  51  49  45  4a  57  66  73  7b  80  83  86  89  8d  8e  8c
88  85  84  87  8c  8e  8d  8a  86  81  7c  75  6e  65  5a  52
50  54  5b  61  63  64  66  6d  7b  87  8c  89  81  7b  7b  80
88  8e  8e  00
[AVR] Data returned:
0x00 0x8a 0x83 0x84 0x8a 0x90 0x94 0x95 0x93 0x92 0x92 0x93 0x93 0x93 0x8e 0x86
0x7d 0x78 0x76 0x79 0x7d 0x81 0x82 0x82 0x84 0x8b 0x94 0x9a 0x9d 0x9c 0x97 0x94
0x97 0x9e 0xa4 0xa4 0x9d 0x92 0x8a 0x8a 0x8c 0x8d 0x88 0x7f 0x73 0x6c 0x6b 0x6d
0x6e 0x6d 0x6d 0x6f 0x73 0x79 0x7f 0x82 0x83 0x83 0x85 0x8b 0x91 0x95 0x93 0x8d
0x88 0x89 0x8e 0x93 0x96 0x94 0x8e 0x86 0x7f 0x79 0x72 0x6a 0x63 0x5e 0x58 0x51
0x49 0x45 0x4a 0x57 0x66 0x73 0x7b 0x80 0x83 0x86 0x89 0x8d 0x8e 0x8c 0x88 0x85
0x84 0x87 0x8c 0x8e 0x8d 0x8a 0x86 0x81 0x7c 0x75 0x6e 0x65 0x5a 0x52 0x50 0x54
0x5b 0x61 0x63 0x64 0x66 0x6d 0x7b 0x87 0x8c 0x89 0x81 0x7b 0x7b 0x80 0x88 0x8e
0x8e 0x00
Reading | ##########                                         | 19% 0.64 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0400, 128)
avrdude: jtag3_paged_load(): block_size at addr 1024 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 67 (command_sequence == 67)

Raw message:
12  84  00  8a  86  83  81  7f  7c  78  72  6b  64  61  61  62
63  66  6b  72  78  7d  80  82  82  82  81  80  80  80  82  85
89  8c  8e  8f  8e  8b  88  85  82  7e  77  70  6c  6e  72  78
7e  83  85  85  85  86  8a  8e  8e  89  81  7b  7a  7d  83  89
8e  92  93  93  92  93  96  9a  9c  9a  93  8a  85  87  8c  92
95  96  94  92  92  92  93  93  8f  86  7d  76  75  78  7d  80
80  80  83  8a  92  9a  9e  9c  97  96  99  a0  a5  a3  9a  8f
89  8a  8d  8d  87  7d  73  6d  6c  6d  6d  6c  6d  6f  73  78
7d  80  82  00
[AVR] Data returned:
0x00 0x8a 0x86 0x83 0x81 0x7f 0x7c 0x78 0x72 0x6b 0x64 0x61 0x61 0x62 0x63 0x66
0x6b 0x72 0x78 0x7d 0x80 0x82 0x82 0x82 0x81 0x80 0x80 0x80 0x82 0x85 0x89 0x8c
0x8e 0x8f 0x8e 0x8b 0x88 0x85 0x82 0x7e 0x77 0x70 0x6c 0x6e 0x72 0x78 0x7e 0x83
0x85 0x85 0x85 0x86 0x8a 0x8e 0x8e 0x89 0x81 0x7b 0x7a 0x7d 0x83 0x89 0x8e 0x92
0x93 0x93 0x92 0x93 0x96 0x9a 0x9c 0x9a 0x93 0x8a 0x85 0x87 0x8c 0x92 0x95 0x96
0x94 0x92 0x92 0x92 0x93 0x93 0x8f 0x86 0x7d 0x76 0x75 0x78 0x7d 0x80 0x80 0x80
0x83 0x8a 0x92 0x9a 0x9e 0x9c 0x97 0x96 0x99 0xa0 0xa5 0xa3 0x9a 0x8f 0x89 0x8a
0x8d 0x8d 0x87 0x7d 0x73 0x6d 0x6c 0x6d 0x6d 0x6c 0x6d 0x6f 0x73 0x78 0x7d 0x80
0x82 0x00
Reading | ###########                                        | 21% 0.72 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0480, 128)
avrdude: jtag3_paged_load(): block_size at addr 1152 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 68 (command_sequence == 68)

Raw message:
12  84  00  83  87  8e  94  96  93  8c  89  8b  90  95  96  92
8b  83  7d  77  70  69  63  5d  55  4d  46  45  4e  5d  6b  75
7b  80  84  88  8c  8f  8e  8b  87  86  87  8b  8f  8e  8b  87
84  7f  7a  73  6a  5f  55  50  51  57  5e  62  62  63  67  72
81  8c  8d  87  7f  7b  7e  85  8c  8f  8d  88  84  81  7f  7d
7a  75  6f  68  63  61  61  62  64  68  6f  75  7a  7e  81  82
82  82  81  80  80  81  83  87  8a  8d  8e  8e  8d  89  86  83
80  7a  72  6d  6c  70  75  7a  7f  83  85  85  86  88  8b  8e
8c  86  7e  00
[AVR] Data returned:
0x00 0x83 0x87 0x8e 0x94 0x96 0x93 0x8c 0x89 0x8b 0x90 0x95 0x96 0x92 0x8b 0x83
0x7d 0x77 0x70 0x69 0x63 0x5d 0x55 0x4d 0x46 0x45 0x4e 0x5d 0x6b 0x75 0x7b 0x80
0x84 0x88 0x8c 0x8f 0x8e 0x8b 0x87 0x86 0x87 0x8b 0x8f 0x8e 0x8b 0x87 0x84 0x7f
0x7a 0x73 0x6a 0x5f 0x55 0x50 0x51 0x57 0x5e 0x62 0x62 0x63 0x67 0x72 0x81 0x8c
0x8d 0x87 0x7f 0x7b 0x7e 0x85 0x8c 0x8f 0x8d 0x88 0x84 0x81 0x7f 0x7d 0x7a 0x75
0x6f 0x68 0x63 0x61 0x61 0x62 0x64 0x68 0x6f 0x75 0x7a 0x7e 0x81 0x82 0x82 0x82
0x81 0x80 0x80 0x81 0x83 0x87 0x8a 0x8d 0x8e 0x8e 0x8d 0x89 0x86 0x83 0x80 0x7a
0x72 0x6d 0x6c 0x70 0x75 0x7a 0x7f 0x83 0x85 0x85 0x86 0x88 0x8b 0x8e 0x8c 0x86
0x7e 0x00
Reading | ############                                       | 24% 0.80 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0500, 128)
avrdude: jtag3_paged_load(): block_size at addr 1280 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 69 (command_sequence == 69)

Raw message:
12  84  00  79  79  7f  86  8d  92  94  93  92  92  94  99  9c
9c  97  8c  85  84  89  90  94  95  94  92  92  92  93  93  90
88  7f  78  75  77  7c  7f  80  80  82  88  91  98  9d  9d  99
95  97  9d  a4  a5  9f  95  8c  8a  8c  8d  8a  81  76  6e  6c
6d  6d  6d  6d  6e  72  77  7d  80  82  83  85  8b  91  95  94
8f  8a  89  8e  94  98  96  8f  86  7e  78  72  6c  65  5f  58
4f  48  44  4a  58  67  72  7a  7f  83  86  8a  8d  8e  8c  89
86  87  8a  8e  8f  8d  89  85  81  7d  76  6e  63  58  51  4f
54  5c  61  00
[AVR] Data returned:
0x00 0x79 0x79 0x7f 0x86 0x8d 0x92 0x94 0x93 0x92 0x92 0x94 0x99 0x9c 0x9c 0x97
0x8c 0x85 0x84 0x89 0x90 0x94 0x95 0x94 0x92 0x92 0x92 0x93 0x93 0x90 0x88 0x7f
0x78 0x75 0x77 0x7c 0x7f 0x80 0x80 0x82 0x88 0x91 0x98 0x9d 0x9d 0x99 0x95 0x97
0x9d 0xa4 0xa5 0x9f 0x95 0x8c 0x8a 0x8c 0x8d 0x8a 0x81 0x76 0x6e 0x6c 0x6d 0x6d
0x6d 0x6d 0x6e 0x72 0x77 0x7d 0x80 0x82 0x83 0x85 0x8b 0x91 0x95 0x94 0x8f 0x8a
0x89 0x8e 0x94 0x98 0x96 0x8f 0x86 0x7e 0x78 0x72 0x6c 0x65 0x5f 0x58 0x4f 0x48
0x44 0x4a 0x58 0x67 0x72 0x7a 0x7f 0x83 0x86 0x8a 0x8d 0x8e 0x8c 0x89 0x86 0x87
0x8a 0x8e 0x8f 0x8d 0x89 0x85 0x81 0x7d 0x76 0x6e 0x63 0x58 0x51 0x4f 0x54 0x5c
0x61 0x00
Reading | #############                                      | 26% 0.87 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0580, 128)
avrdude: jtag3_paged_load(): block_size at addr 1408 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 70 (command_sequence == 70)

Raw message:
12  84  00  63  63  65  6d  7b  88  8e  89  81  7c  7c  82  8a
8f  8e  8a  85  82  81  7f  7c  77  71  69  63  61  61  62  63
66  6c  73  79  7d  80  82  82  82  81  80  7f  80  82  85  89
8c  8f  8f  8e  8b  87  84  81  7d  76  6f  6c  6d  72  78  7d
82  85  86  86  87  8a  8d  8e  89  80  7a  78  7c  83  8b  91
94  94  93  92  94  97  9b  9d  99  90  87  83  87  8d  93  95
94  93  92  92  93  93  91  8b  82  7a  76  76  7b  7f  81  81
81  86  8f  97  9c  9d  9a  96  95  9a  a1  a5  a2  99  8f  8a
8b  8e  8c  00
[AVR] Data returned:
0x00 0x63 0x63 0x65 0x6d 0x7b 0x88 0x8e 0x89 0x81 0x7c 0x7c 0x82 0x8a 0x8f 0x8e
0x8a 0x85 0x82 0x81 0x7f 0x7c 0x77 0x71 0x69 0x63 0x61 0x61 0x62 0x63 0x66 0x6c
0x73 0x79 0x7d 0x80 0x82 0x82 0x82 0x81 0x80 0x7f 0x80 0x82 0x85 0x89 0x8c 0x8f
0x8f 0x8e 0x8b 0x87 0x84 0x81 0x7d 0x76 0x6f 0x6c 0x6d 0x72 0x78 0x7d 0x82 0x85
0x86 0x86 0x87 0x8a 0x8d 0x8e 0x89 0x80 0x7a 0x78 0x7c 0x83 0x8b 0x91 0x94 0x94
0x93 0x92 0x94 0x97 0x9b 0x9d 0x99 0x90 0x87 0x83 0x87 0x8d 0x93 0x95 0x94 0x93
0x92 0x92 0x93 0x93 0x91 0x8b 0x82 0x7a 0x76 0x76 0x7b 0x7f 0x81 0x81 0x81 0x86
0x8f 0x97 0x9c 0x9d 0x9a 0x96 0x95 0x9a 0xa1 0xa5 0xa2 0x99 0x8f 0x8a 0x8b 0x8e
0x8c 0x00
Reading | ###############                                    | 29% 0.95 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0600, 128)
avrdude: jtag3_paged_load(): block_size at addr 1536 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 71 (command_sequence == 71)

Raw message:
12  84  00  85  7a  70  6c  6c  6e  6d  6c  6d  70  75  7b  80
83  83  84  87  8e  94  96  92  8b  88  8b  91  96  97  92  8a
81  7b  75  6e  67  61  5a  53  4b  45  46  51  60  6e  77  7d
81  85  88  8c  8e  8d  8b  87  85  87  8b  8e  8e  8b  87  83
7e  78  71  68  5d  53  4e  50  57  5f  63  64  64  69  74  83
8c  8c  85  7d  7b  7e  86  8d  8f  8c  87  84  82  80  7e  7a
74  6d  66  61  60  61  62  64  68  6f  76  7b  7f  82  82  82
81  81  80  80  81  84  87  8b  8e  8f  8f  8d  89  85  83  7f
7a  72  6d  00
[AVR] Data returned:
0x00 0x85 0x7a 0x70 0x6c 0x6c 0x6e 0x6d 0x6c 0x6d 0x70 0x75 0x7b 0x80 0x83 0x83
0x84 0x87 0x8e 0x94 0x96 0x92 0x8b 0x88 0x8b 0x91 0x96 0x97 0x92 0x8a 0x81 0x7b
0x75 0x6e 0x67 0x61 0x5a 0x53 0x4b 0x45 0x46 0x51 0x60 0x6e 0x77 0x7d 0x81 0x85
0x88 0x8c 0x8e 0x8d 0x8b 0x87 0x85 0x87 0x8b 0x8e 0x8e 0x8b 0x87 0x83 0x7e 0x78
0x71 0x68 0x5d 0x53 0x4e 0x50 0x57 0x5f 0x63 0x64 0x64 0x69 0x74 0x83 0x8c 0x8c
0x85 0x7d 0x7b 0x7e 0x86 0x8d 0x8f 0x8c 0x87 0x84 0x82 0x80 0x7e 0x7a 0x74 0x6d
0x66 0x61 0x60 0x61 0x62 0x64 0x68 0x6f 0x76 0x7b 0x7f 0x82 0x82 0x82 0x81 0x81
0x80 0x80 0x81 0x84 0x87 0x8b 0x8e 0x8f 0x8f 0x8d 0x89 0x85 0x83 0x7f 0x7a 0x72
0x6d 0x00
Reading | ################                                   | 31% 1.03 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0680, 128)
avrdude: jtag3_paged_load(): block_size at addr 1664 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 72 (command_sequence == 72)

Raw message:
12  84  00  6c  6f  75  7b  81  84  86  86  86  88  8c  8e  8c
84  7d  79  7a  80  87  8e  93  95  94  93  93  95  99  9c  9c
96  8b  85  85  8a  91  95  96  94  93  92  93  93  93  8f  87
7f  78  75  78  7d  80  81  81  83  8a  92  99  9d  9c  97  95
97  9d  a4  a5  9e  94  8c  8a  8d  8d  8a  80  75  6e  6c  6d
6d  6c  6c  6e  72  78  7d  81  82  83  85  8b  92  96  94  8e
89  89  8e  94  97  95  8e  86  7f  79  72  6b  64  5e  57  4f
48  44  49  57  66  72  7a  7f  83  86  8a  8d  8e  8d  89  86
85  88  8d  00
[AVR] Data returned:
0x00 0x6c 0x6f 0x75 0x7b 0x81 0x84 0x86 0x86 0x86 0x88 0x8c 0x8e 0x8c 0x84 0x7d
0x79 0x7a 0x80 0x87 0x8e 0x93 0x95 0x94 0x93 0x93 0x95 0x99 0x9c 0x9c 0x96 0x8b
0x85 0x85 0x8a 0x91 0x95 0x96 0x94 0x93 0x92 0x93 0x93 0x93 0x8f 0x87 0x7f 0x78
0x75 0x78 0x7d 0x80 0x81 0x81 0x83 0x8a 0x92 0x99 0x9d 0x9c 0x97 0x95 0x97 0x9d
0xa4 0xa5 0x9e 0x94 0x8c 0x8a 0x8d 0x8d 0x8a 0x80 0x75 0x6e 0x6c 0x6d 0x6d 0x6c
0x6c 0x6e 0x72 0x78 0x7d 0x81 0x82 0x83 0x85 0x8b 0x92 0x96 0x94 0x8e 0x89 0x89
0x8e 0x94 0x97 0x95 0x8e 0x86 0x7f 0x79 0x72 0x6b 0x64 0x5e 0x57 0x4f 0x48 0x44
0x49 0x57 0x66 0x72 0x7a 0x7f 0x83 0x86 0x8a 0x8d 0x8e 0x8d 0x89 0x86 0x85 0x88
0x8d 0x00
Reading | #################                                  | 34% 1.11 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0700, 128)
avrdude: jtag3_paged_load(): block_size at addr 1792 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 73 (command_sequence == 73)

Raw message:
12  84  00  8f  8d  8a  85  81  7c  76  6e  64  59  51  4e  53
5b  61  63  63  65  6d  7a  88  8d  89  81  7b  7b  81  89  8e
8e  8a  86  83  81  7f  7c  77  71  6a  63  60  60  61  62  65
6b  72  78  7d  80  82  82  82  81  80  80  80  82  85  89  8c
8e  8f  8e  8b  87  84  81  7d  76  6f  6c  6d  72  77  7d  83
86  86  86  87  8a  8e  8e  89  81  7b  79  7c  83  8a  90  93
94  93  92  93  97  9b  9d  9a  92  88  84  87  8d  93  96  95
94  92  92  93  94  92  8d  84  7c  76  76  7a  7e  80  81  81
85  8c  94  00
[AVR] Data returned:
0x00 0x8f 0x8d 0x8a 0x85 0x81 0x7c 0x76 0x6e 0x64 0x59 0x51 0x4e 0x53 0x5b 0x61
0x63 0x63 0x65 0x6d 0x7a 0x88 0x8d 0x89 0x81 0x7b 0x7b 0x81 0x89 0x8e 0x8e 0x8a
0x86 0x83 0x81 0x7f 0x7c 0x77 0x71 0x6a 0x63 0x60 0x60 0x61 0x62 0x65 0x6b 0x72
0x78 0x7d 0x80 0x82 0x82 0x82 0x81 0x80 0x80 0x80 0x82 0x85 0x89 0x8c 0x8e 0x8f
0x8e 0x8b 0x87 0x84 0x81 0x7d 0x76 0x6f 0x6c 0x6d 0x72 0x77 0x7d 0x83 0x86 0x86
0x86 0x87 0x8a 0x8e 0x8e 0x89 0x81 0x7b 0x79 0x7c 0x83 0x8a 0x90 0x93 0x94 0x93
0x92 0x93 0x97 0x9b 0x9d 0x9a 0x92 0x88 0x84 0x87 0x8d 0x93 0x96 0x95 0x94 0x92
0x92 0x93 0x94 0x92 0x8d 0x84 0x7c 0x76 0x76 0x7a 0x7e 0x80 0x81 0x81 0x85 0x8c
0x94 0x00
Reading | ##################                                 | 36% 1.19 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0780, 128)
avrdude: jtag3_paged_load(): block_size at addr 1920 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 74 (command_sequence == 74)

Raw message:
12  84  00  9a  9d  9b  97  96  9a  a1  a5  a3  9a  90  8b  8b
8d  8c  86  7c  72  6c  6c  6d  6d  6c  6d  70  74  7a  7e  81
82  84  88  8f  94  96  92  8c  89  8c  92  96  97  93  8a  82
7b  76  6f  68  62  5b  53  4b  45  46  50  5f  6d  76  7c  81
85  89  8d  8f  8e  8b  87  86  88  8c  8f  8f  8b  87  83  7f
79  72  69  5e  54  4f  51  58  5f  62  63  63  68  73  82  8c
8c  85  7e  7b  7f  86  8d  90  8c  88  84  81  7f  7d  79  74
6d  66  61  60  60  62  64  69  6f  76  7b  7e  81  82  82  81
81  80  7f  00
[AVR] Data returned:
0x00 0x9a 0x9d 0x9b 0x97 0x96 0x9a 0xa1 0xa5 0xa3 0x9a 0x90 0x8b 0x8b 0x8d 0x8c
0x86 0x7c 0x72 0x6c 0x6c 0x6d 0x6d 0x6c 0x6d 0x70 0x74 0x7a 0x7e 0x81 0x82 0x84
0x88 0x8f 0x94 0x96 0x92 0x8c 0x89 0x8c 0x92 0x96 0x97 0x93 0x8a 0x82 0x7b 0x76
0x6f 0x68 0x62 0x5b 0x53 0x4b 0x45 0x46 0x50 0x5f 0x6d 0x76 0x7c 0x81 0x85 0x89
0x8d 0x8f 0x8e 0x8b 0x87 0x86 0x88 0x8c 0x8f 0x8f 0x8b 0x87 0x83 0x7f 0x79 0x72
0x69 0x5e 0x54 0x4f 0x51 0x58 0x5f 0x62 0x63 0x63 0x68 0x73 0x82 0x8c 0x8c 0x85
0x7e 0x7b 0x7f 0x86 0x8d 0x90 0x8c 0x88 0x84 0x81 0x7f 0x7d 0x79 0x74 0x6d 0x66
0x61 0x60 0x60 0x62 0x64 0x69 0x6f 0x76 0x7b 0x7e 0x81 0x82 0x82 0x81 0x81 0x80
0x7f 0x00
Reading | ####################                               | 39% 1.27 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0800, 128)
avrdude: jtag3_paged_load(): block_size at addr 2048 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 75 (command_sequence == 75)

Raw message:
12  84  00  81  84  87  8b  8e  8f  8f  8c  89  85  82  7f  79
71  6c  6c  6f  75  7b  80  84  86  86  86  88  8b  8e  8b  84
7c  78  79  7f  88  8f  94  95  94  92  92  96  9a  9d  9c  94
89  83  84  8b  92  95  95  93  92  92  93  94  92  8d  85  7d
77  76  79  7e  80  81  81  84  8c  94  99  9c  9b  97  95  98
9e  a4  a5  9e  93  8c  8b  8d  8d  88  7f  73  6c  6b  6d  6d
6d  6d  6f  73  79  7f  82  83  84  86  8b  92  95  93  8d  89
8a  8f  96  98  96  8e  84  7c  77  71  6a  63  5c  55  4c  46
45  4d  5c  00
[AVR] Data returned:
0x00 0x81 0x84 0x87 0x8b 0x8e 0x8f 0x8f 0x8c 0x89 0x85 0x82 0x7f 0x79 0x71 0x6c
0x6c 0x6f 0x75 0x7b 0x80 0x84 0x86 0x86 0x86 0x88 0x8b 0x8e 0x8b 0x84 0x7c 0x78
0x79 0x7f 0x88 0x8f 0x94 0x95 0x94 0x92 0x92 0x96 0x9a 0x9d 0x9c 0x94 0x89 0x83
0x84 0x8b 0x92 0x95 0x95 0x93 0x92 0x92 0x93 0x94 0x92 0x8d 0x85 0x7d 0x77 0x76
0x79 0x7e 0x80 0x81 0x81 0x84 0x8c 0x94 0x99 0x9c 0x9b 0x97 0x95 0x98 0x9e 0xa4
0xa5 0x9e 0x93 0x8c 0x8b 0x8d 0x8d 0x88 0x7f 0x73 0x6c 0x6b 0x6d 0x6d 0x6d 0x6d
0x6f 0x73 0x79 0x7f 0x82 0x83 0x84 0x86 0x8b 0x92 0x95 0x93 0x8d 0x89 0x8a 0x8f
0x96 0x98 0x96 0x8e 0x84 0x7c 0x77 0x71 0x6a 0x63 0x5c 0x55 0x4c 0x46 0x45 0x4d
0x5c 0x00
Reading | #####################                              | 41% 1.35 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0880, 128)
avrdude: jtag3_paged_load(): block_size at addr 2176 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 76 (command_sequence == 76)

Raw message:
12  84  00  6a  74  7a  7f  84  88  8b  8d  8d  8b  88  86  87
8b  8f  8f  8c  88  85  81  7b  74  6b  60  56  4f  4f  55  5d
62  63  63  66  6f  7e  8a  8d  87  7f  7b  7d  84  8c  90  8e
8a  85  83  81  7f  7b  75  6f  67  62  5f  60  62  64  67  6d
74  7a  7e  81  82  82  81  80  80  7f  80  83  86  8a  8e  90
90  8e  8a  86  83  80  7b  74  6d  6b  6d  72  79  7f  84  86
86  86  87  8a  8d  8c  86  7e  78  78  7d  85  8e  93  96  96
94  93  95  99  9d  9d  97  8c  83  83  89  90  95  95  93  92
92  93  94  00
[AVR] Data returned:
0x00 0x6a 0x74 0x7a 0x7f 0x84 0x88 0x8b 0x8d 0x8d 0x8b 0x88 0x86 0x87 0x8b 0x8f
0x8f 0x8c 0x88 0x85 0x81 0x7b 0x74 0x6b 0x60 0x56 0x4f 0x4f 0x55 0x5d 0x62 0x63
0x63 0x66 0x6f 0x7e 0x8a 0x8d 0x87 0x7f 0x7b 0x7d 0x84 0x8c 0x90 0x8e 0x8a 0x85
0x83 0x81 0x7f 0x7b 0x75 0x6f 0x67 0x62 0x5f 0x60 0x62 0x64 0x67 0x6d 0x74 0x7a
0x7e 0x81 0x82 0x82 0x81 0x80 0x80 0x7f 0x80 0x83 0x86 0x8a 0x8e 0x90 0x90 0x8e
0x8a 0x86 0x83 0x80 0x7b 0x74 0x6d 0x6b 0x6d 0x72 0x79 0x7f 0x84 0x86 0x86 0x86
0x87 0x8a 0x8d 0x8c 0x86 0x7e 0x78 0x78 0x7d 0x85 0x8e 0x93 0x96 0x96 0x94 0x93
0x95 0x99 0x9d 0x9d 0x97 0x8c 0x83 0x83 0x89 0x90 0x95 0x95 0x93 0x92 0x92 0x93
0x94 0x00
Reading | ######################                             | 43% 1.43 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0900, 128)
avrdude: jtag3_paged_load(): block_size at addr 2304 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 77 (command_sequence == 77)

Raw message:
12  84  00  93  8f  87  7f  79  77  79  7d  81  82  82  84  8a
93  99  9c  9b  98  94  96  9c  a3  a5  a0  96  8d  8b  8d  8e
8b  82  76  6d  6a  6c  6e  6d  6c  6e  71  78  7e  82  84  84
85  89  8f  94  94  8f  8a  88  8c  93  97  96  91  88  80  7a
73  6c  65  5f  58  51  49  45  48  54  64  70  79  7e  82  85
89  8c  8d  8c  8a  86  85  87  8b  8e  8e  8b  87  83  7d  77
70  66  5b  53  4f  52  59  60  63  64  65  6b  77  85  8c  8a
82  7c  7a  7f  87  8d  8f  8b  87  84  82  80  7e  79  72  6b
64  60  60  00
[AVR] Data returned:
0x00 0x93 0x8f 0x87 0x7f 0x79 0x77 0x79 0x7d 0x81 0x82 0x82 0x84 0x8a 0x93 0x99
0x9c 0x9b 0x98 0x94 0x96 0x9c 0xa3 0xa5 0xa0 0x96 0x8d 0x8b 0x8d 0x8e 0x8b 0x82
0x76 0x6d 0x6a 0x6c 0x6e 0x6d 0x6c 0x6e 0x71 0x78 0x7e 0x82 0x84 0x84 0x85 0x89
0x8f 0x94 0x94 0x8f 0x8a 0x88 0x8c 0x93 0x97 0x96 0x91 0x88 0x80 0x7a 0x73 0x6c
0x65 0x5f 0x58 0x51 0x49 0x45 0x48 0x54 0x64 0x70 0x79 0x7e 0x82 0x85 0x89 0x8c
0x8d 0x8c 0x8a 0x86 0x85 0x87 0x8b 0x8e 0x8e 0x8b 0x87 0x83 0x7d 0x77 0x70 0x66
0x5b 0x53 0x4f 0x52 0x59 0x60 0x63 0x64 0x65 0x6b 0x77 0x85 0x8c 0x8a 0x82 0x7c
0x7a 0x7f 0x87 0x8d 0x8f 0x8b 0x87 0x84 0x82 0x80 0x7e 0x79 0x72 0x6b 0x64 0x60
0x60 0x00
Reading | #######################                            | 46% 1.51 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0980, 128)
avrdude: jtag3_paged_load(): block_size at addr 2432 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 78 (command_sequence == 78)

Raw message:
12  84  00  61  63  65  6a  70  77  7d  80  82  82  81  80  80
7f  80  81  84  87  8b  8f  90  8f  8c  88  85  82  7f  78  71
6c  6c  6f  75  7c  82  86  86  85  86  89  8c  8e  8a  82  7b
78  7b  82  89  90  94  95  95  93  93  97  9b  9d  9b  92  87
82  85  8c  92  95  95  93  92  92  93  94  92  8d  84  7d  78
77  7a  7f  81  82  82  86  8d  95  9a  9c  9a  96  94  98  9f
a4  a3  9b  91  8b  8b  8e  8e  88  7e  72  6c  6b  6d  6d  6d
6d  6f  74  7a  7f  83  84  84  86  8c  92  95  92  8c  88  8a
8f  95  97  00
[AVR] Data returned:
0x00 0x61 0x63 0x65 0x6a 0x70 0x77 0x7d 0x80 0x82 0x82 0x81 0x80 0x80 0x7f 0x80
0x81 0x84 0x87 0x8b 0x8f 0x90 0x8f 0x8c 0x88 0x85 0x82 0x7f 0x78 0x71 0x6c 0x6c
0x6f 0x75 0x7c 0x82 0x86 0x86 0x85 0x86 0x89 0x8c 0x8e 0x8a 0x82 0x7b 0x78 0x7b
0x82 0x89 0x90 0x94 0x95 0x95 0x93 0x93 0x97 0x9b 0x9d 0x9b 0x92 0x87 0x82 0x85
0x8c 0x92 0x95 0x95 0x93 0x92 0x92 0x93 0x94 0x92 0x8d 0x84 0x7d 0x78 0x77 0x7a
0x7f 0x81 0x82 0x82 0x86 0x8d 0x95 0x9a 0x9c 0x9a 0x96 0x94 0x98 0x9f 0xa4 0xa3
0x9b 0x91 0x8b 0x8b 0x8e 0x8e 0x88 0x7e 0x72 0x6c 0x6b 0x6d 0x6d 0x6d 0x6d 0x6f
0x74 0x7a 0x7f 0x83 0x84 0x84 0x86 0x8c 0x92 0x95 0x92 0x8c 0x88 0x8a 0x8f 0x95
0x97 0x00
Reading | ########################                           | 48% 1.59 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0a00, 128)
avrdude: jtag3_paged_load(): block_size at addr 2560 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 79 (command_sequence == 79)

Raw message:
12  84  00  94  8d  84  7d  77  70  69  62  5c  56  4e  47  45
4d  5b  6a  74  7b  80  83  86  8a  8d  8d  8b  87  85  86  8a
8e  8f  8d  89  85  80  7b  74  6c  62  57  51  50  55  5d  62
64  64  67  70  7e  89  8c  87  7f  7b  7c  83  8a  8f  8e  8a
86  83  81  7e  7b  76  6f  68  62  60  60  62  64  67  6d  74
7a  7f  81  82  82  81  80  80  80  80  82  85  89  8d  8f  8f
8e  8a  86  83  80  7c  74  6e  6b  6d  72  78  7f  84  86  86
85  87  8a  8e  8d  87  7f  7a  79  7e  85  8c  91  94  94  93
92  93  97  00
[AVR] Data returned:
0x00 0x94 0x8d 0x84 0x7d 0x77 0x70 0x69 0x62 0x5c 0x56 0x4e 0x47 0x45 0x4d 0x5b
0x6a 0x74 0x7b 0x80 0x83 0x86 0x8a 0x8d 0x8d 0x8b 0x87 0x85 0x86 0x8a 0x8e 0x8f
0x8d 0x89 0x85 0x80 0x7b 0x74 0x6c 0x62 0x57 0x51 0x50 0x55 0x5d 0x62 0x64 0x64
0x67 0x70 0x7e 0x89 0x8c 0x87 0x7f 0x7b 0x7c 0x83 0x8a 0x8f 0x8e 0x8a 0x86 0x83
0x81 0x7e 0x7b 0x76 0x6f 0x68 0x62 0x60 0x60 0x62 0x64 0x67 0x6d 0x74 0x7a 0x7f
0x81 0x82 0x82 0x81 0x80 0x80 0x80 0x80 0x82 0x85 0x89 0x8d 0x8f 0x8f 0x8e 0x8a
0x86 0x83 0x80 0x7c 0x74 0x6e 0x6b 0x6d 0x72 0x78 0x7f 0x84 0x86 0x86 0x85 0x87
0x8a 0x8e 0x8d 0x87 0x7f 0x7a 0x79 0x7e 0x85 0x8c 0x91 0x94 0x94 0x93 0x92 0x93
0x97 0x00
Reading | ##########################                         | 51% 1.67 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0a80, 128)
avrdude: jtag3_paged_load(): block_size at addr 2688 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 80 (command_sequence == 80)

Raw message:
12  84  00  9b  9c  98  8e  86  84  88  8f  94  96  95  93  92
92  93  93  91  8a  82  7a  76  77  7b  7f  81  81  82  87  8e
96  9b  9c  99  95  95  9b  a2  a5  a1  97  8e  8a  8c  8e  8c
85  79  70  6c  6c  6d  6d  6c  6e  70  75  7b  80  82  83  84
89  90  95  95  90  8a  89  8c  92  97  96  91  88  80  7a  74
6d  67  61  59  51  49  44  48  54  64  70  77  7d  81  85  89
8d  8e  8d  8a  87  86  8a  8e  90  8e  8a  86  83  7e  78  70
66  5b  53  50  53  5a  60  63  63  64  6b  77  85  8d  8a  83
7d  7b  80  00
[AVR] Data returned:
0x00 0x9b 0x9c 0x98 0x8e 0x86 0x84 0x88 0x8f 0x94 0x96 0x95 0x93 0x92 0x92 0x93
0x93 0x91 0x8a 0x82 0x7a 0x76 0x77 0x7b 0x7f 0x81 0x81 0x82 0x87 0x8e 0x96 0x9b
0x9c 0x99 0x95 0x95 0x9b 0xa2 0xa5 0xa1 0x97 0x8e 0x8a 0x8c 0x8e 0x8c 0x85 0x79
0x70 0x6c 0x6c 0x6d 0x6d 0x6c 0x6e 0x70 0x75 0x7b 0x80 0x82 0x83 0x84 0x89 0x90
0x95 0x95 0x90 0x8a 0x89 0x8c 0x92 0x97 0x96 0x91 0x88 0x80 0x7a 0x74 0x6d 0x67
0x61 0x59 0x51 0x49 0x44 0x48 0x54 0x64 0x70 0x77 0x7d 0x81 0x85 0x89 0x8d 0x8e
0x8d 0x8a 0x87 0x86 0x8a 0x8e 0x90 0x8e 0x8a 0x86 0x83 0x7e 0x78 0x70 0x66 0x5b
0x53 0x50 0x53 0x5a 0x60 0x63 0x63 0x64 0x6b 0x77 0x85 0x8d 0x8a 0x83 0x7d 0x7b
0x80 0x00
Reading | ###########################                        | 53% 1.75 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0b00, 128)
avrdude: jtag3_paged_load(): block_size at addr 2816 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 81 (command_sequence == 81)

Raw message:
12  84  00  88  8e  8f  8b  87  84  81  7f  7c  78  72  6b  65
60  60  61  63  66  6b  72  78  7d  80  82  82  82  81  80  80
80  81  84  87  8b  8e  8f  8f  8c  88  84  81  7e  78  70  6c
6c  70  76  7c  82  85  86  86  86  89  8c  8e  8a  82  7a  77
7a  82  8b  91  95  96  94  92  93  97  9c  9e  9a  91  86  82
86  8d  93  96  94  92  92  92  94  94  91  8b  82  7b  77  77
7b  7f  81  81  82  87  8f  96  9b  9c  99  95  93  98  9f  a4
a3  9a  90  8b  8b  8e  8d  87  7c  71  6b  6b  6d  6d  6d  6d
70  75  7b  00
[AVR] Data returned:
0x00 0x88 0x8e 0x8f 0x8b 0x87 0x84 0x81 0x7f 0x7c 0x78 0x72 0x6b 0x65 0x60 0x60
0x61 0x63 0x66 0x6b 0x72 0x78 0x7d 0x80 0x82 0x82 0x82 0x81 0x80 0x80 0x80 0x81
0x84 0x87 0x8b 0x8e 0x8f 0x8f 0x8c 0x88 0x84 0x81 0x7e 0x78 0x70 0x6c 0x6c 0x70
0x76 0x7c 0x82 0x85 0x86 0x86 0x86 0x89 0x8c 0x8e 0x8a 0x82 0x7a 0x77 0x7a 0x82
0x8b 0x91 0x95 0x96 0x94 0x92 0x93 0x97 0x9c 0x9e 0x9a 0x91 0x86 0x82 0x86 0x8d
0x93 0x96 0x94 0x92 0x92 0x92 0x94 0x94 0x91 0x8b 0x82 0x7b 0x77 0x77 0x7b 0x7f
0x81 0x81 0x82 0x87 0x8f 0x96 0x9b 0x9c 0x99 0x95 0x93 0x98 0x9f 0xa4 0xa3 0x9a
0x90 0x8b 0x8b 0x8e 0x8d 0x87 0x7c 0x71 0x6b 0x6b 0x6d 0x6d 0x6d 0x6d 0x70 0x75
0x7b 0x00
Reading | ############################                       | 56% 1.83 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0b80, 128)
avrdude: jtag3_paged_load(): block_size at addr 2944 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 82 (command_sequence == 82)

Raw message:
12  84  00  80  83  84  84  86  8c  92  94  91  8b  88  8a  90
95  97  94  8b  82  7a  75  6f  68  62  5b  53  4b  45  46  50
5f  6d  76  7c  80  84  87  8b  8d  8c  8a  87  85  87  8b  8e
8e  8c  88  84  80  7a  72  69  5e  55  50  51  57  5e  63  64
65  69  73  81  8b  8c  85  7d  7a  7d  84  8c  8f  8d  88  85
82  81  7f  7a  74  6d  66  61  5f  61  63  65  69  6f  76  7c
80  82  83  82  80  80  7f  7f  81  83  86  8a  8e  90  90  8e
8a  85  82  7f  7a  73  6d  6b  6e  73  79  80  84  86  86  86
88  8b  8e  00
[AVR] Data returned:
0x00 0x80 0x83 0x84 0x84 0x86 0x8c 0x92 0x94 0x91 0x8b 0x88 0x8a 0x90 0x95 0x97
0x94 0x8b 0x82 0x7a 0x75 0x6f 0x68 0x62 0x5b 0x53 0x4b 0x45 0x46 0x50 0x5f 0x6d
0x76 0x7c 0x80 0x84 0x87 0x8b 0x8d 0x8c 0x8a 0x87 0x85 0x87 0x8b 0x8e 0x8e 0x8c
0x88 0x84 0x80 0x7a 0x72 0x69 0x5e 0x55 0x50 0x51 0x57 0x5e 0x63 0x64 0x65 0x69
0x73 0x81 0x8b 0x8c 0x85 0x7d 0x7a 0x7d 0x84 0x8c 0x8f 0x8d 0x88 0x85 0x82 0x81
0x7f 0x7a 0x74 0x6d 0x66 0x61 0x5f 0x61 0x63 0x65 0x69 0x6f 0x76 0x7c 0x80 0x82
0x83 0x82 0x80 0x80 0x7f 0x7f 0x81 0x83 0x86 0x8a 0x8e 0x90 0x90 0x8e 0x8a 0x85
0x82 0x7f 0x7a 0x73 0x6d 0x6b 0x6e 0x73 0x79 0x80 0x84 0x86 0x86 0x86 0x88 0x8b
0x8e 0x00
Reading | #############################                      | 58% 1.91 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0c00, 128)
avrdude: jtag3_paged_load(): block_size at addr 3072 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 83 (command_sequence == 83)

Raw message:
12  84  00  8c  84  7c  78  79  7f  88  8f  94  96  96  94  94
96  9a  9d  9c  95  8a  83  84  8a  91  95  95  93  92  93  93
94  92  8e  86  7e  78  77  79  7e  81  82  82  85  8c  94  9a
9c  9b  96  93  95  9c  a3  a4  9e  94  8c  8b  8d  8e  8a  81
75  6d  6b  6d  6e  6d  6c  6e  72  78  7f  83  85  84  85  89
90  94  93  8e  89  88  8c  93  96  95  8f  86  7e  78  72  6b
64  5e  57  4f  48  45  4a  57  67  72  7a  7f  83  85  89  8c
8d  8c  89  86  85  88  8c  8f  8e  8b  87  82  7c  76  6e  64
5a  52  4f  00
[AVR] Data returned:
0x00 0x8c 0x84 0x7c 0x78 0x79 0x7f 0x88 0x8f 0x94 0x96 0x96 0x94 0x94 0x96 0x9a
0x9d 0x9c 0x95 0x8a 0x83 0x84 0x8a 0x91 0x95 0x95 0x93 0x92 0x93 0x93 0x94 0x92
0x8e 0x86 0x7e 0x78 0x77 0x79 0x7e 0x81 0x82 0x82 0x85 0x8c 0x94 0x9a 0x9c 0x9b
0x96 0x93 0x95 0x9c 0xa3 0xa4 0x9e 0x94 0x8c 0x8b 0x8d 0x8e 0x8a 0x81 0x75 0x6d
0x6b 0x6d 0x6e 0x6d 0x6c 0x6e 0x72 0x78 0x7f 0x83 0x85 0x84 0x85 0x89 0x90 0x94
0x93 0x8e 0x89 0x88 0x8c 0x93 0x96 0x95 0x8f 0x86 0x7e 0x78 0x72 0x6b 0x64 0x5e
0x57 0x4f 0x48 0x45 0x4a 0x57 0x67 0x72 0x7a 0x7f 0x83 0x85 0x89 0x8c 0x8d 0x8c
0x89 0x86 0x85 0x88 0x8c 0x8f 0x8e 0x8b 0x87 0x82 0x7c 0x76 0x6e 0x64 0x5a 0x52
0x4f 0x00
Reading | ##############################                     | 60% 1.99 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0c80, 128)
avrdude: jtag3_paged_load(): block_size at addr 3200 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 84 (command_sequence == 84)

Raw message:
12  84  00  53  5a  60  64  65  66  6d  7a  87  8c  89  81  7b
7b  80  88  8d  8e  8a  87  84  82  80  7d  78  72  6a  63  60
60  61  63  66  6b  72  79  7e  82  83  82  81  80  80  80  80
82  84  88  8c  8f  90  8f  8c  88  84  81  7d  77  70  6c  6c
70  76  7d  82  86  86  86  86  89  8d  8e  89  81  7a  79  7c
83  8a  90  94  95  94  93  94  97  9a  9c  9a  91  87  83  86
8d  93  96  95  94  93  92  93  94  92  8c  84  7c  77  76  7a
7f  81  82  82  86  8e  95  9b  9c  99  95  93  98  9f  a4  a3
9a  90  8b  00
[AVR] Data returned:
0x00 0x53 0x5a 0x60 0x64 0x65 0x66 0x6d 0x7a 0x87 0x8c 0x89 0x81 0x7b 0x7b 0x80
0x88 0x8d 0x8e 0x8a 0x87 0x84 0x82 0x80 0x7d 0x78 0x72 0x6a 0x63 0x60 0x60 0x61
0x63 0x66 0x6b 0x72 0x79 0x7e 0x82 0x83 0x82 0x81 0x80 0x80 0x80 0x80 0x82 0x84
0x88 0x8c 0x8f 0x90 0x8f 0x8c 0x88 0x84 0x81 0x7d 0x77 0x70 0x6c 0x6c 0x70 0x76
0x7d 0x82 0x86 0x86 0x86 0x86 0x89 0x8d 0x8e 0x89 0x81 0x7a 0x79 0x7c 0x83 0x8a
0x90 0x94 0x95 0x94 0x93 0x94 0x97 0x9a 0x9c 0x9a 0x91 0x87 0x83 0x86 0x8d 0x93
0x96 0x95 0x94 0x93 0x92 0x93 0x94 0x92 0x8c 0x84 0x7c 0x77 0x76 0x7a 0x7f 0x81
0x82 0x82 0x86 0x8e 0x95 0x9b 0x9c 0x99 0x95 0x93 0x98 0x9f 0xa4 0xa3 0x9a 0x90
0x8b 0x00
Reading | ################################                   | 63% 2.07 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0d00, 128)
avrdude: jtag3_paged_load(): block_size at addr 3328 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 85 (command_sequence == 85)

Raw message:
12  84  00  8c  8e  8e  88  7d  72  6c  6c  6d  6d  6d  6d  70
74  7a  7f  82  83  84  87  8d  93  95  91  8c  88  8a  8f  95
96  93  8b  83  7c  76  6f  68  62  5b  54  4c  46  45  4e  5d
6b  75  7c  80  83  87  8b  8d  8d  8b  87  85  86  8a  8e  8f
8c  89  85  80  7a  73  6b  60  56  50  50  56  5d  62  64  65
68  72  80  8b  8c  86  7e  7a  7d  83  8b  8e  8d  89  85  83
80  7e  7a  75  6f  67  62  60  60  62  64  68  6f  76  7c  80
83  83  82  81  80  80  80  81  83  86  89  8d  8f  90  8e  8a
86  83  80  00
[AVR] Data returned:
0x00 0x8c 0x8e 0x8e 0x88 0x7d 0x72 0x6c 0x6c 0x6d 0x6d 0x6d 0x6d 0x70 0x74 0x7a
0x7f 0x82 0x83 0x84 0x87 0x8d 0x93 0x95 0x91 0x8c 0x88 0x8a 0x8f 0x95 0x96 0x93
0x8b 0x83 0x7c 0x76 0x6f 0x68 0x62 0x5b 0x54 0x4c 0x46 0x45 0x4e 0x5d 0x6b 0x75
0x7c 0x80 0x83 0x87 0x8b 0x8d 0x8d 0x8b 0x87 0x85 0x86 0x8a 0x8e 0x8f 0x8c 0x89
0x85 0x80 0x7a 0x73 0x6b 0x60 0x56 0x50 0x50 0x56 0x5d 0x62 0x64 0x65 0x68 0x72
0x80 0x8b 0x8c 0x86 0x7e 0x7a 0x7d 0x83 0x8b 0x8e 0x8d 0x89 0x85 0x83 0x80 0x7e
0x7a 0x75 0x6f 0x67 0x62 0x60 0x60 0x62 0x64 0x68 0x6f 0x76 0x7c 0x80 0x83 0x83
0x82 0x81 0x80 0x80 0x80 0x81 0x83 0x86 0x89 0x8d 0x8f 0x90 0x8e 0x8a 0x86 0x83
0x80 0x00
Reading | #################################                  | 65% 2.15 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0d80, 128)
avrdude: jtag3_paged_load(): block_size at addr 3456 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 86 (command_sequence == 86)

Raw message:
12  84  00  7a  73  6d  6c  6e  73  79  7f  84  86  86  86  88
8b  8e  8c  85  7d  79  79  7f  86  8d  92  95  95  93  93  95
99  9c  9c  96  8b  84  84  89  90  95  96  94  93  92  93  94
93  8f  88  7f  79  76  78  7c  80  81  81  84  8a  91  98  9c
9b  97  94  95  9c  a2  a4  9f  95  8d  8b  8d  8e  8b  82  77
6e  6b  6c  6d  6c  6d  6e  72  77  7c  80  83  84  85  8a  90
94  93  8e  89  88  8d  93  97  96  90  87  7f  79  73  6c  65
5f  57  4f  48  44  49  56  66  72  79  7e  82  85  89  8c  8d
8c  88  85  00
[AVR] Data returned:
0x00 0x7a 0x73 0x6d 0x6c 0x6e 0x73 0x79 0x7f 0x84 0x86 0x86 0x86 0x88 0x8b 0x8e
0x8c 0x85 0x7d 0x79 0x79 0x7f 0x86 0x8d 0x92 0x95 0x95 0x93 0x93 0x95 0x99 0x9c
0x9c 0x96 0x8b 0x84 0x84 0x89 0x90 0x95 0x96 0x94 0x93 0x92 0x93 0x94 0x93 0x8f
0x88 0x7f 0x79 0x76 0x78 0x7c 0x80 0x81 0x81 0x84 0x8a 0x91 0x98 0x9c 0x9b 0x97
0x94 0x95 0x9c 0xa2 0xa4 0x9f 0x95 0x8d 0x8b 0x8d 0x8e 0x8b 0x82 0x77 0x6e 0x6b
0x6c 0x6d 0x6c 0x6d 0x6e 0x72 0x77 0x7c 0x80 0x83 0x84 0x85 0x8a 0x90 0x94 0x93
0x8e 0x89 0x88 0x8d 0x93 0x97 0x96 0x90 0x87 0x7f 0x79 0x73 0x6c 0x65 0x5f 0x57
0x4f 0x48 0x44 0x49 0x56 0x66 0x72 0x79 0x7e 0x82 0x85 0x89 0x8c 0x8d 0x8c 0x88
0x85 0x00
Reading | ##################################                 | 68% 2.23 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0e00, 128)
avrdude: jtag3_paged_load(): block_size at addr 3584 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 87 (command_sequence == 87)

Raw message:
12  84  00  85  89  8d  8f  8e  8a  86  82  7d  77  6f  64  5a
52  4f  53  5b  61  63  64  66  6d  7a  87  8d  89  81  7b  7b
80  88  8e  8e  8b  87  84  82  80  7d  78  72  6b  64  60  60
61  63  66  6c  73  79  7e  81  83  83  81  80  80  7f  80  82
84  88  8c  8f  90  8f  8c  88  84  81  7d  76  6f  6c  6c  70
77  7d  83  86  86  86  87  8a  8d  8e  88  80  79  77  7b  83
8c  92  96  96  95  93  95  99  9d  9e  99  8e  84  81  86  8e
94  95  94  92  92  93  94  94  90  89  80  7a  77  78  7c  80
81  82  83  00
[AVR] Data returned:
0x00 0x85 0x89 0x8d 0x8f 0x8e 0x8a 0x86 0x82 0x7d 0x77 0x6f 0x64 0x5a 0x52 0x4f
0x53 0x5b 0x61 0x63 0x64 0x66 0x6d 0x7a 0x87 0x8d 0x89 0x81 0x7b 0x7b 0x80 0x88
0x8e 0x8e 0x8b 0x87 0x84 0x82 0x80 0x7d 0x78 0x72 0x6b 0x64 0x60 0x60 0x61 0x63
0x66 0x6c 0x73 0x79 0x7e 0x81 0x83 0x83 0x81 0x80 0x80 0x7f 0x80 0x82 0x84 0x88
0x8c 0x8f 0x90 0x8f 0x8c 0x88 0x84 0x81 0x7d 0x76 0x6f 0x6c 0x6c 0x70 0x77 0x7d
0x83 0x86 0x86 0x86 0x87 0x8a 0x8d 0x8e 0x88 0x80 0x79 0x77 0x7b 0x83 0x8c 0x92
0x96 0x96 0x95 0x93 0x95 0x99 0x9d 0x9e 0x99 0x8e 0x84 0x81 0x86 0x8e 0x94 0x95
0x94 0x92 0x92 0x93 0x94 0x94 0x90 0x89 0x80 0x7a 0x77 0x78 0x7c 0x80 0x81 0x82
0x83 0x00
Reading | ###################################                | 70% 2.31 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0e80, 128)
avrdude: jtag3_paged_load(): block_size at addr 3712 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 88 (command_sequence == 88)

Raw message:
12  84  00  89  91  98  9b  9b  98  94  93  99  a0  a4  a1  99
8f  8b  8c  8e  8c  85  7a  6f  6b  6b  6d  6d  6d  6d  70  76
7c  81  84  85  85  87  8d  92  93  90  8a  87  8a  90  96  97
93  8a  81  7a  74  6e  67  61  5a  52  4a  45  47  52  61  6f
78  7d  81  84  88  8b  8c  8b  89  86  85  87  8b  8e  8e  8c
88  84  7f  79  71  68  5d  54  4f  51  58  5f  63  65  66  6a
75  83  8b  8a  83  7c  7a  7d  85  8c  8e  8c  88  85  83  81
7f  7a  74  6d  65  61  5f  61  63  65  6a  70  77  7d  81  83
83  82  80  00
[AVR] Data returned:
0x00 0x89 0x91 0x98 0x9b 0x9b 0x98 0x94 0x93 0x99 0xa0 0xa4 0xa1 0x99 0x8f 0x8b
0x8c 0x8e 0x8c 0x85 0x7a 0x6f 0x6b 0x6b 0x6d 0x6d 0x6d 0x6d 0x70 0x76 0x7c 0x81
0x84 0x85 0x85 0x87 0x8d 0x92 0x93 0x90 0x8a 0x87 0x8a 0x90 0x96 0x97 0x93 0x8a
0x81 0x7a 0x74 0x6e 0x67 0x61 0x5a 0x52 0x4a 0x45 0x47 0x52 0x61 0x6f 0x78 0x7d
0x81 0x84 0x88 0x8b 0x8c 0x8b 0x89 0x86 0x85 0x87 0x8b 0x8e 0x8e 0x8c 0x88 0x84
0x7f 0x79 0x71 0x68 0x5d 0x54 0x4f 0x51 0x58 0x5f 0x63 0x65 0x66 0x6a 0x75 0x83
0x8b 0x8a 0x83 0x7c 0x7a 0x7d 0x85 0x8c 0x8e 0x8c 0x88 0x85 0x83 0x81 0x7f 0x7a
0x74 0x6d 0x65 0x61 0x5f 0x61 0x63 0x65 0x6a 0x70 0x77 0x7d 0x81 0x83 0x83 0x82
0x80 0x00
Reading | #####################################              | 73% 2.39 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0f00, 128)
avrdude: jtag3_paged_load(): block_size at addr 3840 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 89 (command_sequence == 89)

Raw message:
12  84  00  7f  7f  7f  81  83  86  8a  8e  90  90  8e  8a  86
82  7f  79  72  6d  6c  6e  74  7b  81  85  87  86  86  88  8c
8e  8a  83  7b  77  79  80  89  90  95  97  96  94  94  97  9b
9e  9b  92  87  81  83  8b  92  95  94  93  92  93  94  94  92
8c  84  7c  78  77  7a  7f  81  82  83  87  8e  96  9b  9c  99
95  93  96  9d  a3  a3  9c  92  8c  8c  8e  8e  89  7e  73  6c
6b  6d  6d  6d  6d  6f  73  7a  80  84  85  85  86  8b  91  94
92  8c  87  88  8d  93  96  95  8f  86  7f  78  72  6a  63  5d
56  4f  47  00
[AVR] Data returned:
0x00 0x7f 0x7f 0x7f 0x81 0x83 0x86 0x8a 0x8e 0x90 0x90 0x8e 0x8a 0x86 0x82 0x7f
0x79 0x72 0x6d 0x6c 0x6e 0x74 0x7b 0x81 0x85 0x87 0x86 0x86 0x88 0x8c 0x8e 0x8a
0x83 0x7b 0x77 0x79 0x80 0x89 0x90 0x95 0x97 0x96 0x94 0x94 0x97 0x9b 0x9e 0x9b
0x92 0x87 0x81 0x83 0x8b 0x92 0x95 0x94 0x93 0x92 0x93 0x94 0x94 0x92 0x8c 0x84
0x7c 0x78 0x77 0x7a 0x7f 0x81 0x82 0x83 0x87 0x8e 0x96 0x9b 0x9c 0x99 0x95 0x93
0x96 0x9d 0xa3 0xa3 0x9c 0x92 0x8c 0x8c 0x8e 0x8e 0x89 0x7e 0x73 0x6c 0x6b 0x6d
0x6d 0x6d 0x6d 0x6f 0x73 0x7a 0x80 0x84 0x85 0x85 0x86 0x8b 0x91 0x94 0x92 0x8c
0x87 0x88 0x8d 0x93 0x96 0x95 0x8f 0x86 0x7f 0x78 0x72 0x6a 0x63 0x5d 0x56 0x4f
0x47 0x00
Reading | ######################################             | 75% 2.46 s
avrdude: jtag3_paged_load(.., flash, 128, 0x0f80, 128)
avrdude: jtag3_paged_load(): block_size at addr 3968 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 90 (command_sequence == 90)

Raw message:
12  84  00  44  4a  58  68  74  7c  80  83  86  89  8c  8d  8b
88  84  84  87  8c  8f  8e  8b  87  82  7c  75  6e  64  5a  52
4f  53  5a  61  64  66  68  6f  7b  87  8b  87  7f  7a  7a  7f
87  8d  8d  8a  87  85  83  80  7d  78  71  69  63  60  60  61
63  66  6b  73  7a  7f  82  83  82  81  80  7f  7f  80  81  84
87  8b  8f  90  8f  8c  88  85  82  7d  77  6f  6c  6d  70  77
7d  83  86  86  85  87  8a  8d  8d  88  7f  79  79  7d  84  8c
92  96  96  95  94  95  99  9d  9e  99  8e  84  82  86  8e  93
95  94  93  00
[AVR] Data returned:
0x00 0x44 0x4a 0x58 0x68 0x74 0x7c 0x80 0x83 0x86 0x89 0x8c 0x8d 0x8b 0x88 0x84
0x84 0x87 0x8c 0x8f 0x8e 0x8b 0x87 0x82 0x7c 0x75 0x6e 0x64 0x5a 0x52 0x4f 0x53
0x5a 0x61 0x64 0x66 0x68 0x6f 0x7b 0x87 0x8b 0x87 0x7f 0x7a 0x7a 0x7f 0x87 0x8d
0x8d 0x8a 0x87 0x85 0x83 0x80 0x7d 0x78 0x71 0x69 0x63 0x60 0x60 0x61 0x63 0x66
0x6b 0x73 0x7a 0x7f 0x82 0x83 0x82 0x81 0x80 0x7f 0x7f 0x80 0x81 0x84 0x87 0x8b
0x8f 0x90 0x8f 0x8c 0x88 0x85 0x82 0x7d 0x77 0x6f 0x6c 0x6d 0x70 0x77 0x7d 0x83
0x86 0x86 0x85 0x87 0x8a 0x8d 0x8d 0x88 0x7f 0x79 0x79 0x7d 0x84 0x8c 0x92 0x96
0x96 0x95 0x94 0x95 0x99 0x9d 0x9e 0x99 0x8e 0x84 0x82 0x86 0x8e 0x93 0x95 0x94
0x93 0x00
Reading | #######################################            | 78% 2.54 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1000, 128)
avrdude: jtag3_paged_load(): block_size at addr 4096 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 91 (command_sequence == 91)

Raw message:
12  84  00  92  93  94  94  91  8a  81  7b  77  77  7b  7f  82
82  84  89  91  98  9c  9c  98  94  94  99  a0  a4  a0  97  8e
8b  8d  8f  8d  85  7a  70  6b  6c  6d  6d  6d  6e  71  76  7c
81  84  85  85  89  8e  93  94  90  8a  87  8a  90  95  96  92
8b  82  7c  76  6f  67  61  5a  53  4b  45  46  51  60  6e  77
7d  81  84  87  8b  8d  8c  89  86  84  86  8b  8e  8f  8c  89
84  7f  79  72  69  5f  55  50  51  57  5e  62  64  65  6a  74
82  8a  8a  83  7c  7a  7d  84  8b  8e  8c  89  86  83  81  7e
7a  74  6e  00
[AVR] Data returned:
0x00 0x92 0x93 0x94 0x94 0x91 0x8a 0x81 0x7b 0x77 0x77 0x7b 0x7f 0x82 0x82 0x84
0x89 0x91 0x98 0x9c 0x9c 0x98 0x94 0x94 0x99 0xa0 0xa4 0xa0 0x97 0x8e 0x8b 0x8d
0x8f 0x8d 0x85 0x7a 0x70 0x6b 0x6c 0x6d 0x6d 0x6d 0x6e 0x71 0x76 0x7c 0x81 0x84
0x85 0x85 0x89 0x8e 0x93 0x94 0x90 0x8a 0x87 0x8a 0x90 0x95 0x96 0x92 0x8b 0x82
0x7c 0x76 0x6f 0x67 0x61 0x5a 0x53 0x4b 0x45 0x46 0x51 0x60 0x6e 0x77 0x7d 0x81
0x84 0x87 0x8b 0x8d 0x8c 0x89 0x86 0x84 0x86 0x8b 0x8e 0x8f 0x8c 0x89 0x84 0x7f
0x79 0x72 0x69 0x5f 0x55 0x50 0x51 0x57 0x5e 0x62 0x64 0x65 0x6a 0x74 0x82 0x8a
0x8a 0x83 0x7c 0x7a 0x7d 0x84 0x8b 0x8e 0x8c 0x89 0x86 0x83 0x81 0x7e 0x7a 0x74
0x6e 0x00
Reading | ########################################           | 80% 2.62 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1080, 128)
avrdude: jtag3_paged_load(): block_size at addr 4224 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 92 (command_sequence == 92)

Raw message:
12  84  00  66  61  60  60  62  65  69  70  77  7c  80  82  82
81  80  7f  7f  7f  81  83  86  89  8d  8f  8f  8d  8a  86  82
7f  79  72  6d  6c  6f  74  7a  81  85  86  85  86  88  8b  8e
8b  83  7b  78  7a  80  89  90  95  96  96  94  94  97  9c  9e
9c  93  87  0c  94  00  00  cf  92  df  92  ef  92  ff  92  0f
93  1f  93  cf  93  df  93  ec  01  89  2b  09  f4  44  c0  0a
81  1b  81  01  15  11  05  09  f4  3e  c0  28  81  39  81  20
ff  3a  c0  21  30  31  05  b9  f1  78  01  c1  2c  d1  2c  d7
01  1d  92  00
[AVR] Data returned:
0x00 0x66 0x61 0x60 0x60 0x62 0x65 0x69 0x70 0x77 0x7c 0x80 0x82 0x82 0x81 0x80
0x7f 0x7f 0x7f 0x81 0x83 0x86 0x89 0x8d 0x8f 0x8f 0x8d 0x8a 0x86 0x82 0x7f 0x79
0x72 0x6d 0x6c 0x6f 0x74 0x7a 0x81 0x85 0x86 0x85 0x86 0x88 0x8b 0x8e 0x8b 0x83
0x7b 0x78 0x7a 0x80 0x89 0x90 0x95 0x96 0x96 0x94 0x94 0x97 0x9c 0x9e 0x9c 0x93
0x87 0x0c 0x94 0x00 0x00 0xcf 0x92 0xdf 0x92 0xef 0x92 0xff 0x92 0x0f 0x93 0x1f
0x93 0xcf 0x93 0xdf 0x93 0xec 0x01 0x89 0x2b 0x09 0xf4 0x44 0xc0 0x0a 0x81 0x1b
0x81 0x01 0x15 0x11 0x05 0x09 0xf4 0x3e 0xc0 0x28 0x81 0x39 0x81 0x20 0xff 0x3a
0xc0 0x21 0x30 0x31 0x05 0xb9 0xf1 0x78 0x01 0xc1 0x2c 0xd1 0x2c 0xd7 0x01 0x1d
0x92 0x00
Reading | #########################################          | 82% 2.69 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1100, 128)
avrdude: jtag3_paged_load(): block_size at addr 4352 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 93 (command_sequence == 93)

Raw message:
12  84  00  1c  92  bf  ef  cb  1a  db  0a  c6  01  b9  01  36
d0  fc  01  43  e0  ee  0f  ff  1f  4a  95  e1  f7  e0  0f  f1
1f  d7  01  12  96  ed  93  fc  93  13  97  14  96  ed  93  fc
93  15  97  e6  82  f7  82  b8  e0  eb  0e  f1  1c  c2  16  d3
06  f0  f2  0c  83  1d  83  0e  83  1f  83  36  95  27  95  93
e0  22  0f  33  1f  9a  95  e1  f7  20  0f  31  1f  28  87  39
87  80  e0  90  e0  02  c0  8f  ef  9f  ef  df  91  cf  91  1f
91  0f  91  ff  90  ef  90  df  90  cf  90  08  95  aa  1b  bb
1b  51  e1  00
[AVR] Data returned:
0x00 0x1c 0x92 0xbf 0xef 0xcb 0x1a 0xdb 0x0a 0xc6 0x01 0xb9 0x01 0x36 0xd0 0xfc
0x01 0x43 0xe0 0xee 0x0f 0xff 0x1f 0x4a 0x95 0xe1 0xf7 0xe0 0x0f 0xf1 0x1f 0xd7
0x01 0x12 0x96 0xed 0x93 0xfc 0x93 0x13 0x97 0x14 0x96 0xed 0x93 0xfc 0x93 0x15
0x97 0xe6 0x82 0xf7 0x82 0xb8 0xe0 0xeb 0x0e 0xf1 0x1c 0xc2 0x16 0xd3 0x06 0xf0
0xf2 0x0c 0x83 0x1d 0x83 0x0e 0x83 0x1f 0x83 0x36 0x95 0x27 0x95 0x93 0xe0 0x22
0x0f 0x33 0x1f 0x9a 0x95 0xe1 0xf7 0x20 0x0f 0x31 0x1f 0x28 0x87 0x39 0x87 0x80
0xe0 0x90 0xe0 0x02 0xc0 0x8f 0xef 0x9f 0xef 0xdf 0x91 0xcf 0x91 0x1f 0x91 0x0f
0x91 0xff 0x90 0xef 0x90 0xdf 0x90 0xcf 0x90 0x08 0x95 0xaa 0x1b 0xbb 0x1b 0x51
0xe1 0x00
Reading | ###########################################        | 85% 2.77 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1180, 128)
avrdude: jtag3_paged_load(): block_size at addr 4480 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 94 (command_sequence == 94)

Raw message:
12  84  00  07  c0  aa  1f  bb  1f  a6  17  b7  07  10  f0  a6
1b  b7  0b  88  1f  99  1f  5a  95  a9  f7  80  95  90  95  bc
01  cd  01  08  95  ef  92  ff  92  0f  93  1f  93  cf  93  df
93  dc  01  14  96  ed  91  fc  91  15  97  16  96  8d  91  9c
91  17  97  04  81  15  81  e8  17  f9  07  21  f4  16  96  0d
93  1c  93  17  97  18  96  8d  91  9c  91  19  97  e8  17  f9
07  41  f0  40  81  51  81  ec  01  28  81  39  81  24  17  35
07  3c  f4  ec  01  8e  81  9f  81  18  96  8d  93  9c  93  19
97  60  83  00
[AVR] Data returned:
0x00 0x07 0xc0 0xaa 0x1f 0xbb 0x1f 0xa6 0x17 0xb7 0x07 0x10 0xf0 0xa6 0x1b 0xb7
0x0b 0x88 0x1f 0x99 0x1f 0x5a 0x95 0xa9 0xf7 0x80 0x95 0x90 0x95 0xbc 0x01 0xcd
0x01 0x08 0x95 0xef 0x92 0xff 0x92 0x0f 0x93 0x1f 0x93 0xcf 0x93 0xdf 0x93 0xdc
0x01 0x14 0x96 0xed 0x91 0xfc 0x91 0x15 0x97 0x16 0x96 0x8d 0x91 0x9c 0x91 0x17
0x97 0x04 0x81 0x15 0x81 0xe8 0x17 0xf9 0x07 0x21 0xf4 0x16 0x96 0x0d 0x93 0x1c
0x93 0x17 0x97 0x18 0x96 0x8d 0x91 0x9c 0x91 0x19 0x97 0xe8 0x17 0xf9 0x07 0x41
0xf0 0x40 0x81 0x51 0x81 0xec 0x01 0x28 0x81 0x39 0x81 0x24 0x17 0x35 0x07 0x3c
0xf4 0xec 0x01 0x8e 0x81 0x9f 0x81 0x18 0x96 0x8d 0x93 0x9c 0x93 0x19 0x97 0x60
0x83 0x00
Reading | ############################################       | 87% 2.85 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1200, 128)
avrdude: jtag3_paged_load(): block_size at addr 4608 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 95 (command_sequence == 95)

Raw message:
12  84  00  71  83  86  81  97  81  e8  01  8e  83  9f  83  86
81  97  81  ec  01  0c  83  1d  83  82  81  93  81  14  96  8d
93  9c  93  15  97  16  96  ed  90  fc  90  17  97  2d  91  3c
91  11  97  a9  01  41  50  51  09  80  e0  90  e0  84  17  95
07  90  f4  e7  01  08  81  19  81  60  17  71  07  3c  f4  00
97  51  f4  16  96  ed  93  fc  93  17  97  05  c0  e7  01  ec
80  fd  80  01  96  eb  cf  e7  01  4e  81  5f  81  ea  01  ec
83  fd  83  46  83  57  83  e7  01  ee  83  ff  83  e4  82  f5
82  36  95  00
[AVR] Data returned:
0x00 0x71 0x83 0x86 0x81 0x97 0x81 0xe8 0x01 0x8e 0x83 0x9f 0x83 0x86 0x81 0x97
0x81 0xec 0x01 0x0c 0x83 0x1d 0x83 0x82 0x81 0x93 0x81 0x14 0x96 0x8d 0x93 0x9c
0x93 0x15 0x97 0x16 0x96 0xed 0x90 0xfc 0x90 0x17 0x97 0x2d 0x91 0x3c 0x91 0x11
0x97 0xa9 0x01 0x41 0x50 0x51 0x09 0x80 0xe0 0x90 0xe0 0x84 0x17 0x95 0x07 0x90
0xf4 0xe7 0x01 0x08 0x81 0x19 0x81 0x60 0x17 0x71 0x07 0x3c 0xf4 0x00 0x97 0x51
0xf4 0x16 0x96 0xed 0x93 0xfc 0x93 0x17 0x97 0x05 0xc0 0xe7 0x01 0xec 0x80 0xfd
0x80 0x01 0x96 0xeb 0xcf 0xe7 0x01 0x4e 0x81 0x5f 0x81 0xea 0x01 0xec 0x83 0xfd
0x83 0x46 0x83 0x57 0x83 0xe7 0x01 0xee 0x83 0xff 0x83 0xe4 0x82 0xf5 0x82 0x36
0x95 0x00
Reading | #############################################      | 90% 2.92 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1280, 128)
avrdude: jtag3_paged_load(): block_size at addr 4736 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 96 (command_sequence == 96)

Raw message:
12  84  00  27  95  82  17  93  07  50  f0  18  96  ed  91  fc
91  19  97  84  81  95  81  18  96  8d  93  9c  93  19  97  18
96  ed  91  fc  91  19  97  80  81  91  81  df  91  cf  91  1f
91  0f  91  ff  90  ef  90  08  95  cf  93  df  93  00  d0  00
d0  cd  b7  de  b7  68  d0  36  d0  80  e4  80  93  61  04  1b
82  1c  82  19  82  1a  82  e8  ef  f8  e6  8f  e1  90  e0  80
83  91  83  80  e0  98  e6  82  83  93  83  cf  01  ec  de  e0
e0  10  e4  01  e0  0e  0f  f0  e0  e0  5e  fe  47  80  81  90
e0  8b  83  00
[AVR] Data returned:
0x00 0x27 0x95 0x82 0x17 0x93 0x07 0x50 0xf0 0x18 0x96 0xed 0x91 0xfc 0x91 0x19
0x97 0x84 0x81 0x95 0x81 0x18 0x96 0x8d 0x93 0x9c 0x93 0x19 0x97 0x18 0x96 0xed
0x91 0xfc 0x91 0x19 0x97 0x80 0x81 0x91 0x81 0xdf 0x91 0xcf 0x91 0x1f 0x91 0x0f
0x91 0xff 0x90 0xef 0x90 0x08 0x95 0xcf 0x93 0xdf 0x93 0x00 0xd0 0x00 0xd0 0xcd
0xb7 0xde 0xb7 0x68 0xd0 0x36 0xd0 0x80 0xe4 0x80 0x93 0x61 0x04 0x1b 0x82 0x1c
0x82 0x19 0x82 0x1a 0x82 0xe8 0xef 0xf8 0xe6 0x8f 0xe1 0x90 0xe0 0x80 0x83 0x91
0x83 0x80 0xe0 0x98 0xe6 0x82 0x83 0x93 0x83 0xcf 0x01 0xec 0xde 0xe0 0xe0 0x10
0xe4 0x01 0xe0 0x0e 0x0f 0xf0 0xe0 0xe0 0x5e 0xfe 0x47 0x80 0x81 0x90 0xe0 0x8b
0x83 0x00
Reading | ##############################################     | 92% 3.01 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1300, 128)
avrdude: jtag3_paged_load(): block_size at addr 4864 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 97 (command_sequence == 97)

Raw message:
12  84  00  9c  83  8f  e4  93  ec  01  97  f1  f7  00  c0  00
00  10  93  65  04  6b  81  7c  81  88  ef  98  e6  43  df  89
83  9a  83  10  93  66  04  69  81  7a  81  8b  81  9c  81  10
d0  e0  2f  df  cf  81  e0  80  93  41  04  e0  e2  f8  e0  85
e4  90  e0  80  87  91  87  80  e4  86  83  83  e0  87  83  08
95  cf  93  df  93  00  d0  00  d0  cd  b7  de  b7  89  83  9a
83  6b  83  7c  83  31  d0  88  23  e9  f3  83  e0  1b  d0  ce
01  01  96  1b  d0  ce  01  03  96  18  d0  26  d0  88  23  e9
f3  8c  ef  00
[AVR] Data returned:
0x00 0x9c 0x83 0x8f 0xe4 0x93 0xec 0x01 0x97 0xf1 0xf7 0x00 0xc0 0x00 0x00 0x10
0x93 0x65 0x04 0x6b 0x81 0x7c 0x81 0x88 0xef 0x98 0xe6 0x43 0xdf 0x89 0x83 0x9a
0x83 0x10 0x93 0x66 0x04 0x69 0x81 0x7a 0x81 0x8b 0x81 0x9c 0x81 0x10 0xd0 0xe0
0x2f 0xdf 0xcf 0x81 0xe0 0x80 0x93 0x41 0x04 0xe0 0xe2 0xf8 0xe0 0x85 0xe4 0x90
0xe0 0x80 0x87 0x91 0x87 0x80 0xe4 0x86 0x83 0x83 0xe0 0x87 0x83 0x08 0x95 0xcf
0x93 0xdf 0x93 0x00 0xd0 0x00 0xd0 0xcd 0xb7 0xde 0xb7 0x89 0x83 0x9a 0x83 0x6b
0x83 0x7c 0x83 0x31 0xd0 0x88 0x23 0xe9 0xf3 0x83 0xe0 0x1b 0xd0 0xce 0x01 0x01
0x96 0x1b 0xd0 0xce 0x01 0x03 0x96 0x18 0xd0 0x26 0xd0 0x88 0x23 0xe9 0xf3 0x8c
0xef 0x00
Reading | ################################################   | 95% 3.09 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1380, 128)
avrdude: jtag3_paged_load(): block_size at addr 4992 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 98 (command_sequence == 98)

Raw message:
12  84  00  10  d0  27  d0  88  23  e9  f3  24  96  cd  bf  de
bf  df  91  cf  91  08  95  60  91  61  00  61  7e  62  61  81
e6  90  e0  1e  c0  80  93  22  08  08  95  cf  93  df  93  ec
01  0b  d0  88  23  e9  f3  88  81  f5  df  06  d0  88  23  e9
f3  89  81  df  91  cf  91  ee  cf  80  91  24  08  85  fb  88
27  80  f9  08  95  80  91  24  08  86  fb  88  27  80  f9  08
95  dc  01  28  ed  20  93  34  00  6c  93  08  95  08  95  08
95  08  95  ec  01  fc  df  fa  df  ce  01  fa  df  ce  01  00
d0  0e  94  00
[AVR] Data returned:
0x00 0x10 0xd0 0x27 0xd0 0x88 0x23 0xe9 0xf3 0x24 0x96 0xcd 0xbf 0xde 0xbf 0xdf
0x91 0xcf 0x91 0x08 0x95 0x60 0x91 0x61 0x00 0x61 0x7e 0x62 0x61 0x81 0xe6 0x90
0xe0 0x1e 0xc0 0x80 0x93 0x22 0x08 0x08 0x95 0xcf 0x93 0xdf 0x93 0xec 0x01 0x0b
0xd0 0x88 0x23 0xe9 0xf3 0x88 0x81 0xf5 0xdf 0x06 0xd0 0x88 0x23 0xe9 0xf3 0x89
0x81 0xdf 0x91 0xcf 0x91 0xee 0xcf 0x80 0x91 0x24 0x08 0x85 0xfb 0x88 0x27 0x80
0xf9 0x08 0x95 0x80 0x91 0x24 0x08 0x86 0xfb 0x88 0x27 0x80 0xf9 0x08 0x95 0xdc
0x01 0x28 0xed 0x20 0x93 0x34 0x00 0x6c 0x93 0x08 0x95 0x08 0x95 0x08 0x95 0x08
0x95 0xec 0x01 0xfc 0xdf 0xfa 0xdf 0xce 0x01 0xfa 0xdf 0xce 0x01 0x00 0xd0 0x0e
0x94 0x00
Reading | #################################################  | 97% 3.16 s
avrdude: jtag3_paged_load(.., flash, 128, 0x1400, 128)
avrdude: jtag3_paged_load(): block_size at addr 5120 is 128
avrdude: sending read memory command:
avrdude: jtag3_edbg_send(): sending 12 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 99 (command_sequence == 99)

Raw message:
12  84  00  8e  00  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff  ff
ff  ff  ff  00
[AVR] Data returned:
0x00 0x8e 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff 0x00
Reading | ################################################## | 100% 3.24 s
avrdude: avr_read_mem(): skipping page 41: no interesting data
avrdude: avr_read_mem(): skipping page 42: no interesting data
avrdude: avr_read_mem(): skipping page 43: no interesting data
avrdude: avr_read_mem(): skipping page 44: no interesting data
avrdude: avr_read_mem(): skipping page 45: no interesting data
avrdude: avr_read_mem(): skipping page 46: no interesting data
avrdude: avr_read_mem(): skipping page 47: no interesting data
avrdude: avr_read_mem(): skipping page 48: no interesting data
avrdude: avr_read_mem(): skipping page 49: no interesting data
avrdude: avr_read_mem(): skipping page 50: no interesting data
avrdude: avr_read_mem(): skipping page 51: no interesting data
avrdude: avr_read_mem(): skipping page 52: no interesting data
avrdude: avr_read_mem(): skipping page 53: no interesting data
avrdude: avr_read_mem(): skipping page 54: no interesting data
avrdude: avr_read_mem(): skipping page 55: no interesting data
avrdude: avr_read_mem(): skipping page 56: no interesting data
avrdude: avr_read_mem(): skipping page 57: no interesting data
avrdude: avr_read_mem(): skipping page 58: no interesting data
avrdude: avr_read_mem(): skipping page 59: no interesting data
avrdude: avr_read_mem(): skipping page 60: no interesting data
avrdude: avr_read_mem(): skipping page 61: no interesting data
avrdude: avr_read_mem(): skipping page 62: no interesting data
avrdude: avr_read_mem(): skipping page 63: no interesting data
avrdude: avr_read_mem(): skipping page 64: no interesting data
avrdude: avr_read_mem(): skipping page 65: no interesting data
avrdude: avr_read_mem(): skipping page 66: no interesting data
avrdude: avr_read_mem(): skipping page 67: no interesting data
avrdude: avr_read_mem(): skipping page 68: no interesting data
avrdude: avr_read_mem(): skipping page 69: no interesting data
avrdude: avr_read_mem(): skipping page 70: no interesting data
avrdude: avr_read_mem(): skipping page 71: no interesting data
avrdude: avr_read_mem(): skipping page 72: no interesting data
avrdude: avr_read_mem(): skipping page 73: no interesting data
avrdude: avr_read_mem(): skipping page 74: no interesting data
avrdude: avr_read_mem(): skipping page 75: no interesting data
avrdude: avr_read_mem(): skipping page 76: no interesting data
avrdude: avr_read_mem(): skipping page 77: no interesting data
avrdude: avr_read_mem(): skipping page 78: no interesting data
avrdude: avr_read_mem(): skipping page 79: no interesting data
avrdude: avr_read_mem(): skipping page 80: no interesting data
avrdude: avr_read_mem(): skipping page 81: no interesting data
avrdude: avr_read_mem(): skipping page 82: no interesting data
avrdude: avr_read_mem(): skipping page 83: no interesting data
avrdude: avr_read_mem(): skipping page 84: no interesting data
avrdude: avr_read_mem(): skipping page 85: no interesting data
avrdude: avr_read_mem(): skipping page 86: no interesting data
avrdude: avr_read_mem(): skipping page 87: no interesting data
avrdude: avr_read_mem(): skipping page 88: no interesting data
avrdude: avr_read_mem(): skipping page 89: no interesting data
avrdude: avr_read_mem(): skipping page 90: no interesting data
avrdude: avr_read_mem(): skipping page 91: no interesting data
avrdude: avr_read_mem(): skipping page 92: no interesting data
avrdude: avr_read_mem(): skipping page 93: no interesting data
avrdude: avr_read_mem(): skipping page 94: no interesting data
avrdude: avr_read_mem(): skipping page 95: no interesting data
avrdude: avr_read_mem(): skipping page 96: no interesting data
avrdude: avr_read_mem(): skipping page 97: no interesting data
avrdude: avr_read_mem(): skipping page 98: no interesting data
avrdude: avr_read_mem(): skipping page 99: no interesting data
avrdude: avr_read_mem(): skipping page 100: no interesting data
avrdude: avr_read_mem(): skipping page 101: no interesting data
avrdude: avr_read_mem(): skipping page 102: no interesting data
avrdude: avr_read_mem(): skipping page 103: no interesting data
avrdude: avr_read_mem(): skipping page 104: no interesting data
avrdude: avr_read_mem(): skipping page 105: no interesting data
avrdude: avr_read_mem(): skipping page 106: no interesting data
avrdude: avr_read_mem(): skipping page 107: no interesting data
avrdude: avr_read_mem(): skipping page 108: no interesting data
avrdude: avr_read_mem(): skipping page 109: no interesting data
avrdude: avr_read_mem(): skipping page 110: no interesting data
avrdude: avr_read_mem(): skipping page 111: no interesting data
avrdude: avr_read_mem(): skipping page 112: no interesting data
avrdude: avr_read_mem(): skipping page 113: no interesting data
avrdude: avr_read_mem(): skipping page 114: no interesting data
avrdude: avr_read_mem(): skipping page 115: no interesting data
avrdude: avr_read_mem(): skipping page 116: no interesting data
avrdude: avr_read_mem(): skipping page 117: no interesting data
avrdude: avr_read_mem(): skipping page 118: no interesting data
avrdude: avr_read_mem(): skipping page 119: no interesting data
avrdude: avr_read_mem(): skipping page 120: no interesting data
avrdude: avr_read_mem(): skipping page 121: no interesting data
avrdude: avr_read_mem(): skipping page 122: no interesting data
avrdude: avr_read_mem(): skipping page 123: no interesting data
avrdude: avr_read_mem(): skipping page 124: no interesting data
avrdude: avr_read_mem(): skipping page 125: no interesting data
avrdude: avr_read_mem(): skipping page 126: no interesting data
avrdude: avr_read_mem(): skipping page 127: no interesting data
avrdude: avr_read_mem(): skipping page 128: no interesting data
avrdude: avr_read_mem(): skipping page 129: no interesting data
avrdude: avr_read_mem(): skipping page 130: no interesting data
avrdude: avr_read_mem(): skipping page 131: no interesting data
avrdude: avr_read_mem(): skipping page 132: no interesting data
avrdude: avr_read_mem(): skipping page 133: no interesting data
avrdude: avr_read_mem(): skipping page 134: no interesting data
avrdude: avr_read_mem(): skipping page 135: no interesting data
avrdude: avr_read_mem(): skipping page 136: no interesting data
avrdude: avr_read_mem(): skipping page 137: no interesting data
avrdude: avr_read_mem(): skipping page 138: no interesting data
avrdude: avr_read_mem(): skipping page 139: no interesting data
avrdude: avr_read_mem(): skipping page 140: no interesting data
avrdude: avr_read_mem(): skipping page 141: no interesting data
avrdude: avr_read_mem(): skipping page 142: no interesting data
avrdude: avr_read_mem(): skipping page 143: no interesting data
avrdude: avr_read_mem(): skipping page 144: no interesting data
avrdude: avr_read_mem(): skipping page 145: no interesting data
avrdude: avr_read_mem(): skipping page 146: no interesting data
avrdude: avr_read_mem(): skipping page 147: no interesting data
avrdude: avr_read_mem(): skipping page 148: no interesting data
avrdude: avr_read_mem(): skipping page 149: no interesting data
avrdude: avr_read_mem(): skipping page 150: no interesting data
avrdude: avr_read_mem(): skipping page 151: no interesting data
avrdude: avr_read_mem(): skipping page 152: no interesting data
avrdude: avr_read_mem(): skipping page 153: no interesting data
avrdude: avr_read_mem(): skipping page 154: no interesting data
avrdude: avr_read_mem(): skipping page 155: no interesting data
avrdude: avr_read_mem(): skipping page 156: no interesting data
avrdude: avr_read_mem(): skipping page 157: no interesting data
avrdude: avr_read_mem(): skipping page 158: no interesting data
avrdude: avr_read_mem(): skipping page 159: no interesting data
avrdude: avr_read_mem(): skipping page 160: no interesting data
avrdude: avr_read_mem(): skipping page 161: no interesting data
avrdude: avr_read_mem(): skipping page 162: no interesting data
avrdude: avr_read_mem(): skipping page 163: no interesting data
avrdude: avr_read_mem(): skipping page 164: no interesting data
avrdude: avr_read_mem(): skipping page 165: no interesting data
avrdude: avr_read_mem(): skipping page 166: no interesting data
avrdude: avr_read_mem(): skipping page 167: no interesting data
avrdude: avr_read_mem(): skipping page 168: no interesting data
avrdude: avr_read_mem(): skipping page 169: no interesting data
avrdude: avr_read_mem(): skipping page 170: no interesting data
avrdude: avr_read_mem(): skipping page 171: no interesting data
avrdude: avr_read_mem(): skipping page 172: no interesting data
avrdude: avr_read_mem(): skipping page 173: no interesting data
avrdude: avr_read_mem(): skipping page 174: no interesting data
avrdude: avr_read_mem(): skipping page 175: no interesting data
avrdude: avr_read_mem(): skipping page 176: no interesting data
avrdude: avr_read_mem(): skipping page 177: no interesting data
avrdude: avr_read_mem(): skipping page 178: no interesting data
avrdude: avr_read_mem(): skipping page 179: no interesting data
avrdude: avr_read_mem(): skipping page 180: no interesting data
avrdude: avr_read_mem(): skipping page 181: no interesting data
avrdude: avr_read_mem(): skipping page 182: no interesting data
avrdude: avr_read_mem(): skipping page 183: no interesting data
avrdude: avr_read_mem(): skipping page 184: no interesting data
avrdude: avr_read_mem(): skipping page 185: no interesting data
avrdude: avr_read_mem(): skipping page 186: no interesting data
avrdude: avr_read_mem(): skipping page 187: no interesting data
avrdude: avr_read_mem(): skipping page 188: no interesting data
avrdude: avr_read_mem(): skipping page 189: no interesting data
avrdude: avr_read_mem(): skipping page 190: no interesting data
avrdude: avr_read_mem(): skipping page 191: no interesting data
avrdude: avr_read_mem(): skipping page 192: no interesting data
avrdude: avr_read_mem(): skipping page 193: no interesting data
avrdude: avr_read_mem(): skipping page 194: no interesting data
avrdude: avr_read_mem(): skipping page 195: no interesting data
avrdude: avr_read_mem(): skipping page 196: no interesting data
avrdude: avr_read_mem(): skipping page 197: no interesting data
avrdude: avr_read_mem(): skipping page 198: no interesting data
avrdude: avr_read_mem(): skipping page 199: no interesting data
avrdude: avr_read_mem(): skipping page 200: no interesting data
avrdude: avr_read_mem(): skipping page 201: no interesting data
avrdude: avr_read_mem(): skipping page 202: no interesting data
avrdude: avr_read_mem(): skipping page 203: no interesting data
avrdude: avr_read_mem(): skipping page 204: no interesting data
avrdude: avr_read_mem(): skipping page 205: no interesting data
avrdude: avr_read_mem(): skipping page 206: no interesting data
avrdude: avr_read_mem(): skipping page 207: no interesting data
avrdude: avr_read_mem(): skipping page 208: no interesting data
avrdude: avr_read_mem(): skipping page 209: no interesting data
avrdude: avr_read_mem(): skipping page 210: no interesting data
avrdude: avr_read_mem(): skipping page 211: no interesting data
avrdude: avr_read_mem(): skipping page 212: no interesting data
avrdude: avr_read_mem(): skipping page 213: no interesting data
avrdude: avr_read_mem(): skipping page 214: no interesting data
avrdude: avr_read_mem(): skipping page 215: no interesting data
avrdude: avr_read_mem(): skipping page 216: no interesting data
avrdude: avr_read_mem(): skipping page 217: no interesting data
avrdude: avr_read_mem(): skipping page 218: no interesting data
avrdude: avr_read_mem(): skipping page 219: no interesting data
avrdude: avr_read_mem(): skipping page 220: no interesting data
avrdude: avr_read_mem(): skipping page 221: no interesting data
avrdude: avr_read_mem(): skipping page 222: no interesting data
avrdude: avr_read_mem(): skipping page 223: no interesting data
avrdude: avr_read_mem(): skipping page 224: no interesting data
avrdude: avr_read_mem(): skipping page 225: no interesting data
avrdude: avr_read_mem(): skipping page 226: no interesting data
avrdude: avr_read_mem(): skipping page 227: no interesting data
avrdude: avr_read_mem(): skipping page 228: no interesting data
avrdude: avr_read_mem(): skipping page 229: no interesting data
avrdude: avr_read_mem(): skipping page 230: no interesting data
avrdude: avr_read_mem(): skipping page 231: no interesting data
avrdude: avr_read_mem(): skipping page 232: no interesting data
avrdude: avr_read_mem(): skipping page 233: no interesting data
avrdude: avr_read_mem(): skipping page 234: no interesting data
avrdude: avr_read_mem(): skipping page 235: no interesting data
avrdude: avr_read_mem(): skipping page 236: no interesting data
avrdude: avr_read_mem(): skipping page 237: no interesting data
avrdude: avr_read_mem(): skipping page 238: no interesting data
avrdude: avr_read_mem(): skipping page 239: no interesting data
avrdude: avr_read_mem(): skipping page 240: no interesting data
avrdude: avr_read_mem(): skipping page 241: no interesting data
avrdude: avr_read_mem(): skipping page 242: no interesting data
avrdude: avr_read_mem(): skipping page 243: no interesting data
avrdude: avr_read_mem(): skipping page 244: no interesting data
avrdude: avr_read_mem(): skipping page 245: no interesting data
avrdude: avr_read_mem(): skipping page 246: no interesting data
avrdude: avr_read_mem(): skipping page 247: no interesting data
avrdude: avr_read_mem(): skipping page 248: no interesting data
avrdude: avr_read_mem(): skipping page 249: no interesting data
avrdude: avr_read_mem(): skipping page 250: no interesting data
avrdude: avr_read_mem(): skipping page 251: no interesting data
avrdude: avr_read_mem(): skipping page 252: no interesting data
avrdude: avr_read_mem(): skipping page 253: no interesting data
avrdude: avr_read_mem(): skipping page 254: no interesting data
avrdude: avr_read_mem(): skipping page 255: no interesting data
avrdude: avr_read_mem(): skipping page 256: no interesting data
avrdude: avr_read_mem(): skipping page 257: no interesting data
avrdude: avr_read_mem(): skipping page 258: no interesting data
avrdude: avr_read_mem(): skipping page 259: no interesting data
avrdude: avr_read_mem(): skipping page 260: no interesting data
avrdude: avr_read_mem(): skipping page 261: no interesting data
avrdude: avr_read_mem(): skipping page 262: no interesting data
avrdude: avr_read_mem(): skipping page 263: no interesting data
avrdude: avr_read_mem(): skipping page 264: no interesting data
avrdude: avr_read_mem(): skipping page 265: no interesting data
avrdude: avr_read_mem(): skipping page 266: no interesting data
avrdude: avr_read_mem(): skipping page 267: no interesting data
avrdude: avr_read_mem(): skipping page 268: no interesting data
avrdude: avr_read_mem(): skipping page 269: no interesting data
avrdude: avr_read_mem(): skipping page 270: no interesting data
avrdude: avr_read_mem(): skipping page 271: no interesting data
avrdude: avr_read_mem(): skipping page 272: no interesting data
avrdude: avr_read_mem(): skipping page 273: no interesting data
avrdude: avr_read_mem(): skipping page 274: no interesting data
avrdude: avr_read_mem(): skipping page 275: no interesting data
avrdude: avr_read_mem(): skipping page 276: no interesting data
avrdude: avr_read_mem(): skipping page 277: no interesting data
avrdude: avr_read_mem(): skipping page 278: no interesting data
avrdude: avr_read_mem(): skipping page 279: no interesting data
avrdude: avr_read_mem(): skipping page 280: no interesting data
avrdude: avr_read_mem(): skipping page 281: no interesting data
avrdude: avr_read_mem(): skipping page 282: no interesting data
avrdude: avr_read_mem(): skipping page 283: no interesting data
avrdude: avr_read_mem(): skipping page 284: no interesting data
avrdude: avr_read_mem(): skipping page 285: no interesting data
avrdude: avr_read_mem(): skipping page 286: no interesting data
avrdude: avr_read_mem(): skipping page 287: no interesting data
avrdude: avr_read_mem(): skipping page 288: no interesting data
avrdude: avr_read_mem(): skipping page 289: no interesting data
avrdude: avr_read_mem(): skipping page 290: no interesting data
avrdude: avr_read_mem(): skipping page 291: no interesting data
avrdude: avr_read_mem(): skipping page 292: no interesting data
avrdude: avr_read_mem(): skipping page 293: no interesting data
avrdude: avr_read_mem(): skipping page 294: no interesting data
avrdude: avr_read_mem(): skipping page 295: no interesting data
avrdude: avr_read_mem(): skipping page 296: no interesting data
avrdude: avr_read_mem(): skipping page 297: no interesting data
avrdude: avr_read_mem(): skipping page 298: no interesting data
avrdude: avr_read_mem(): skipping page 299: no interesting data
avrdude: avr_read_mem(): skipping page 300: no interesting data
avrdude: avr_read_mem(): skipping page 301: no interesting data
avrdude: avr_read_mem(): skipping page 302: no interesting data
avrdude: avr_read_mem(): skipping page 303: no interesting data
avrdude: avr_read_mem(): skipping page 304: no interesting data
avrdude: avr_read_mem(): skipping page 305: no interesting data
avrdude: avr_read_mem(): skipping page 306: no interesting data
avrdude: avr_read_mem(): skipping page 307: no interesting data
avrdude: avr_read_mem(): skipping page 308: no interesting data
avrdude: avr_read_mem(): skipping page 309: no interesting data
avrdude: avr_read_mem(): skipping page 310: no interesting data
avrdude: avr_read_mem(): skipping page 311: no interesting data
avrdude: avr_read_mem(): skipping page 312: no interesting data
avrdude: avr_read_mem(): skipping page 313: no interesting data
avrdude: avr_read_mem(): skipping page 314: no interesting data
avrdude: avr_read_mem(): skipping page 315: no interesting data
avrdude: avr_read_mem(): skipping page 316: no interesting data
avrdude: avr_read_mem(): skipping page 317: no interesting data
avrdude: avr_read_mem(): skipping page 318: no interesting data
avrdude: avr_read_mem(): skipping page 319: no interesting data
avrdude: avr_read_mem(): skipping page 320: no interesting data
avrdude: avr_read_mem(): skipping page 321: no interesting data
avrdude: avr_read_mem(): skipping page 322: no interesting data
avrdude: avr_read_mem(): skipping page 323: no interesting data
avrdude: avr_read_mem(): skipping page 324: no interesting data
avrdude: avr_read_mem(): skipping page 325: no interesting data
avrdude: avr_read_mem(): skipping page 326: no interesting data
avrdude: avr_read_mem(): skipping page 327: no interesting data
avrdude: avr_read_mem(): skipping page 328: no interesting data
avrdude: avr_read_mem(): skipping page 329: no interesting data
avrdude: avr_read_mem(): skipping page 330: no interesting data
avrdude: avr_read_mem(): skipping page 331: no interesting data
avrdude: avr_read_mem(): skipping page 332: no interesting data
avrdude: avr_read_mem(): skipping page 333: no interesting data
avrdude: avr_read_mem(): skipping page 334: no interesting data
avrdude: avr_read_mem(): skipping page 335: no interesting data
avrdude: avr_read_mem(): skipping page 336: no interesting data
avrdude: avr_read_mem(): skipping page 337: no interesting data
avrdude: avr_read_mem(): skipping page 338: no interesting data
avrdude: avr_read_mem(): skipping page 339: no interesting data
avrdude: avr_read_mem(): skipping page 340: no interesting data
avrdude: avr_read_mem(): skipping page 341: no interesting data
avrdude: avr_read_mem(): skipping page 342: no interesting data
avrdude: avr_read_mem(): skipping page 343: no interesting data
avrdude: avr_read_mem(): skipping page 344: no interesting data
avrdude: avr_read_mem(): skipping page 345: no interesting data
avrdude: avr_read_mem(): skipping page 346: no interesting data
avrdude: avr_read_mem(): skipping page 347: no interesting data
avrdude: avr_read_mem(): skipping page 348: no interesting data
avrdude: avr_read_mem(): skipping page 349: no interesting data
avrdude: avr_read_mem(): skipping page 350: no interesting data
avrdude: avr_read_mem(): skipping page 351: no interesting data
avrdude: avr_read_mem(): skipping page 352: no interesting data
avrdude: avr_read_mem(): skipping page 353: no interesting data
avrdude: avr_read_mem(): skipping page 354: no interesting data
avrdude: avr_read_mem(): skipping page 355: no interesting data
avrdude: avr_read_mem(): skipping page 356: no interesting data
avrdude: avr_read_mem(): skipping page 357: no interesting data
avrdude: avr_read_mem(): skipping page 358: no interesting data
avrdude: avr_read_mem(): skipping page 359: no interesting data
avrdude: avr_read_mem(): skipping page 360: no interesting data
avrdude: avr_read_mem(): skipping page 361: no interesting data
avrdude: avr_read_mem(): skipping page 362: no interesting data
avrdude: avr_read_mem(): skipping page 363: no interesting data
avrdude: avr_read_mem(): skipping page 364: no interesting data
avrdude: avr_read_mem(): skipping page 365: no interesting data
avrdude: avr_read_mem(): skipping page 366: no interesting data
avrdude: avr_read_mem(): skipping page 367: no interesting data
avrdude: avr_read_mem(): skipping page 368: no interesting data
avrdude: avr_read_mem(): skipping page 369: no interesting data
avrdude: avr_read_mem(): skipping page 370: no interesting data
avrdude: avr_read_mem(): skipping page 371: no interesting data
avrdude: avr_read_mem(): skipping page 372: no interesting data
avrdude: avr_read_mem(): skipping page 373: no interesting data
avrdude: avr_read_mem(): skipping page 374: no interesting data
avrdude: avr_read_mem(): skipping page 375: no interesting data
avrdude: avr_read_mem(): skipping page 376: no interesting data
avrdude: avr_read_mem(): skipping page 377: no interesting data
avrdude: avr_read_mem(): skipping page 378: no interesting data
avrdude: avr_read_mem(): skipping page 379: no interesting data
avrdude: avr_read_mem(): skipping page 380: no interesting data
avrdude: avr_read_mem(): skipping page 381: no interesting data
avrdude: avr_read_mem(): skipping page 382: no interesting data
avrdude: avr_read_mem(): skipping page 383: no interesting data
avrdude: avr_read_mem(): skipping page 384: no interesting data
avrdude: avr_read_mem(): skipping page 385: no interesting data
avrdude: avr_read_mem(): skipping page 386: no interesting data
avrdude: avr_read_mem(): skipping page 387: no interesting data
avrdude: avr_read_mem(): skipping page 388: no interesting data
avrdude: avr_read_mem(): skipping page 389: no interesting data
avrdude: avr_read_mem(): skipping page 390: no interesting data
avrdude: avr_read_mem(): skipping page 391: no interesting data
avrdude: avr_read_mem(): skipping page 392: no interesting data
avrdude: avr_read_mem(): skipping page 393: no interesting data
avrdude: avr_read_mem(): skipping page 394: no interesting data
avrdude: avr_read_mem(): skipping page 395: no interesting data
avrdude: avr_read_mem(): skipping page 396: no interesting data
avrdude: avr_read_mem(): skipping page 397: no interesting data
avrdude: avr_read_mem(): skipping page 398: no interesting data
avrdude: avr_read_mem(): skipping page 399: no interesting data
avrdude: avr_read_mem(): skipping page 400: no interesting data
avrdude: avr_read_mem(): skipping page 401: no interesting data
avrdude: avr_read_mem(): skipping page 402: no interesting data
avrdude: avr_read_mem(): skipping page 403: no interesting data
avrdude: avr_read_mem(): skipping page 404: no interesting data
avrdude: avr_read_mem(): skipping page 405: no interesting data
avrdude: avr_read_mem(): skipping page 406: no interesting data
avrdude: avr_read_mem(): skipping page 407: no interesting data
avrdude: avr_read_mem(): skipping page 408: no interesting data
avrdude: avr_read_mem(): skipping page 409: no interesting data
avrdude: avr_read_mem(): skipping page 410: no interesting data
avrdude: avr_read_mem(): skipping page 411: no interesting data
avrdude: avr_read_mem(): skipping page 412: no interesting data
avrdude: avr_read_mem(): skipping page 413: no interesting data
avrdude: avr_read_mem(): skipping page 414: no interesting data
avrdude: avr_read_mem(): skipping page 415: no interesting data
avrdude: avr_read_mem(): skipping page 416: no interesting data
avrdude: avr_read_mem(): skipping page 417: no interesting data
avrdude: avr_read_mem(): skipping page 418: no interesting data
avrdude: avr_read_mem(): skipping page 419: no interesting data
avrdude: avr_read_mem(): skipping page 420: no interesting data
avrdude: avr_read_mem(): skipping page 421: no interesting data
avrdude: avr_read_mem(): skipping page 422: no interesting data
avrdude: avr_read_mem(): skipping page 423: no interesting data
avrdude: avr_read_mem(): skipping page 424: no interesting data
avrdude: avr_read_mem(): skipping page 425: no interesting data
avrdude: avr_read_mem(): skipping page 426: no interesting data
avrdude: avr_read_mem(): skipping page 427: no interesting data
avrdude: avr_read_mem(): skipping page 428: no interesting data
avrdude: avr_read_mem(): skipping page 429: no interesting data
avrdude: avr_read_mem(): skipping page 430: no interesting data
avrdude: avr_read_mem(): skipping page 431: no interesting data
avrdude: avr_read_mem(): skipping page 432: no interesting data
avrdude: avr_read_mem(): skipping page 433: no interesting data
avrdude: avr_read_mem(): skipping page 434: no interesting data
avrdude: avr_read_mem(): skipping page 435: no interesting data
avrdude: avr_read_mem(): skipping page 436: no interesting data
avrdude: avr_read_mem(): skipping page 437: no interesting data
avrdude: avr_read_mem(): skipping page 438: no interesting data
avrdude: avr_read_mem(): skipping page 439: no interesting data
avrdude: avr_read_mem(): skipping page 440: no interesting data
avrdude: avr_read_mem(): skipping page 441: no interesting data
avrdude: avr_read_mem(): skipping page 442: no interesting data
avrdude: avr_read_mem(): skipping page 443: no interesting data
avrdude: avr_read_mem(): skipping page 444: no interesting data
avrdude: avr_read_mem(): skipping page 445: no interesting data
avrdude: avr_read_mem(): skipping page 446: no interesting data
avrdude: avr_read_mem(): skipping page 447: no interesting data
avrdude: avr_read_mem(): skipping page 448: no interesting data
avrdude: avr_read_mem(): skipping page 449: no interesting data
avrdude: avr_read_mem(): skipping page 450: no interesting data
avrdude: avr_read_mem(): skipping page 451: no interesting data
avrdude: avr_read_mem(): skipping page 452: no interesting data
avrdude: avr_read_mem(): skipping page 453: no interesting data
avrdude: avr_read_mem(): skipping page 454: no interesting data
avrdude: avr_read_mem(): skipping page 455: no interesting data
avrdude: avr_read_mem(): skipping page 456: no interesting data
avrdude: avr_read_mem(): skipping page 457: no interesting data
avrdude: avr_read_mem(): skipping page 458: no interesting data
avrdude: avr_read_mem(): skipping page 459: no interesting data
avrdude: avr_read_mem(): skipping page 460: no interesting data
avrdude: avr_read_mem(): skipping page 461: no interesting data
avrdude: avr_read_mem(): skipping page 462: no interesting data
avrdude: avr_read_mem(): skipping page 463: no interesting data
avrdude: avr_read_mem(): skipping page 464: no interesting data
avrdude: avr_read_mem(): skipping page 465: no interesting data
avrdude: avr_read_mem(): skipping page 466: no interesting data
avrdude: avr_read_mem(): skipping page 467: no interesting data
avrdude: avr_read_mem(): skipping page 468: no interesting data
avrdude: avr_read_mem(): skipping page 469: no interesting data
avrdude: avr_read_mem(): skipping page 470: no interesting data
avrdude: avr_read_mem(): skipping page 471: no interesting data
avrdude: avr_read_mem(): skipping page 472: no interesting data
avrdude: avr_read_mem(): skipping page 473: no interesting data
avrdude: avr_read_mem(): skipping page 474: no interesting data
avrdude: avr_read_mem(): skipping page 475: no interesting data
avrdude: avr_read_mem(): skipping page 476: no interesting data
avrdude: avr_read_mem(): skipping page 477: no interesting data
avrdude: avr_read_mem(): skipping page 478: no interesting data
avrdude: avr_read_mem(): skipping page 479: no interesting data
avrdude: avr_read_mem(): skipping page 480: no interesting data
avrdude: avr_read_mem(): skipping page 481: no interesting data
avrdude: avr_read_mem(): skipping page 482: no interesting data
avrdude: avr_read_mem(): skipping page 483: no interesting data
avrdude: avr_read_mem(): skipping page 484: no interesting data
avrdude: avr_read_mem(): skipping page 485: no interesting data
avrdude: avr_read_mem(): skipping page 486: no interesting data
avrdude: avr_read_mem(): skipping page 487: no interesting data
avrdude: avr_read_mem(): skipping page 488: no interesting data
avrdude: avr_read_mem(): skipping page 489: no interesting data
avrdude: avr_read_mem(): skipping page 490: no interesting data
avrdude: avr_read_mem(): skipping page 491: no interesting data
avrdude: avr_read_mem(): skipping page 492: no interesting data
avrdude: avr_read_mem(): skipping page 493: no interesting data
avrdude: avr_read_mem(): skipping page 494: no interesting data
avrdude: avr_read_mem(): skipping page 495: no interesting data
avrdude: avr_read_mem(): skipping page 496: no interesting data
avrdude: avr_read_mem(): skipping page 497: no interesting data
avrdude: avr_read_mem(): skipping page 498: no interesting data
avrdude: avr_read_mem(): skipping page 499: no interesting data
avrdude: avr_read_mem(): skipping page 500: no interesting data
avrdude: avr_read_mem(): skipping page 501: no interesting data
avrdude: avr_read_mem(): skipping page 502: no interesting data
avrdude: avr_read_mem(): skipping page 503: no interesting data
avrdude: avr_read_mem(): skipping page 504: no interesting data
avrdude: avr_read_mem(): skipping page 505: no interesting data
avrdude: avr_read_mem(): skipping page 506: no interesting data
avrdude: avr_read_mem(): skipping page 507: no interesting data
avrdude: avr_read_mem(): skipping page 508: no interesting data
avrdude: avr_read_mem(): skipping page 509: no interesting data
avrdude: avr_read_mem(): skipping page 510: no interesting data
avrdude: avr_read_mem(): skipping page 511: no interesting data
avrdude: verifying ...
avrdude: 5122 bytes of flash verified
avrdude: sending leave progmode command:
avrdude: jtag3_edbg_send(): sending 3 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 100 (command_sequence == 100)

Raw message:
12  80  00
[AVR] OK
avrdude: jtag3_close()
avrdude: sending AVR sign-off command:
avrdude: jtag3_edbg_send(): sending 3 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 101 (command_sequence == 101)

Raw message:
12  80  00
[AVR] OK
avrdude: sending sign-off command:
avrdude: jtag3_edbg_send(): sending 4 bytes
avrdude: jtag3_edbg_recv():
avrdude: jtag3_recv(): Got message seqno 102 (command_sequence == 102)

Raw message:
01  80  00
[general] OK

avrdude: jtag3_edbg_signoff()

avrdude done.  Thank you.

@mcuee mcuee added unconfirmed Maybe a bug, needs to be reproduced by someone else and removed bug Something isn't working labels Oct 21, 2023
@mcuee
Copy link
Collaborator

mcuee commented Oct 21, 2023

@askn37

I have changed the label to unconfirmed for now. Please follow the suggestion from @dbuchwald.

I will change the lable back to bug if another user or I can confirm the issue. Thanks.

@mcuee
Copy link
Collaborator

mcuee commented Oct 21, 2023

@stefanrueger and @dbuchwald

I can not test this right now but I am not sure if you can get some useful info from my debug log using the -c pkobn_updi programmer. Please take a look the debug log. Thanks.

@stefanrueger
Copy link
Collaborator

@askn37 Thanks for reporting and for expanding your submission with additional information. Could I ask you to give the complete line, including which -c programmer etc where you get IO memory instead of flash, please. So, we can try to reproduce. You appear to use -U flash:r:avr64ea32/Flash.hex:i as one element.

@dbuchwald
Copy link
Contributor

@mcuee if you have access to Curiosity Nano board with AVR64EA32 (or AVR64EA48) chip, you can connect your SerialUPDI programmer like so:

curiosity_nano

I know it looks flimsy AF, but it does work, good enough to run some tests.

That being said, I want to clarify something - my implementation of SerialUPDI in AVRDUDE was always meant to be just a port of Python-based Microchip reference implementation. It was never built directly based on chip datasheets, an for a reason. I could have never dreamt of testing my code against statistically significant sample of the actual microcontrollers, so following manufacturer's reference implementation was the only "natural" thing to do.
This is why I need comparison between pymcuprog and AVRDUDE, I need to know how the reference implementation handles support for these processors.
Sure, I can add new parameter to the programmer to enable 24-bit operation on NVM v3 and offer it as an experimental feature, but I would be hesitant to changing the core implementation based on datasheet of a chip I can't get my hands on in reasonable timeframe.

Bottom line: I really need to know two things:

  1. How does pymcuprog handle scenarios with "resetting"/"sleeping" chip (as far as I recall, it doesn't), and how to reproduce this behavior (how to put one of the Dx chips I do have in these states),
  2. How does pymcuprog handle programming of the AVR64EA32 chips.

Please note: English is not my first language, and now rereading the above it sounds like I don't want to handle this issue, but that would be wrong impression. I really do want to help, and I'm happy to experiment with different approaches, but I really need to know that whatever we are trying to do here will not break existing functionality.

@mcuee
Copy link
Collaborator

mcuee commented Oct 22, 2023

@dbuchwald

Thanks a lot for the tip. I will try to get some compariosons done tomorrow.between pymcuprog and avrdude.

No worry, you have been very helpful to avrdude project.

@askn37
Copy link
Contributor Author

askn37 commented Oct 22, 2023

@mcuee

  1. How does pymcuprog handle scenarios with "resetting"/"sleeping" chip (as far as I recall, it doesn't), and how to reproduce this behavior (how to put one of the Dx chips I do have in these states),
  2. How does pymcuprog handle programming of the AVR64EA32 chips.

Please note: English is not my first language, and now rereading the above it sounds like I don't want to handle this issue, but that would be wrong impression. I really do want to help, and I'm happy to experiment with different approaches, but I really need to know that whatever we are trying to do here will not break existing functionality.

Unfortunately, it appears that pymcuprog has not been updated since October 2022. Microchip published his AVR16EAxx and AVR32EAxx repositories in April 2023 and began shipping engineering samples to customers. Therefore, it is unlikely that pymcuprog can expect full compatibility with his NVMCTRL version 3.

In fact, the first release of Microchip's AVR-LIBC library for his AVR32EAxx had an EEPROM control bug that incorrectly used version 0 code for NVMCTRL version 3. I first discovered it and reported it to Microchip. The repository was properly modified and published in July.

I have never tested pymcuprog before. Because debugging Python is not my main job. However, if new issues are discovered, you will need to report them to Microchip again.

(By the way, my native language is Japanese. Conversation with a microchip is quite troublesome.)

@askn37 askn37 closed this as not planned Won't fix, can't repro, duplicate, stale Oct 22, 2023
@askn37 askn37 reopened this Oct 22, 2023
@mcuee
Copy link
Collaborator

mcuee commented Oct 22, 2023

@xedbg

Just wondering if you can help to check here. Thanks.

@stefanrueger
Copy link
Collaborator

I'm happy to experiment with different approaches

Thank you, @dbuchwald. This is great. Given the choice between a working implementation and one that's conform to a possibly outdated reference implementation, I'd go for the former in a heartbeat. It would be good if you could continue to look after the UPDI implementation @dbuchwald. Many thanks all round, @mcuee for testing and @askn37 for making us aware of this problem. (@askn37 if you have specific code suggestions to try, please feel free to share).

@dbuchwald
Copy link
Contributor

@mcuee if you get some time to replicate the issue, you can also grab the version I just provided via PR above - it basically replaces 16-bit addressing mode for NVM v3 controllers by 24-bit mode. You can test if it works any better.
The main problem I see now is that I don't know if there is any reasonable way to get list of devices using NVM v3 and test them against this implementation.
As for Microchip dropping support for pymcuprog/serialupdi, this is unfortunate, but somehow consistent with their way of operation. Let's leave it there.

If it works, then we need to look into this "sleep" mode, and as far as I can tell from the datasheet, it might not be trivial thing to do:

The UPDI PHY layer runs independently of all sleep modes, and the UPDI is always accessible for a connected debugger independent of the device’s sleep state. If the system enters a sleep mode that turns the system clock off, the UPDI cannot access the system bus and read memories and peripherals. When enabled, the UPDI will request the system clock so that the UPDI always has contact with the rest of the device. Thus, the UPDI PHY layer clock is unaffected by the sleep mode’s settings. By reading the System Domain in Sleep (INSLEEP) bit in the ASI System Status (UPDI.ASI_SYS_STATUS) register, it is possible to monitor if the system domain is in a sleep mode. It is possible to prevent the system clock from stopping when going into a sleep mode by writing to the Request System Clock (CLKREQ) bit in the ASI System Control A (UPDI.ASI_SYS_CTRLA) register. If this bit is set, the system’s sleep mode state is emulated, and the UPDI can access the system bus and read the peripheral registers even in the deepest sleep modes.

@mcuee mcuee added bug Something isn't working and removed unconfirmed Maybe a bug, needs to be reproduced by someone else labels Oct 22, 2023
@mcuee
Copy link
Collaborator

mcuee commented Oct 22, 2023

I will label this as bug for now based on the reports by @askn37. But I will try to carry out the test to confirm later.

@mcuee
Copy link
Collaborator

mcuee commented Oct 23, 2023

@dbuchwald

I can confirm there is an issue in git main and your PR #1531 helps, at least for reading. For writing I still encounfer faliures but I do not have a steady hand now to hold the pin headers long enough. I will do that later.

  1. git main failed to verify flash contents (I used the on-board programmer to program the flash first and then verify with serialupdi.
PS> .\avrdude_git -c serialupdi -P COM9 -p avr64ea48 -U flash:v:median_Release_1.0.0.hex:i
avrdude_git: AVR device initialized and ready to accept instructions
avrdude_git: device signature = 0x1e961e (probably avr64ea48)

avrdude_git: processing -U flash:v:median_Release_1.0.0.hex:i
avrdude_git: verifying flash memory against median_Release_1.0.0.hex
Reading | ################################################## | 100% 1.19 s
avrdude_git warning: verification mismatch
            device 0x00 != input 0x5c at addr 0x0000 (error)
avrdude_git error: verification mismatch

avrdude_git done.  Thank you.

PR #1531 is good in terms of verification.

PS> .\avrdude_pr1531 -C .\avrdude_pr1531.conf -cserialupdi -PCOM9 -pavr64ea48 -U flash:v:median_Release_1.0.0.hex:i
avrdude_pr1531: AVR device initialized and ready to accept instructions
avrdude_pr1531: device signature = 0x1e961e (probably avr64ea48)

avrdude_pr1531: processing -U flash:v:median_Release_1.0.0.hex:i
avrdude_pr1531: verifying flash memory against median_Release_1.0.0.hex
Reading | ################################################## | 100% 1.19 s
avrdude_pr1531: 5122 bytes of flash verified

avrdude_pr1531 done.  Thank you.

@mcuee
Copy link
Collaborator

mcuee commented Oct 23, 2023

For writing I still encounfer faliures but I do not have a steady hand now to hold the pin headers long enough. I will do that later.

@dbuchwald

I managed to hold the pin header and PR #1531 is good as well.

PS > .\avrdude_pr1531 -C .\avrdude_pr1531.conf -c serialupdi -P COM9 -p avr64ea48 -U median_Release_1.0.0.hex
avrdude_pr1531: AVR device initialized and ready to accept instructions
avrdude_pr1531: device signature = 0x1e961e (probably avr64ea48)
avrdude_pr1531: Note: flash memory has been specified, an erase cycle will be performed.
                To disable this feature, specify the -D option.
avrdude_pr1531: erasing chip

avrdude_pr1531: processing -U flash:w:median_Release_1.0.0.hex:i
avrdude_pr1531: reading input file median_Release_1.0.0.hex for flash
                with 5122 bytes in 1 section within [0, 0x1401]
                using 41 pages and 126 pad bytes
avrdude_pr1531: writing 5122 bytes flash ...
Writing | ################################################## | 100% 1.91 s
avrdude_pr1531: 5122 bytes of flash written
avrdude_pr1531: verifying flash memory against median_Release_1.0.0.hex
Reading | ################################################## | 100% 0.93 s
avrdude_pr1531: 5122 bytes of flash verified

avrdude_pr1531 done.  Thank you.

git main will fail.

PS > .\avrdude_git -c serialupdi -P COM9 -p avr64ea48 -U median_Release_1.0.0.hex
avrdude_git: AVR device initialized and ready to accept instructions
avrdude_git: device signature = 0x1e961e (probably avr64ea48)
avrdude_git: Note: flash memory has been specified, an erase cycle will be performed.
             To disable this feature, specify the -D option.
avrdude_git: erasing chip

avrdude_git: processing -U flash:w:median_Release_1.0.0.hex:i
avrdude_git: reading input file median_Release_1.0.0.hex for flash
             with 5122 bytes in 1 section within [0, 0x1401]
             using 41 pages and 126 pad bytes
avrdude_git: writing 5122 bytes flash ...
Writing | ##------------------------------------------------ | 4% 2.16 s
avrdude_git error: commit data command failed
avrdude_git error: wait NVM ready timed out
avrdude_git error: updi_nvm_wait_ready() failed
 ***failed;
avrdude_git error: wait NVM ready timed out
avrdude_git error: updi_nvm_wait_ready() failed
 ***failed;
avrdude_git error: wait NVM ready timed out
avrdude_git error: updi_nvm_wait_ready() failed
 ***failed;
avrdude_git error: wait NVM ready timed out
avrdude_git error: updi_nvm_wait_ready() failed
 ***failed;
avrdude_git error: wait NVM ready timed out
avrdude_git error: updi_nvm_wait_ready() failed
 ***failed;
avrdude_git error: wait NVM ready timed out
avrdude_git error: updi_nvm_wait_ready() failed
 ***failed;
(I hit CTRL-C to exit)

@mcuee
Copy link
Collaborator

mcuee commented Oct 23, 2023

BTW, I need to mention that the nice setial2updi adapter (with pogo-pins or pin headers) is courtesy of @SpenceKonde (aka Dr. Azzy).

He is very kind and sent me the following at the end of last year.

  1. Nice serialupdi adapter with pogo pins and pin headers
  2. AVR64DD32 board
  3. AVR32DD14 breakout board
  4. ATTiny3227 breakout board

@mcuee
Copy link
Collaborator

mcuee commented Oct 23, 2023

@askn37

Please give PR #1531 a try. Thanks. My testing shows that it works fine.

@askn37
Copy link
Contributor Author

askn37 commented Oct 23, 2023

I would like to thank you all for your great work.

The attached code is a program that allows you to experience sleep failures (rather than address width issues). This applies to tinyAVR-2 and most of its AVR_DA/DB/DD/EA/EB. It can be constructed with AVR-LIBC.

When I run it, the LED keeps blinking using PA7, but the CPU remains in a STANDBY sleep state with interrupts disabled. Also, F_CPU is 512Hz.

(TCB0, CCL, and EVOUT are used for this LED blinking operation, but tinyAVR-0/1 and megaAVR-0 are not supported because the difference in CCL is troublesome.)

Please upload your code to the device using a method other than the problematic SerialUPDI and test it with SerialUPDI. It is important not to reset the CPU at this point. The CPU startup start time is affected by the SUT setting value of FUSE_SYSCFG1.

To test without going to sleep, run a SerialUPDI with the reset pad LOW, wait a second or two, then release the reset. SerialUPDI should be able to recognize the CPU. A power-on reset is required if the chip's reset pad functionality is disabled in FUSE_SYSCFG0.

Engineering samples of the AVR16EBxx will begin arriving to stakeholders soon. It seems that the application for free distribution has ended.
moderAVR_sleep_c.txt

@xedbg
Copy link

xedbg commented Oct 23, 2023

Just wondering if you can help to check here. Thanks.

Sure, i can take a closer look today.
But something does looks off here - the 'default' should use 24-bit UPDI going forward for all parts.

@dbuchwald
Copy link
Contributor

But something does looks off here - the 'default' should use 24-bit UPDI going forward for all parts.

And that was the change I made - chips reporting NVM v3 are now handled with 24-bit addressing. That being said, it would be great to find some sort of list of all the devices using this NVM mode to test it with more than one or two...

@mcuee
Copy link
Collaborator

mcuee commented Oct 23, 2023

If it works, then we need to look into this "sleep" mode, and as far as I can tell from the datasheet, it might not be trivial thing to do:

The UPDI PHY layer runs independently of all sleep modes, and the UPDI is always accessible for a connected debugger independent of the device’s sleep state. If the system enters a sleep mode that turns the system clock off, the UPDI cannot access the system bus and read memories and peripherals. When enabled, the UPDI will request the system clock so that the UPDI always has contact with the rest of the device. Thus, the UPDI PHY layer clock is unaffected by the sleep mode’s settings. By reading the System Domain in Sleep (INSLEEP) bit in the ASI System Status (UPDI.ASI_SYS_STATUS) register, it is possible to monitor if the system domain is in a sleep mode. It is possible to prevent the system clock from stopping when going into a sleep mode by writing to the Request System Clock (CLKREQ) bit in the ASI System Control A (UPDI.ASI_SYS_CTRLA) register. If this bit is set, the system’s sleep mode state is emulated, and the UPDI can access the system bus and read the peripheral registers even in the deepest sleep modes.

If this is not trivial to do, I think we can just document this as a limitation.

@askn37
Copy link
Contributor Author

askn37 commented Oct 28, 2023

@mcuee
At first, I didn't expect it to become such a wide-ranging discussion! It might be better to close this and separate it into another topic.

@stefanrueger

This is the schematic for the CH340X prototype board. The CH340X is an improved version of the CH340E and also includes the features of the CH340K. CH340K had problems in the past due to VID differences, but CH340X has high compatibility. By adding additional resistors to TNOW, DTR can be extended in two ways during POR.

2318_UARTLGC.pdf

The latest hardware design guide for modernAVR can be found in their respective datasheets. UPDI and RESET have built-in 30kΩ pull-ups that activate on POR, unlike older AVRs. Therefore, only a stabilizing capacitor is required externally. If you add a reset switch, also add a filter resistor.

SS 2023-10-28 8 42 37

His RESET prototype board for AVR follows the latest design guidelines. The difference is that instead of being connected to GND, it is connected to his RTS, which is Low by default. Therefore, the stabilization capacitor is charged by the internal pull-up. When the RTS changes, it discharges with opposite polarity and the potential drops for a short time. It will stay below 0.2VDD until RESET is charged again.

Old AVR design guides recommended a 10kΩ RESET pullup. The reason this is no longer mentioned is probably because the internal high frequency RC oscillator is slow and you want to have enough time for POR. Additionally, the UPDI circuit (sub-CPU) operates using a dedicated internal RC oscillator that is separate from the main clock. In the worst case, it may boot slower than the main CPU. To avoid this (preventing abnormalities due to inrush current), FUSE has a startup timer setting. The adjustment range is up to 64ms, so it is best to keep this delay phenomenon in mind.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

@mcuee
At first, I didn't expect it to become such a wide-ranging discussion! It might be better to close this and separate it into another topic.

No issues, It is probably my fault. :-)

I think we can continue here as the topics are all related to serialupdi.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

I tried to debug the MinGW 115200bps issue and adding usleep here and there does not help.

I think the issue is that ir can not communicate at 115200 bps at all, at least initially with the MinGW build. Adding usleep will not help.

PS>git diff
diff --git a/src/serialupdi.c b/src/serialupdi.c
index f93eb5de..7e34709d 100644
--- a/src/serialupdi.c
+++ b/src/serialupdi.c
@@ -566,7 +566,7 @@ static int serialupdi_initialize(const PROGRAMMER *pgm, const AVRPART *p) {
   uint8_t reset_link_required=0;

   if (updi_link_init(pgm) < 0) {
-    pmsg_error("UPDI link initialization failed\n");
+    pmsg_error("UPDI link initialization failed main\n");
     return -1;
   }
   pmsg_notice2("UPDI link initialization OK\n");
diff --git a/src/updi_link.c b/src/updi_link.c
index dba4a67e..18a92108 100644
--- a/src/updi_link.c
+++ b/src/updi_link.c
@@ -42,12 +42,25 @@
 static void updi_set_rtsdtr_mode(const PROGRAMMER *pgm) {
   updi_rts_mode rts_mode = updi_get_rts_mode(pgm);

+  int xdelay=-50;
+
   if (rts_mode == RTS_MODE_DEFAULT) {
     return;
   }

+  // This code assumes a negative-logic USB to TTL serial adapter
+  // Set RTS/DTR high to discharge the series-capacitor, if present
+  serial_set_dtr_rts(&pgm->fd, 0);
+  usleep(20*1000);
+  // Pull the RTS/DTR line low to reset AVR
+  serial_set_dtr_rts(&pgm->fd, 1);
+  // Max 100 us: charging a cap longer creates a high reset spike above Vcc
+  usleep(100);
+  // Set the RTS/DTR line back to high, so direct connection to reset works
   serial_set_dtr_rts(&pgm->fd, 0);
-  serial_set_dtr_rts(&pgm->fd, rts_mode == RTS_MODE_LOW ? 1 : 0);
+
+  if((120+xdelay) > 0)
+    usleep((120+xdelay)*1000); // Wait until board comes out of reset
 }

 static int updi_physical_open(PROGRAMMER* pgm, int baudrate, unsigned long cflags)
@@ -213,12 +226,16 @@ static int updi_link_init_session_parameters(const PROGRAMMER *pgm)  {
         self.stcs(constants.UPDI_CS_CTRLB, 1 << constants.UPDI_CTRLB_CCDETDIS_BIT)
         self.stcs(constants.UPDI_CS_CTRLA, 1 << constants.UPDI_CTRLA_IBDLY_BIT)
 */
+  usleep(100);
   if (updi_link_stcs(pgm, UPDI_CS_CTRLB, 1 << UPDI_CTRLB_CCDETDIS_BIT) < 0) {
-    return -1;
+    pmsg_debug("session orameters initialisation failed B\n");
+       return -1;
   }
-
+
+  usleep(100);
   if (updi_link_stcs(pgm, UPDI_CS_CTRLA, 1 << UPDI_CTRLA_IBDLY_BIT) < 0) {
-    return -1;
+    pmsg_debug("session orameters initialisation failed A\n");
+       return -1;
   }

   return 0;
@@ -274,25 +291,30 @@ int updi_link_init(const PROGRAMMER *pgm) {
                 raise PymcuprogError("UPDI initialisation failed")
 */
   if (updi_link_init_session_parameters(pgm) < 0) {
-    pmsg_debug("session initialisation failed\n");
+    pmsg_debug("session initialisation failed 1\n");
     return -1;
   }
+
+  usleep(100);

   if (updi_link_check(pgm) < 0) {
     pmsg_debug("datalink not active, resetting ...\n");
     if (updi_physical_send_double_break(pgm) < 0) {
-      pmsg_debug("datalink initialisation failed\n");
+      pmsg_debug("datalink initialisation failed 2\n");
       return -1;
     }
+       usleep(100);
     if (updi_link_init_session_parameters(pgm) < 0) {
-      pmsg_debug("session initialisation failed\n");
+      pmsg_debug("session initialisation failed 3\n");
       return -1;
     }
+       usleep(100);
     if (updi_link_check(pgm) < 0) {
-      pmsg_debug("restoring datalink failed\n");
+      pmsg_debug("restoring datalink failed 4\n");
       return -1;
     }
   }
+
   return 0;
 }

PS>cd ..\avrdude_bin
PS>.\avrdude_mod -C .\avrdude_pr1538.conf -c serialupdi -P COM11 -p avr64dd32 -vvvv

avrdude_mod: Version 7.2-20231024 (d6c61f5f)
             Copyright the AVRDUDE authors;
             see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

             System wide configuration file is C:\work\avr\avrdude_test\avrdude_bin\avrdude_pr1538.conf

             Using Port                    : COM11
             Using Programmer              : serialupdi
avrdude_mod: opening serial port ...
avrdude_mod: sending 1 bytes [0x00]
avrdude_mod: send: . [00]
avrdude_mod: recv: . [00]
             AVR Part                      : AVR64DD32
             RESET disposition             : dedicated
             RETRY pulse                   : SCK
             Serial program mode           : yes
             Parallel program mode         : yes
 ...
avrdude_mod: STCS 0x08 to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_mod: send: U [55] . [c3] . [08]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: STCS 0x80 to address 0x02
avrdude_mod: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_mod: send: U [55] . [c2] . [80]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: LDCS from 0x00
avrdude_mod: sending 2 bytes [0x55, 0x80]
avrdude_mod: send: U [55] . [80]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: serialupdi_recv(): programmer is not responding
avrdude_mod: check failed
avrdude_mod: datalink not active, resetting ...
avrdude_mod: sending double break
avrdude_mod: send: . [00]
avrdude_mod: recv: . [00]
avrdude_mod: send: . [00]
avrdude_mod: recv: . [00]
avrdude_mod: STCS 0x08 to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_mod: send: U [55] . [c3] . [08]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: STCS 0x80 to address 0x02
avrdude_mod: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_mod: send: U [55] . [c2] . [80]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: LDCS from 0x00
avrdude_mod: sending 2 bytes [0x55, 0x80]
avrdude_mod: send: U [55] . [80]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: serialupdi_recv(): programmer is not responding
avrdude_mod: check failed
avrdude_mod: restoring datalink failed 4
avrdude_mod serialupdi_initialize() [serialupdi.c:569] error: UPDI link initialization failed main
avrdude_mod main() [main.c:1399] error: initialization failed, rc=-1
            - double check the connections and try again
            - use -b to set lower baud rate, e.g. -b 57600
            - use -F to override this check
avrdude_mod: leaving NVM programming mode
avrdude_mod: sending reset request
avrdude_mod: STCS 0x59 to address 0x08
avrdude_mod: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_mod: send: U [55] . [c8] Y [59]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: sending release reset request
avrdude_mod: STCS 0x00 to address 0x08
avrdude_mod: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_mod: send: U [55] . [c8] . [00]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: STCS 0x0C to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x0c]
avrdude_mod: send: U [55] . [c3] . [0c]
avrdude_mod: ser_recv(): programmer is not responding

avrdude_mod done.  Thank you.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

Even at baud rate of 57600 it failed initially but luckily it can recover.

...
...
avrdude_mod: STCS 0x08 to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_mod: send: U [55] . [c3] . [08]
avrdude_mod: recv: . [00] . [d8] . [f8]
avrdude_mod: STCS 0x80 to address 0x02
avrdude_mod: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_mod: send: U [55] . [c2] . [80]
avrdude_mod: recv: U [55] . [c2] . [80]
avrdude_mod: LDCS from 0x00
avrdude_mod: sending 2 bytes [0x55, 0x80]
avrdude_mod: send: U [55] . [80]
avrdude_mod: recv: U [55] . [80]
avrdude_mod: ser_recv(): programmer is not responding
avrdude_mod: serialupdi_recv(): programmer is not responding
avrdude_mod: check failed
avrdude_mod: datalink not active, resetting ...
avrdude_mod: sending double break
avrdude_mod: send: . [00]
avrdude_mod: recv: . [00]
avrdude_mod: send: . [00]
avrdude_mod: recv: . [00]
avrdude_mod: STCS 0x08 to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_mod: send: U [55] . [c3] . [08]
avrdude_mod: recv: U [55] . [c3] . [08]
avrdude_mod: STCS 0x80 to address 0x02
avrdude_mod: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_mod: send: U [55] . [c2] . [80]
avrdude_mod: recv: U [55] . [c2] . [80]
avrdude_mod: LDCS from 0x00
avrdude_mod: sending 2 bytes [0x55, 0x80]
avrdude_mod: send: U [55] . [80]
avrdude_mod: recv: U [55] . [80]
avrdude_mod: recv: 0 [30]
avrdude_mod: received 1 bytes [0x30]
avrdude_mod: UDPI init OK
avrdude_mod: UPDI link initialization OK
avrdude_mod: LDCS from 0x0B
avrdude_mod: sending 2 bytes [0x55, 0x8b]
avrdude_mod: send: U [55] . [8b]
avrdude_mod: recv: U [55] . [8b]
avrdude_mod: recv: . [92]
avrdude_mod: received 1 bytes [0x92]
avrdude_mod: device is in SLEEP mode
avrdude_mod: sending 2 bytes [0x55, 0xe6]
avrdude_mod: send: U [55] . [e6]
avrdude_mod: recv: U [55] . [e6]
avrdude_mod: recv: A [41] V [56] R [52]   [20]   [20]   [20]   [20]   [20] P [50] : [3a] 2 [32] D [44] : [3a] 1 [31] - [2d] 3 [33] M [4d] 2 [32]   [20] ( [28] A [41] 3 [33] . [2e] K [4b] V [56] 0 [30] 0 [30] K [4b] . [2e] 0 [30] ) [29] . [00]
avrdude_mod: received 32 bytes [0x41, 0x56, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x3a, 0x32, 0x44, 0x3a, 0x31, 0x2d, 0x33, 0x4d, 0x32, 0x20, 0x28, 0x41, 0x33, 0x2e, 0x4b, 0x56, 0x30, 0x30, 0x4b, 0x2e, 0x30, 0x29, 0x00]
avrdude_mod: received SIB: [AVR     P:2D:1-3M2 (A3.KV00K.0)]
avrdude_mod: Device family ID: AVR
avrdude_mod: NVM interface: P:2
avrdude_mod: Debug interface: D:1
avrdude_mod: PDI oscillator: 3M2
avrdude_mod: Extra information: (A3.KV00K.0)
avrdude_mod: NVM type 2: 24-bit, word oriented write
avrdude_mod: reading 1 bytes from 0x000F01
avrdude_mod: ST_PTR to 0x000F01
avrdude_mod: sending 5 bytes [0x55, 0x6a, 0x01, 0x0f, 0x00]
avrdude_mod: send: U [55] j [6a] . [01] . [0f] . [00]
avrdude_mod: recv: U [55] j [6a] . [01] . [0f] . [00]
avrdude_mod: recv: @ [40]
avrdude_mod: received 1 bytes [0x40]
avrdude_mod: LD8 from ptr++
avrdude_mod: sending 2 bytes [0x55, 0x24]
avrdude_mod: send: U [55] $ [24]
avrdude_mod: recv: U [55] $ [24]
avrdude_mod: recv: . [13]
avrdude_mod: received 1 bytes [0x13]
avrdude_mod: Received chip silicon revision 0x13
avrdude_mod: Chip silicon revision: 1.3
avrdude_mod: STCS 0x08 to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_mod: send: U [55] . [c3] . [08]
avrdude_mod: recv: U [55] . [c3] . [08]
avrdude_mod: STCS 0x80 to address 0x02
avrdude_mod: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_mod: send: U [55] . [c2] . [80]
avrdude_mod: recv: U [55] . [c2] . [80]
avrdude_mod: LDCS from 0x00
avrdude_mod: sending 2 bytes [0x55, 0x80]
avrdude_mod: send: U [55] . [80]
avrdude_mod: recv: U [55] . [80]
avrdude_mod: recv: 0 [30]
avrdude_mod: received 1 bytes [0x30]
avrdude_mod: UDPI init OK
avrdude_mod: entering NVM programming mode
avrdude_mod: LDCS from 0x0B
avrdude_mod: sending 2 bytes [0x55, 0x8b]
avrdude_mod: send: U [55] . [8b]
avrdude_mod: recv: U [55] . [8b]
avrdude_mod: recv: . [92]
avrdude_mod: received 1 bytes [0x92]
avrdude_mod: UPDI writing key
avrdude_mod: sending 2 bytes [0x55, 0xe0]
avrdude_mod: send: U [55] . [e0]
avrdude_mod: recv: U [55] . [e0]
avrdude_mod: sending 8 bytes [0x20, 0x67, 0x6f, 0x72, 0x50, 0x4d, 0x56, 0x4e]
avrdude_mod: send:   [20] g [67] o [6f] r [72] P [50] M [4d] V [56] N [4e]
avrdude_mod: recv:   [20] g [67] o [6f] r [72] P [50] M [4d] V [56] N [4e]
avrdude_mod: LDCS from 0x07
avrdude_mod: sending 2 bytes [0x55, 0x87]
avrdude_mod: send: U [55] . [87]
avrdude_mod: recv: U [55] . [87]
avrdude_mod: recv: . [10]
avrdude_mod: received 1 bytes [0x10]
avrdude_mod: key status: 0x10
avrdude_mod: sending reset request
avrdude_mod: STCS 0x59 to address 0x08
avrdude_mod: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_mod: send: U [55] . [c8] Y [59]
avrdude_mod: recv: U [55] . [c8] Y [59]
avrdude_mod: sending release reset request
avrdude_mod: STCS 0x00 to address 0x08
avrdude_mod: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_mod: send: U [55] . [c8] . [00]
avrdude_mod: recv: U [55] . [c8] . [00]
avrdude_mod: LDCS from 0x0B
avrdude_mod: sending 2 bytes [0x55, 0x8b]
avrdude_mod: send: U [55] . [8b]
avrdude_mod: recv: U [55] . [8b]
avrdude_mod: recv: 8 [38]
avrdude_mod: received 1 bytes [0x38]
avrdude_mod: LDCS from 0x0B
avrdude_mod: sending 2 bytes [0x55, 0x8b]
avrdude_mod: send: U [55] . [8b]
avrdude_mod: recv: U [55] . [8b]
avrdude_mod: recv: . [08]
avrdude_mod: received 1 bytes [0x08]
avrdude_mod: entered NVM programming mode
avrdude_mod: AVR device initialized and ready to accept instructions
Reading |                                                    | 0% 0.00 s
avrdude_mod: LDCS from 0x0B
avrdude_mod: sending 2 bytes [0x55, 0x8b]
avrdude_mod: send: U [55] . [8b]
avrdude_mod: recv: U [55] . [8b]
avrdude_mod: recv: . [08]
avrdude_mod: received 1 bytes [0x08]
avrdude_mod: LD from 0x001100
avrdude_mod: sending 5 bytes [0x55, 0x08, 0x00, 0x11, 0x00]
avrdude_mod: send: U [55] . [08] . [00] . [11] . [00]
avrdude_mod: recv: U [55] . [08] . [00] . [11] . [00]
avrdude_mod: recv: . [1e]
avrdude_mod: received 1 bytes [0x1e]
avrdude_mod: LD from 0x001101
avrdude_mod: sending 5 bytes [0x55, 0x08, 0x01, 0x11, 0x00]
avrdude_mod: send: U [55] . [08] . [01] . [11] . [00]
avrdude_mod: recv: U [55] . [08] . [01] . [11] . [00]
avrdude_mod: recv: . [96]
avrdude_mod: received 1 bytes [0x96]
avrdude_mod: LD from 0x001102
avrdude_mod: sending 5 bytes [0x55, 0x08, 0x02, 0x11, 0x00]
avrdude_mod: send: U [55] . [08] . [02] . [11] . [00]
avrdude_mod: recv: U [55] . [08] . [02] . [11] . [00]
avrdude_mod: recv: . [1a]
avrdude_mod: received 1 bytes [0x1a]
Reading | ################################################## | 100% 0.05 s
avrdude_mod: device signature = 0x1e961a (probably avr64dd32)
avrdude_mod: leaving NVM programming mode
avrdude_mod: sending reset request
avrdude_mod: STCS 0x59 to address 0x08
avrdude_mod: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_mod: send: U [55] . [c8] Y [59]
avrdude_mod: recv: U [55] . [c8] Y [59]
avrdude_mod: sending release reset request
avrdude_mod: STCS 0x00 to address 0x08
avrdude_mod: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_mod: send: U [55] . [c8] . [00]
avrdude_mod: recv: U [55] . [c8] . [00]
avrdude_mod: STCS 0x0C to address 0x03
avrdude_mod: sending 3 bytes [0x55, 0xc3, 0x0c]
avrdude_mod: send: U [55] . [c3] . [0c]
avrdude_mod: recv: U [55] . [c3] . [0c]

avrdude_mod done.  Thank you.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

As there is no issue with -c, I think I will just leave this paticular MinGW build issue for now.

WIthout -c, both the mingw64 binary and VS2022 x64 (MSVC64) binary of git main works until 230400 baud. I can check the LED blinking to see if the erase (LED OFF) or programming (LED blinking) is really working or not. And it is working.

PS>.\avrdude_git -c serialupdi -P COM41 -p avr64dd32 -b 230400 -e
avrdude_git: AVR device initialized and ready to accept instructions
avrdude_git: device signature = 0x1e961a (probably avr64dd32)
avrdude_git: erasing chip

avrdude_git done.  Thank you.

PS>.\avrdude_git -c serialupdi -P COM41 -p avr64dd32 -b 230400 -U .\sleep.hex
avrdude_git: AVR device initialized and ready to accept instructions
avrdude_git: device signature = 0x1e961a (probably avr64dd32)
avrdude_git: Note: flash memory has been specified, an erase cycle will be performed.
             To disable this feature, specify the -D option.
avrdude_git: erasing chip

avrdude_git: processing -U flash:w:.\sleep.hex:i
avrdude_git: reading input file .\sleep.hex for flash
             with 276 bytes in 1 section within [0, 0x113]
             using 1 page and 236 pad bytes
avrdude_git: writing 276 bytes flash ...
Writing | ################################################## | 100% 0.09 s
avrdude_git: 276 bytes of flash written
avrdude_git: verifying flash memory against .\sleep.hex
Reading | ################################################## | 100% 0.04 s
avrdude_git: 276 bytes of flash verified

avrdude_git done.  Thank you.

PS>.\avrdude_git -c serialupdi -P COM41 -p avr64dd32 -b 230400
avrdude_git: AVR device initialized and ready to accept instructions
avrdude_git: device signature = 0x1e961a (probably avr64dd32)

avrdude_git done.  Thank you.

As per the following documentation from @SpenceKonde, for DxCore, 57600bps works across different adapters.
https://github.com/SpenceKonde/AVR-Guidance/blob/master/UPDI/jtag2updi.md

57600 baud maximizes compatibility with suboptimal adapters and/or wiring.

230400 baud is the "standard" speed for uploading, and is supported by all serial adapters I am aware of.

345600 baud (1.5x 230400) works out to be about the maximum baud rate for continuous writing, but not all serial adapters support it.

460800 baud for HT42B435 - this is a special workaround for the HT42B435

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

As there is no issue with -c, I think I will just leave this paticular MinGW build issue for now.

Looks like this is very specific to MSYS2 mingw compiler. I just tested Arduino-packing build of avrdude 7.2 mingw32 release and my own git main build using cross-compiling, there are no issues with -v or -vvvv. So I think I will not debug further.

Arduino-packing official build of avrdude 7.2 release
https://github.com/arduino/avrdude-packing/releases/tag/7.2-arduino.1

My own git main build
https://github.com/mcuee/avrdude-packing/releases/tag/snapshot_2023-10-24

PS>.\avrdude_git_arduino -c serialupdi -P COM41 -p avr64dd32 -b 230400 -vvvv

avrdude_git_arduino: Version 7.2-20231024 (d6c61f5)
                     Copyright the AVRDUDE authors;
                     see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

                     System wide configuration file is C:\work\avr\avrdude_test\avrdude_bin\avrdude.conf

                     Using Port                    : COM41
                     Using Programmer              : serialupdi
                     Overriding Baud Rate          : 230400
avrdude_git_arduino: opening serial port ...
avrdude_git_arduino: serial_baud_lookup(): using non-standard baud rate: 230400
avrdude_git_arduino: sending 1 bytes [0x00]
avrdude_git_arduino: send: . [00]
avrdude_git_arduino: recv: . [00]
                     AVR Part                      : AVR64DD32
                     RESET disposition             : dedicated
                     RETRY pulse                   : SCK
                     Serial program mode           : yes
                     Parallel program mode         : yes
                     Memory Detail                 :
...
                     Programmer Type : serialupdi
                     Description     : SerialUPDI
avrdude_git_arduino: STCS 0x08 to address 0x03
avrdude_git_arduino: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_git_arduino: send: U [55] . [c3] . [08]
avrdude_git_arduino: recv: U [55] . [c3] . [08]
avrdude_git_arduino: STCS 0x80 to address 0x02
avrdude_git_arduino: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_git_arduino: send: U [55] . [c2] . [80]
avrdude_git_arduino: recv: U [55] . [c2] . [80]
avrdude_git_arduino: LDCS from 0x00
avrdude_git_arduino: sending 2 bytes [0x55, 0x80]
avrdude_git_arduino: send: U [55] . [80]
avrdude_git_arduino: recv: U [55] . [80]
avrdude_git_arduino: recv: 0 [30]
avrdude_git_arduino: received 1 bytes [0x30]
avrdude_git_arduino: UDPI init OK
avrdude_git_arduino: UPDI link initialization OK
avrdude_git_arduino: LDCS from 0x0B
avrdude_git_arduino: sending 2 bytes [0x55, 0x8b]
avrdude_git_arduino: send: U [55] . [8b]
avrdude_git_arduino: recv: U [55] . [8b]
avrdude_git_arduino: recv: . [92]
avrdude_git_arduino: received 1 bytes [0x92]
avrdude_git_arduino: device is in SLEEP mode
avrdude_git_arduino: sending 2 bytes [0x55, 0xe6]
avrdude_git_arduino: send: U [55] . [e6]
avrdude_git_arduino: recv: U [55] . [e6]
avrdude_git_arduino: recv: A [41] V [56] R [52]   [20]   [20]   [20]   [20]   [20] P [50] : [3a] 2 [32] D [44] : [3a] 1 [31] - [2d] 3 [33] M [4d] 2 [32]   [20] ( [28] A [41] 3 [33] . [2e] K [4b] V [56] 0 [30] 0 [30] K [4b] . [2e] 0 [30] ) [29] . [00]
avrdude_git_arduino: received 32 bytes [0x41, 0x56, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x3a, 0x32, 0x44, 0x3a, 0x31, 0x2d, 0x33, 0x4d, 0x32, 0x20, 0x28, 0x41, 0x33, 0x2e, 0x4b, 0x56, 0x30, 0x30, 0x4b, 0x2e, 0x30, 0x29, 0x00]
avrdude_git_arduino: received SIB: [AVR     P:2D:1-3M2 (A3.KV00K.0)]
avrdude_git_arduino: Device family ID: AVR
avrdude_git_arduino: NVM interface: P:2
avrdude_git_arduino: Debug interface: D:1
avrdude_git_arduino: PDI oscillator: 3M2
avrdude_git_arduino: Extra information: (A3.KV00K.0)
avrdude_git_arduino: NVM type 2: 24-bit, word oriented write
avrdude_git_arduino: reading 1 bytes from 0x000F01
avrdude_git_arduino: ST_PTR to 0x000F01
avrdude_git_arduino: sending 5 bytes [0x55, 0x6a, 0x01, 0x0f, 0x00]
avrdude_git_arduino: send: U [55] j [6a] . [01] . [0f] . [00]
avrdude_git_arduino: recv: U [55] j [6a] . [01] . [0f] . [00]
avrdude_git_arduino: recv: @ [40]
avrdude_git_arduino: received 1 bytes [0x40]
avrdude_git_arduino: LD8 from ptr++
avrdude_git_arduino: sending 2 bytes [0x55, 0x24]
avrdude_git_arduino: send: U [55] $ [24]
avrdude_git_arduino: recv: U [55] $ [24]
avrdude_git_arduino: recv: . [13]
avrdude_git_arduino: received 1 bytes [0x13]
avrdude_git_arduino: Received chip silicon revision 0x13
avrdude_git_arduino: Chip silicon revision: 1.3
avrdude_git_arduino: STCS 0x08 to address 0x03
avrdude_git_arduino: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_git_arduino: send: U [55] . [c3] . [08]
avrdude_git_arduino: recv: U [55] . [c3] . [08]
avrdude_git_arduino: STCS 0x80 to address 0x02
avrdude_git_arduino: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_git_arduino: send: U [55] . [c2] . [80]
avrdude_git_arduino: recv: U [55] . [c2] . [80]
avrdude_git_arduino: LDCS from 0x00
avrdude_git_arduino: sending 2 bytes [0x55, 0x80]
avrdude_git_arduino: send: U [55] . [80]
avrdude_git_arduino: recv: U [55] . [80]
avrdude_git_arduino: recv: 0 [30]
avrdude_git_arduino: received 1 bytes [0x30]
avrdude_git_arduino: UDPI init OK
avrdude_git_arduino: entering NVM programming mode
avrdude_git_arduino: LDCS from 0x0B
avrdude_git_arduino: sending 2 bytes [0x55, 0x8b]
avrdude_git_arduino: send: U [55] . [8b]
avrdude_git_arduino: recv: U [55] . [8b]
avrdude_git_arduino: recv: . [92]
avrdude_git_arduino: received 1 bytes [0x92]
avrdude_git_arduino: UPDI writing key
avrdude_git_arduino: sending 2 bytes [0x55, 0xe0]
avrdude_git_arduino: send: U [55] . [e0]
avrdude_git_arduino: recv: U [55] . [e0]
avrdude_git_arduino: sending 8 bytes [0x20, 0x67, 0x6f, 0x72, 0x50, 0x4d, 0x56, 0x4e]
avrdude_git_arduino: send:   [20] g [67] o [6f] r [72] P [50] M [4d] V [56] N [4e]
avrdude_git_arduino: recv:   [20] g [67] o [6f] r [72] P [50] M [4d] V [56] N [4e]
avrdude_git_arduino: LDCS from 0x07
avrdude_git_arduino: sending 2 bytes [0x55, 0x87]
avrdude_git_arduino: send: U [55] . [87]
avrdude_git_arduino: recv: U [55] . [87]
avrdude_git_arduino: recv: . [10]
avrdude_git_arduino: received 1 bytes [0x10]
avrdude_git_arduino: key status: 0x10
avrdude_git_arduino: sending reset request
avrdude_git_arduino: STCS 0x59 to address 0x08
avrdude_git_arduino: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_git_arduino: send: U [55] . [c8] Y [59]
avrdude_git_arduino: recv: U [55] . [c8] Y [59]
avrdude_git_arduino: sending release reset request
avrdude_git_arduino: STCS 0x00 to address 0x08
avrdude_git_arduino: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_git_arduino: send: U [55] . [c8] . [00]
avrdude_git_arduino: recv: U [55] . [c8] . [00]
avrdude_git_arduino: LDCS from 0x0B
avrdude_git_arduino: sending 2 bytes [0x55, 0x8b]
avrdude_git_arduino: send: U [55] . [8b]
avrdude_git_arduino: recv: U [55] . [8b]
avrdude_git_arduino: recv: 8 [38]
avrdude_git_arduino: received 1 bytes [0x38]
avrdude_git_arduino: LDCS from 0x0B
avrdude_git_arduino: sending 2 bytes [0x55, 0x8b]
avrdude_git_arduino: send: U [55] . [8b]
avrdude_git_arduino: recv: U [55] . [8b]
avrdude_git_arduino: recv: . [08]
avrdude_git_arduino: received 1 bytes [0x08]
avrdude_git_arduino: entered NVM programming mode
avrdude_git_arduino: AVR device initialized and ready to accept instructions
Reading |                                                    | 0% 0.00 s
avrdude_git_arduino: LDCS from 0x0B
avrdude_git_arduino: sending 2 bytes [0x55, 0x8b]
avrdude_git_arduino: send: U [55] . [8b]
avrdude_git_arduino: recv: U [55] . [8b]
avrdude_git_arduino: recv: . [08]
avrdude_git_arduino: received 1 bytes [0x08]
avrdude_git_arduino: LD from 0x001100
avrdude_git_arduino: sending 5 bytes [0x55, 0x08, 0x00, 0x11, 0x00]
avrdude_git_arduino: send: U [55] . [08] . [00] . [11] . [00]
avrdude_git_arduino: recv: U [55] . [08] . [00] . [11] . [00]
avrdude_git_arduino: recv: . [1e]
avrdude_git_arduino: received 1 bytes [0x1e]
avrdude_git_arduino: LD from 0x001101
avrdude_git_arduino: sending 5 bytes [0x55, 0x08, 0x01, 0x11, 0x00]
avrdude_git_arduino: send: U [55] . [08] . [01] . [11] . [00]
avrdude_git_arduino: recv: U [55] . [08] . [01] . [11] . [00]
avrdude_git_arduino: recv: . [96]
avrdude_git_arduino: received 1 bytes [0x96]
avrdude_git_arduino: LD from 0x001102
avrdude_git_arduino: sending 5 bytes [0x55, 0x08, 0x02, 0x11, 0x00]
avrdude_git_arduino: send: U [55] . [08] . [02] . [11] . [00]
avrdude_git_arduino: recv: U [55] . [08] . [02] . [11] . [00]
avrdude_git_arduino: recv: . [1a]
avrdude_git_arduino: received 1 bytes [0x1a]
Reading | ################################################## | 100% 0.01 s
avrdude_git_arduino: device signature = 0x1e961a (probably avr64dd32)
avrdude_git_arduino: leaving NVM programming mode
avrdude_git_arduino: sending reset request
avrdude_git_arduino: STCS 0x59 to address 0x08
avrdude_git_arduino: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_git_arduino: send: U [55] . [c8] Y [59]
avrdude_git_arduino: recv: U [55] . [c8] Y [59]
avrdude_git_arduino: sending release reset request
avrdude_git_arduino: STCS 0x00 to address 0x08
avrdude_git_arduino: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_git_arduino: send: U [55] . [c8] . [00]
avrdude_git_arduino: recv: U [55] . [c8] . [00]
avrdude_git_arduino: STCS 0x0C to address 0x03
avrdude_git_arduino: sending 3 bytes [0x55, 0xc3, 0x0c]
avrdude_git_arduino: send: U [55] . [c3] . [0c]
avrdude_git_arduino: recv: U [55] . [c3] . [0c]

avrdude_git_arduino done.  Thank you.

@askn37
Copy link
Contributor Author

askn37 commented Oct 28, 2023

Thoughts on silicon revision checking

Revision checking is currently implemented in four types: jtag3.c, jtagmkII.c, serialupdi.c, and stk500v2.c. Among these, jtag is called with optional functions such as "pgm->read_chip_rev". STK500/600 is also referenced after "program_enable". Before that, only serialupdi.c is referenced.

If you think about it, the revision information should be a clue to identifying the errata, which is her 4th byte in the 3-byte signature extension. Therefore, it stands to reason that there is a close relationship between signatures and amendments. It would be even more useful if they were displayed side by side in the console log.

I think it would be better and more consistent to implement serialupdi.c, similar to jtag*.c. I think that's the case based on main.c, what do you think?

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

@askn37

Reading chip revision is already done in PR #1474 by @MCUdude, for jtag3.c, jtagmkII.c, serialupdi.c, and stk500v2.c. So you are saying the implementation for serialupdi.c is different from the other three and you want to make it consistent, right?

@askn37
Copy link
Contributor Author

askn37 commented Oct 28, 2023

@mcuee

Yes, that's right.

By the way, I have often read REVID by writing it as below.

     memory "revid"
         size = 1;
         offset = 0x0f01;
         readsize = 1;
     ;

echo dump revid | avrdude -qt ...

There is a reason why I got into the habit of checking REVID.
The SIB of AVR32DA32 rev.A3 that I obtained in the past is

AVR_____P:2D:1-3

This is the same as AVR_DB and later, "AVR" + 5 spaces.

However, the SIB of AVR128DA28 rev.A7 that I ordered after that was

____AVR_P:2D:1-3

Same style as tinyAVR/megaAVR, 4 blank spaces + "AVR"? ? ?
(In addition, it was an error product that was not normally shipped because it had a large scratch caused by a failure to cut it with a diamond saw)

Apparently AVR128DA28/32/48/64 (DS40002183C) is this old style. AVR64DA28/32/48/64 (DS40002233B) and AVR32DA28/32/48 (DS40002228B) are different in some strange ways.

@dbuchwald
Copy link
Contributor

Guys, I'm sorry, but I feel a bit lost in these discussions, and I find them harder and harder to follow. Apologies if you expect my input on some of the topics brought up here, but at this point I can only react on certain trigger words :)

I noticed discussion about RTS/DTR and using it for resetting AVR - sounds like a good idea, but before you make changes to the code that handles it in SerialUPDI, please note that this additional setting (-x rtsdtr=[low|high]) was implemented specifically to enable aforementioned SerialUPDI programmer by MCUDude to toggle between UPDI and Serial mode. I'm talking about this device (which I'm also using, but only in SerialUPDI mode):

IMG_6434
IMG_6435

So, my point is that whatever you decide about using RTS/DTR lines, please keep in mind that there is at least one device in the wild that makes strong assumption as to what these signals are for, and compatibility, if possible, should be maintained.

Otherwise, if you need me to look at some code or test something - please tag me in the post, otherwise I might miss it.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

@dbuchwald

I think the only thing for you now is to take a look at the log from @askn37 here to see if you have any concerns or not.

There is a warning in his log.

avrdude: forcing serial DTR/RTS handshake lines HIGH
avrdude: NVM type 3: 24-bit, page oriented
avrdude: entering NVM programming mode
avrdude serialupdi_enter_progmode() error: key was not accepted
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e961f (probably avr64ea32)

@askn37 mentions the following which may or may not be an issue.

This indicates that the UPDI layer has not yet fully woken up when reading "UPDI_CS_ASI_KEY_STATUS" after sending "UPDI_SIB_128", or that key activation took longer than usual. I'm sure avrdude is impatient. There probably aren't any other concerns. thank you.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

Thoughts on silicon revision checking

Revision checking is currently implemented in four types: jtag3.c, jtagmkII.c, serialupdi.c, and stk500v2.c. Among these, jtag is called with optional functions such as "pgm->read_chip_rev". STK500/600 is also referenced after "program_enable". Before that, only serialupdi.c is referenced.

If you think about it, the revision information should be a clue to identifying the errata, which is her 4th byte in the 3-byte signature extension. Therefore, it stands to reason that there is a close relationship between signatures and amendments. It would be even more useful if they were displayed side by side in the console log.

I think it would be better and more consistent to implement serialupdi.c, similar to jtag*.c. I think that's the case based on main.c, what do you think?

@askn37

You are welcome to come out with a PR to make serialupdi.c handling of chip revision ID to be more consistent with the others. Thanks.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

So, my point is that whatever you decide about using RTS/DTR lines, please keep in mind that there is at least one device in the wild that makes strong assumption as to what these signals are for, and compatibility, if possible, should be maintained.

So there will be three cases.

  1. typical serialupdi programmer which has only three lines --> VCC, GND and UPDI.
  2. @MCUdude's specific SerialUPDI programmer which has dual mode (UPDI and UART mode). The code currently supports this with -x rtsdtr=[low|high.
  3. Other UPDI programmers which may provide DTR/RTS pins to reset the MCU.

@dbuchwald and @stefanrueger
One possibilty is to use a different -x generic_rts and -x generic_dtr for the 3rd type, if we want to support the 3rd type.

@dbuchwald
Copy link
Contributor

@stefanrueger

I get the impression that updi_set_rtsdtr_mode() is meant for communication via DTR and for reset via RTS. If this is the case, I think we should separate rts and dtr handling into two functions serial_set_rts() and serial_set_dtr() to manage the signals independently.

The only reason this was implemented was to support the dual-mode operation of MCUdude's programmer. I don't remember why it was both RTS and DTR at the same time, but maybe it could be separated.

I'm currently going over the very long e-mail discussion between myself and MCUdude about the quirks of serial interfaces, and I found some small things that might help you anticipate potential issues:

The reason why I asked you to implement "pull DTR/RTS low" during the Avrdude session was that I could use this signal on the programmer to automatically switch between UPDI and serial mode. I think we both agree that this is a nice feature. This would work because DTR/RTS signal is high when a serial monitor is open. Now we have a signal that switches between high and low, indicating what "mode" we are in.

Or so I thought...

It turns out that the statement above is correct if you're using a Mac as I do. On Windows and Linux (I've tested with Ubuntu), the DTR/RTS signal is actually pulled low when a serial connection is open. This is the opposite of what's happening on my mac! There are even people asking about this on Stack Overflow:
https://stackoverflow.com/questions/17601142/os-x-serial-port-open-with-dtr-low

After more research, I discovered that this is probably a bug in the Apple CH340 driver that ships with MacOS. After upgrading the driver to the one from WCH (the manufacturer of CH340 chips), this problem is solved, and DTR/RTS stays low when a serial session is active.

Also another thing is that the 300-baud workaround I borrowed from pymcuprog (and the reason for it was that tcsendbreak not being portable) can cause pulses on these DTR/RTS lines in some cases:

The reason you were seeing these pulses during AVRDUDE session (usually only at the beginning), is that there is somewhat weird code in the serialupdi driver. I took it directly from pymcuprog, and I must say I didn’t like it a lot, but assumed it necessary. See, NVM programming interface works as very simple and limited state machine. Should something go wrong it simply clams up and stops responding to any requests at all. The only way to get it to work again is to force NVM controller reset by sending two consecutive serial break messages around 24ms each. The way it is implemented in pymcuprog (and this is the part I didn’t like) is that connection mode is changed to 300 baud 8E1 and 0x00 value is sent out. 0x00 encoded in 8E1 at 300 baud translates to approx. 24ms low signal and does the job. I copied this functionality hoping to look into it some day and possibly fix it in my implementation. Now, what happens is in AVRDUDE is that the code responsible for changing connection speed actually disconnects serial and connects it again, changing some internal OS driver structures. These disconnect/connect events were causing strange pulses you saw.

Again, I'm not trying to say that my implementation is perfect and should not be changed. Feel free to change it any way you want, and if you need my help, I will provide it.

What I am saying is that when I worked on it almost two years ago I went through a lot of testing in different environments, and some discrepancies between them were deal-breakers for some pretty good ideas. That being said, context might have changed during these two years, some of these issues might have been fixed. Maybe the MacOS bug has been fixed in the meantime.

@askn37
Copy link
Contributor Author

askn37 commented Oct 28, 2023

*** HEADS UP ***

Using DTR/RTS instead of GPIO will definitely have side effects as it is not compliant with regulations such as RS232C. Don't expect 100% compatibility. . . . But it's convenient, isn't it?

Arduino IDE Serial Monitor (Windows/macos/Linux)

This would be a good standard to use. DTR/RTS is not asserted. The behavior when opened varies depending on the OS and driver. In most cases, RTS=LOW and DTR=LOW when open and RTS=HIGH and DTR=HIGH when closed. So if your target has an auto-reset circuit (series capacitor), it will reset every time you open it again.

The CH330/CH340 series was well received, so the manufacturer improved the driver so that RTS=LOW when opened.

Screen and MINICOM (*UNIX)

When opened, asserts DTR/RTS. The UART switching implementation for "microUPDI adapter" will not work properly because DTR = HIGH and RTS = HIGH. Workarounds include turning off "hardware flow", temporarily setting it to 0bps, and running stty. (I'm not good at it so I don't know the details)

TeraTerm (Windows)

DTR/RTS is normally not asserted. You can turn DTR/RTS on and off individually as needed using the "hardware flow" or using a macro file.

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

*** HEADS UP ***

Using DTR/RTS instead of GPIO will definitely have side effects as it is not compliant with regulations such as RS232C. Don't expect 100% compatibility. . . . But it's convenient, isn't it?

To be honest, I think we (avrdude project) do not really need to take care of the serial monitor function. Rather we need to take care of the programming function which may invovle chip reset.

There are special cases for serialupdi which takes care of @MCUdude's paticular design.

For jtag2updi, it is the same siutation, only certain type of cictuits will work with -xrtsdtr. My Uno clones do not work.

If we really want to be more generic, I think we need generic dtr, rts and at least cts handling to give the user more freedoms. But then we can only cater for typical circuits and probably not for all cases.

So far the following PR seems to work fine for different platforms. The focus is the bootloaders (urclock, optiboot and wiring) programming where proper chip reset is important. The focus is not the UART monitor.

@stefanrueger
Copy link
Collaborator

stefanrueger commented Oct 28, 2023

OK, I learned a few things about the way different OS assert DTR/RTS during the low-level open() call of the serial port; I also learned about the behaviour of several terminal programs and how it affects some auto-reset circuits. My take-away is that we should improve the documentation of this aspect in doc/avrdude.texi, for example by providing a section 5.5 Auto-reset boards with information from #1529 (comment). I'd like to invite @askn37 to start a PR on this. I would be happy to contribute to it. And don't worry about language @askn37: your English is crisp and clear.

By the way, I have often read REVID by writing it as below.

     memory "revid"
         size = 1;
         offset = 0x0f01;
         readsize = 1;
     ;

echo dump revid | avrdude -qt ...

@askn37 Pro Tip: try using avrdude -qT "read io 0xf01 1" instead. See this discussion why we implemented the general io memory rather than (many) memories like revid. I plan a future PR that adds a new terminal command register and the symbolic layout of the register file for each part, so you can query register syscfg.revid instead of read io 0xf01.

Other than this, we probably might want to close the issue as the main problem that NVMCTRL v3 should use 24 bit is solved.

@stefanrueger
Copy link
Collaborator

@dbuchwald Thanks for explaining the motivation and history of the rtsdts handling. That is really helpful!

@askn37
Copy link
Contributor Author

askn37 commented Oct 28, 2023

@mcuee

To be honest, I think we (avrdude project) do not really need to take care of the serial monitor function. Rather we need to take care of the programming function which may invovle chip reset.

Ok, I agree with that policy.
(However, since the main purpose of UART passthrough is to allow "programming writer" and "serial monitor" to coexist, you should keep in mind that there are some combinations that will not work as expected. In that case, "programming writer" must be given priority.)

@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

Other than this, we probably might want to close the issue as the main problem that NVMCTRL v3 should use 24 bit is solved.

I agree.

@mcuee mcuee closed this as completed Oct 28, 2023
@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

@mcuee

To be honest, I think we (avrdude project) do not really need to take care of the serial monitor function. Rather we need to take care of the programming function which may invovle chip reset.

Ok, I agree with that policy. (However, since the main purpose of UART passthrough is to allow "programming writer" and "serial monitor" to coexist, you should keep in mind that there are some combinations that will not work as expected. In that case, "programming writer" must be given priority.)

Yes, I agree with you here.

@mcuee mcuee removed the enhancement New feature or request label Oct 28, 2023
@mcuee
Copy link
Collaborator

mcuee commented Oct 28, 2023

Just want to mention the sleep MinGW issue is indeed specific to MSYS2 mingw compiler. I just built avrdude using MSYS2 clang64 and it works fine.

PS> .\avrdude_git_clang64.exe -c serialupdi -P COM41 -p avr64dd32 -vvvv

avrdude_git_clang64: Version 7.2-20231024 (d6c61f5f)
                     Copyright the AVRDUDE authors;
                     see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

                     System wide configuration file is C:\work\avr\avrdude_test\avrdude_bin\avrdude.conf

                     Using Port                    : COM41
                     Using Programmer              : serialupdi
avrdude_git_clang64: opening serial port ...
avrdude_git_clang64: sending 1 bytes [0x00]
avrdude_git_clang64: send: . [00]
avrdude_git_clang64: recv: . [00]
                     AVR Part                      : AVR64DD32
                     RESET disposition             : dedicated
                     RETRY pulse                   : SCK
                     Serial program mode           : yes
                     Parallel program mode         : yes
                     Memory Detail                 :
...
avrdude_git_clang64: STCS 0x08 to address 0x03
avrdude_git_clang64: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_git_clang64: send: U [55] . [c3] . [08]
avrdude_git_clang64: recv: U [55] . [c3] . [08]
avrdude_git_clang64: STCS 0x80 to address 0x02
avrdude_git_clang64: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_git_clang64: send: U [55] . [c2] . [80]
avrdude_git_clang64: recv: U [55] . [c2] . [80]
avrdude_git_clang64: LDCS from 0x00
avrdude_git_clang64: sending 2 bytes [0x55, 0x80]
avrdude_git_clang64: send: U [55] . [80]
avrdude_git_clang64: recv: U [55] . [80]
avrdude_git_clang64: recv: 0 [30]
avrdude_git_clang64: received 1 bytes [0x30]
avrdude_git_clang64: UDPI init OK
avrdude_git_clang64: UPDI link initialization OK
avrdude_git_clang64: LDCS from 0x0B
avrdude_git_clang64: sending 2 bytes [0x55, 0x8b]
avrdude_git_clang64: send: U [55] . [8b]
avrdude_git_clang64: recv: U [55] . [8b]
avrdude_git_clang64: recv: . [92]
avrdude_git_clang64: received 1 bytes [0x92]
avrdude_git_clang64: device is in SLEEP mode
avrdude_git_clang64: sending 2 bytes [0x55, 0xe6]
avrdude_git_clang64: send: U [55] . [e6]
avrdude_git_clang64: recv: U [55] . [e6]
avrdude_git_clang64: recv: A [41] V [56] R [52]   [20]   [20]   [20]   [20]   [20] P [50] : [3a] 2 [32] D [44] : [3a] 1 [31] - [2d] 3 [33] M [4d] 2 [32]   [20] ( [28] A [41] 3 [33] . [2e] K [4b] V [56] 0 [30] 0 [30] K [4b] . [2e] 0 [30] ) [29] . [00]
avrdude_git_clang64: received 32 bytes [0x41, 0x56, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x3a, 0x32, 0x44, 0x3a, 0x31, 0x2d, 0x33, 0x4d, 0x32, 0x20, 0x28, 0x41, 0x33, 0x2e, 0x4b, 0x56, 0x30, 0x30, 0x4b, 0x2e, 0x30, 0x29, 0x00]
avrdude_git_clang64: received SIB: [AVR     P:2D:1-3M2 (A3.KV00K.0)]
avrdude_git_clang64: Device family ID: AVR
avrdude_git_clang64: NVM interface: P:2
avrdude_git_clang64: Debug interface: D:1
avrdude_git_clang64: PDI oscillator: 3M2
avrdude_git_clang64: Extra information: (A3.KV00K.0)
avrdude_git_clang64: NVM type 2: 24-bit, word oriented write
avrdude_git_clang64: reading 1 bytes from 0x000F01
avrdude_git_clang64: ST_PTR to 0x000F01
avrdude_git_clang64: sending 5 bytes [0x55, 0x6a, 0x01, 0x0f, 0x00]
avrdude_git_clang64: send: U [55] j [6a] . [01] . [0f] . [00]
avrdude_git_clang64: recv: U [55] j [6a] . [01] . [0f] . [00]
avrdude_git_clang64: recv: @ [40]
avrdude_git_clang64: received 1 bytes [0x40]
avrdude_git_clang64: LD8 from ptr++
avrdude_git_clang64: sending 2 bytes [0x55, 0x24]
avrdude_git_clang64: send: U [55] $ [24]
avrdude_git_clang64: recv: U [55] $ [24]
avrdude_git_clang64: recv: . [13]
avrdude_git_clang64: received 1 bytes [0x13]
avrdude_git_clang64: Received chip silicon revision 0x13
avrdude_git_clang64: Chip silicon revision: 1.3
avrdude_git_clang64: STCS 0x08 to address 0x03
avrdude_git_clang64: sending 3 bytes [0x55, 0xc3, 0x08]
avrdude_git_clang64: send: U [55] . [c3] . [08]
avrdude_git_clang64: recv: U [55] . [c3] . [08]
avrdude_git_clang64: STCS 0x80 to address 0x02
avrdude_git_clang64: sending 3 bytes [0x55, 0xc2, 0x80]
avrdude_git_clang64: send: U [55] . [c2] . [80]
avrdude_git_clang64: recv: U [55] . [c2] . [80]
avrdude_git_clang64: LDCS from 0x00
avrdude_git_clang64: sending 2 bytes [0x55, 0x80]
avrdude_git_clang64: send: U [55] . [80]
avrdude_git_clang64: recv: U [55] . [80]
avrdude_git_clang64: recv: 0 [30]
avrdude_git_clang64: received 1 bytes [0x30]
avrdude_git_clang64: UDPI init OK
avrdude_git_clang64: entering NVM programming mode
avrdude_git_clang64: LDCS from 0x0B
avrdude_git_clang64: sending 2 bytes [0x55, 0x8b]
avrdude_git_clang64: send: U [55] . [8b]
avrdude_git_clang64: recv: U [55] . [8b]
avrdude_git_clang64: recv: . [92]
avrdude_git_clang64: received 1 bytes [0x92]
avrdude_git_clang64: UPDI writing key
avrdude_git_clang64: sending 2 bytes [0x55, 0xe0]
avrdude_git_clang64: send: U [55] . [e0]
avrdude_git_clang64: recv: U [55] . [e0]
avrdude_git_clang64: sending 8 bytes [0x20, 0x67, 0x6f, 0x72, 0x50, 0x4d, 0x56, 0x4e]
avrdude_git_clang64: send:   [20] g [67] o [6f] r [72] P [50] M [4d] V [56] N [4e]
avrdude_git_clang64: recv:   [20] g [67] o [6f] r [72] P [50] M [4d] V [56] N [4e]
avrdude_git_clang64: LDCS from 0x07
avrdude_git_clang64: sending 2 bytes [0x55, 0x87]
avrdude_git_clang64: send: U [55] . [87]
avrdude_git_clang64: recv: U [55] . [87]
avrdude_git_clang64: recv: . [10]
avrdude_git_clang64: received 1 bytes [0x10]
avrdude_git_clang64: key status: 0x10
avrdude_git_clang64: sending reset request
avrdude_git_clang64: STCS 0x59 to address 0x08
avrdude_git_clang64: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_git_clang64: send: U [55] . [c8] Y [59]
avrdude_git_clang64: recv: U [55] . [c8] Y [59]
avrdude_git_clang64: sending release reset request
avrdude_git_clang64: STCS 0x00 to address 0x08
avrdude_git_clang64: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_git_clang64: send: U [55] . [c8] . [00]
avrdude_git_clang64: recv: U [55] . [c8] . [00]
avrdude_git_clang64: LDCS from 0x0B
avrdude_git_clang64: sending 2 bytes [0x55, 0x8b]
avrdude_git_clang64: send: U [55] . [8b]
avrdude_git_clang64: recv: U [55] . [8b]
avrdude_git_clang64: recv: 8 [38]
avrdude_git_clang64: received 1 bytes [0x38]
avrdude_git_clang64: LDCS from 0x0B
avrdude_git_clang64: sending 2 bytes [0x55, 0x8b]
avrdude_git_clang64: send: U [55] . [8b]
avrdude_git_clang64: recv: U [55] . [8b]
avrdude_git_clang64: recv: . [08]
avrdude_git_clang64: received 1 bytes [0x08]
avrdude_git_clang64: entered NVM programming mode
avrdude_git_clang64: AVR device initialized and ready to accept instructions
Reading |                                                    | 0% 0.00 s
avrdude_git_clang64: LDCS from 0x0B
avrdude_git_clang64: sending 2 bytes [0x55, 0x8b]
avrdude_git_clang64: send: U [55] . [8b]
avrdude_git_clang64: recv: U [55] . [8b]
avrdude_git_clang64: recv: . [08]
avrdude_git_clang64: received 1 bytes [0x08]
avrdude_git_clang64: LD from 0x001100
avrdude_git_clang64: sending 5 bytes [0x55, 0x08, 0x00, 0x11, 0x00]
avrdude_git_clang64: send: U [55] . [08] . [00] . [11] . [00]
avrdude_git_clang64: recv: U [55] . [08] . [00] . [11] . [00]
avrdude_git_clang64: recv: . [1e]
avrdude_git_clang64: received 1 bytes [0x1e]
avrdude_git_clang64: LD from 0x001101
avrdude_git_clang64: sending 5 bytes [0x55, 0x08, 0x01, 0x11, 0x00]
avrdude_git_clang64: send: U [55] . [08] . [01] . [11] . [00]
avrdude_git_clang64: recv: U [55] . [08] . [01] . [11] . [00]
avrdude_git_clang64: recv: . [96]
avrdude_git_clang64: received 1 bytes [0x96]
avrdude_git_clang64: LD from 0x001102
avrdude_git_clang64: sending 5 bytes [0x55, 0x08, 0x02, 0x11, 0x00]
avrdude_git_clang64: send: U [55] . [08] . [02] . [11] . [00]
avrdude_git_clang64: recv: U [55] . [08] . [02] . [11] . [00]
avrdude_git_clang64: recv: . [1a]
avrdude_git_clang64: received 1 bytes [0x1a]
Reading | ################################################## | 100% 0.02 s
avrdude_git_clang64: device signature = 0x1e961a (probably avr64dd32)
avrdude_git_clang64: leaving NVM programming mode
avrdude_git_clang64: sending reset request
avrdude_git_clang64: STCS 0x59 to address 0x08
avrdude_git_clang64: sending 3 bytes [0x55, 0xc8, 0x59]
avrdude_git_clang64: send: U [55] . [c8] Y [59]
avrdude_git_clang64: recv: U [55] . [c8] Y [59]
avrdude_git_clang64: sending release reset request
avrdude_git_clang64: STCS 0x00 to address 0x08
avrdude_git_clang64: sending 3 bytes [0x55, 0xc8, 0x00]
avrdude_git_clang64: send: U [55] . [c8] . [00]
avrdude_git_clang64: recv: U [55] . [c8] . [00]
avrdude_git_clang64: STCS 0x0C to address 0x03
avrdude_git_clang64: sending 3 bytes [0x55, 0xc3, 0x0c]
avrdude_git_clang64: send: U [55] . [c3] . [0c]
avrdude_git_clang64: recv: U [55] . [c3] . [0c]

avrdude_git_clang64 done.  Thank you.

@askn37
Copy link
Contributor Author

askn37 commented Oct 28, 2023

I'm looking into "serialupdi_initialize".

Things I can do right away:

The "read chip silicon revision" process that inspired this investigation can be improved by simply moving it to the end of the function. Since "serialupdi_enter_progmode" is called before that, "UPDI_ASI_SYS_STATUS_NVMPROG" will be true and will not be affected.
(However, if "LOCKSTATUS=1", NVMPROG will fail, so you should not investigate)

Strange part:

"updi_read_sib" is called after checking "UPDI_ASI_SYS_STATUS". This is strange.
This is because "UPDI_ASI_SYS_STATUS" expands with each version of his NVMCTRL. v0 has meaning on 5 bits, v2 has meaning on 6 bits, and v3 has meaning on all 8 bits. Therefore, you need to check the version of NVMCTRL by calling 'updi_read_sib' and reading 'UPDI_ASI_SYS_STATUS'.
There are no particular problems with v2. However, v3 added an important "BOOTDONE" bit. Set to 1 when the CPU completes the "power-on reset" boot process. Otherwise, you are not ready to run "serialupdi_enter_progmode". So you have to read "UPDI_ASI_SYS_STATUS" again and wait until it becomes 1, or try a few times and abort on timeout. And that should be done before any other investigation.

What I know:

For NVMCTRLv0/2, it is safe to run "serialupdi_enter_progmode" when "RSTSYS=0", "INSLEEP=any", "NVMPROG=any", "UROWPROG=0", "LOCKSTATUS=0". v3 also requires "BOOTDONE=1".
(At the same time, for v3, this may make it less susceptible to the negative effects of DTR/RTS control.)
('INSLEEP=1' can be ignored as 'ASI_RESET' is used to enable 'NVMPROG_KEY'. However, at this stage if 'NVMPROG=1' use 'RSTSYS =0') is needed.)

@mcuee
Copy link
Collaborator

mcuee commented Oct 29, 2023

Things I can do right away:

The "read chip silicon revision" process that inspired this investigation can be improved by simply moving it to the end of the function. Since "serialupdi_enter_progmode" is called before that, "UPDI_ASI_SYS_STATUS_NVMPROG" will be true and will not be affected.
(However, if "LOCKSTATUS=1", NVMPROG will fail, so you should not investigate)

@askn37

I think this is safe to do. PR is welcome.

@mcuee
Copy link
Collaborator

mcuee commented Oct 29, 2023

Strange part:

"updi_read_sib" is called after checking "UPDI_ASI_SYS_STATUS". This is strange. This is because "UPDI_ASI_SYS_STATUS" expands with each version of his NVMCTRL. v0 has meaning on 5 bits, v2 has meaning on 6 bits, and v3 has meaning on all 8 bits. Therefore, you need to check the version of NVMCTRL by calling 'updi_read_sib' and reading 'UPDI_ASI_SYS_STATUS'. There are no particular problems with v2. However, v3 added an important "BOOTDONE" bit. Set to 1 when the CPU completes the "power-on reset" boot process. Otherwise, you are not ready to run "serialupdi_enter_progmode". So you have to read "UPDI_ASI_SYS_STATUS" again and wait until it becomes 1, or try a few times and abort on timeout. And that should be done before any other investigation.

What I know:

For NVMCTRLv0/2, it is safe to run "serialupdi_enter_progmode" when "RSTSYS=0", "INSLEEP=any", "NVMPROG=any", "UROWPROG=0", "LOCKSTATUS=0". v3 also requires "BOOTDONE=1". (At the same time, for v3, this may make it less susceptible to the negative effects of DTR/RTS control.) ('INSLEEP=1' can be ignored as 'ASI_RESET' is used to enable 'NVMPROG_KEY'. However, at this stage if 'NVMPROG=1' use 'RSTSYS =0') is needed.)

@dbuchwald
Please review this part and comment. Thanks.

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

5 participants