Giter VIP home page Giter VIP logo

pymcuprog's Introduction

MCHP

pymcuprog - Python MCU programmer

pymcuprog is a Python utility for programming various Microchip MCU devices using Microchip CMSIS-DAP based debuggers

Install using pip from pypi:

pip install pymcuprog

Browse source code on github

Read API documentation on github

Read the changelog on github

Usage

pymcuprog can be used as a command-line interface or a library

CLI help

For more help with using pymcuprog CLI see help

CLI examples

When installed using pip, pymcuprog CLI is located in the Python scripts folder.

Test connectivity by reading the device ID using Curiosity Nano:

pymcuprog ping

Erase memories then write contents of an Intel(R) hex file to flash using Curiosity Nano (pymcuprog does NOT automatically erase before writing):

pymcuprog erase
pymcuprog write -f app.hex

Erase memories and write an Intel hex file (using the --erase switch):

pymcuprog write -f app.hex --erase

Erase memories, write an Intel hex file and verify the content:

pymcuprog write -f app.hex --erase --verify

Serial port UPDI (pyupdi)

The AVR UPDI interface implements a UART protocol, which means that it can be used by simply connecting TX and RX pins of a serial port together with the UPDI pin; with a series resistor (eg: 1k) between TX and UPDI to handle contention. (This configuration is also known as "pyupdi".) Be sure to connect a common ground, and use a TTL serial adapter running at the same voltage as the AVR device.

                        Vcc                     Vcc
                        +-+                     +-+
                         |                       |
 +---------------------+ |                       | +--------------------+
 | Serial port         +-+                       +-+  AVR device        |
 |                     |      +----------+         |                    |
 |                  TX +------+   1k     +---------+ UPDI               |
 |                     |      +----------+    |    |                    |
 |                     |                      |    |                    |
 |                  RX +----------------------+    |                    |
 |                     |                           |                    |
 |                     +--+                     +--+                    |
 +---------------------+  |                     |  +--------------------+
                         +-+                   +-+
                         GND                   GND

pymcuprog includes this implementation as an alternative to USB/EDBG-based tools. To connect via a serial port, use the "uart" tool type with the UART switch in addition.

Example: checks connectivity by reading the device identity

pymcuprog ping -d avr128da48 -t uart -u com35

When using serial port UPDI it is optional to use:

  • --clk BAUD to specify the baud rate (defaults to 115200)
  • --uart-timeout TIMEOUT to specify the uart read timeout (defaults to 1.0s)

Increasing the baud rate can decrease programming time. Decreasing the timeout can decrease the initial connection latency when UPDI is disabled and does not respond. These parameters can be tweaked to suit the serial port adapter in use.

For more examples see pymcuprog on pypi.org

Library usage example

pymcuprog can be used as a library using its backend API. For example:

"""
Example usage of pymcuprog as a library to read the device ID
"""
# pymcuprog uses the Python logging module
import logging
logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.WARNING)

# Configure the session
from pymcuprog.backend import SessionConfig
sessionconfig = SessionConfig("atmega4808")

# Instantiate USB transport (only 1 tool connected)
from pymcuprog.toolconnection import ToolUsbHidConnection
transport = ToolUsbHidConnection()

# Instantiate backend
from pymcuprog.backend import Backend
backend = Backend()

# Connect to tool using transport
backend.connect_to_tool(transport)

# Start the session
backend.start_session(sessionconfig)

# Read the target device_id
device_id = backend.read_device_id()
print ("Device ID is {0:06X}".format(int.from_bytes(device_id, byteorder="little")))

Supported devices and tools

pymcuprog is primarily intended for use with PKOB nano (nEDBG) debuggers which are found on Curiosity Nano kits and other development boards. This means that it is continuously tested with a selection of AVR devices with UPDI interface as well as a selection of PIC devices. However since the protocol is compatible between all EDBG-based debuggers (pyedbglib) it is possible to use pymcuprog with a wide range of debuggers and devices, although not all device families/interfaces have been implemented.

Debuggers / Tools

pymcuprog supports:

  • PKOB nano (nEDBG) - on-board debugger on Curiosity Nano
  • MPLAB PICkit 4 In-Circuit Debugger (when in 'AVR mode')
  • MPLAB Snap In-Circuit Debugger (when in 'AVR mode')
  • Atmel-ICE
  • Power Debugger
  • EDBG - on-board debugger on Xplained Pro/Ultra
  • mEDBG - on-board debugger on Xplained Mini/Nano
  • JTAGICE3 (firmware version 3.0 or newer)

Although not all functionality is provided on all debuggers/boards. See device support section below.

Devices

pymcuprog supports:

  • All UPDI devices, whether mounted on kits or standalone
  • PIC devices mounted on Curiosity Nano kits, or similar board with PKOB nano (nEDBG) debugger

Other devices (eg ATmega328P, ATsamd21e18a) may be partially supported for experimental purposes

Notes for Linux® systems

This package uses pyedbglib and other libraries for USB transport and some udev rules are required. For details see the pyedbglib package: https://pypi.org/project/pyedbglib

pymcuprog's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pymcuprog's Issues

Feature request: ability to set serial timeout when using serial UPDI

Hi, I am using pymcuprog to program a chip as soon as it is connected by running in a loop. The default timeout passed to pyserial in the "physical.py" file is 1 second. This leads to each failed programming attempt spending several seconds waiting and makes the program very slow to begin programming once the chip is actually present. A parameter passed to ToolSerialConnection would solve this problem. (I have tested setting the timeout to 0.1 and have not encountered any issues)

Commandline option to explicitly set the DTR-line

For UPDI it would be very helpfull to have an cmd-line option to explicitly set the DTR-line of the attached serial device that is used for the UPDI. The DTR-line the should be held low or high as given on the cmd-line for the whole UPDI programming sequence.

Surely, this is kind of abuse of the DTR-line.

But this could be very helpfull in case one has a µC-board with two UPDI-capable µC on board. With this both µC could be programmed using the same serial line and without manual switching on the board.

Thanks.

UPDI initialisation failed- high-voltage mode

I am a new user of Attiny1614, and I recently learned to use a USB to TTL converter with pyupdi for burning. But I don’t know why the chip always fails to respond when some DIGITAL is read. At present, three 1614 chips have been locked...
S__1040637
螢幕擷取畫面 2021-08-12 032818

I see that there is UPDI high-voltage mode in pymcuprog that can be used, but is this right? Can't be used with USB to TTL switch?I have seen many boards with high-voltage mode, but it is not easy for me to get it.

There are DIY high-voltage mode recovery tutorials on the Internet, but none of them seem to be usable by 1614. What is more simple and specific? Is there a solution?

If someone can help me take a look at the program and tell me why the chip locks up, that would be really appreciated
螢幕擷取畫面 2021-08-12 032507

Prevent MCU from booting between pymcuprog commands?

I run two commands in sequence:

pymcuprog write  --tool uart --uart /dev/ttyUSB0 --clk 230400 --device avr128da32 --memory fuses --offset 0x05 --literal 0xCC
pymcuprog write  --tool uart --uart /dev/ttyUSB0 --clk 230400 --device avr128da32 --filename gnss_power_test_psmoo.hex --erase

and may add:

pymcuprog verify --tool uart --uart /dev/ttyUSB0 --clk 230400 --device avr128da32 --filename gnss_power_test_psmoo.hex

I do this very often. My problem is that between the two commands, the previous program starts running. I need it not to. Is there any way to prevent this programmatically, and keep the MCU from booting between commands? I think maybe the RESET line would need to be held LOW?

Thanks for this tool! It is immensely helpful.

AVR32DB48 device info missing

Along with a couple of others. I manually created one for my project, but someone pointed out that it should be captured here.

Executable pymcuprog

Hi @xedbg ,
I noticed you're the most active one here in this repo. So I just tagged you to catch your attention. Hopefully you agree that some sort of build script (to produce an executable) would be a great improvement of pymcuprog. Please have a look at my pull request:

#18

Kind regards,
Kristof

NO CMIS-DAP devices found

Hi i use :
pymcuprog ping
I get this output:
Connecting to anything possible
pyedbglib.hidtransport.hidtransportbase - ERROR - No CMSIS-DAP devices found.
Unable to connect to USB device

But the MLAB-SNAP is connected. with libusb i see this info
bus/device idVendor/idProduct
bus-0/\.\libusb0-0001--0x04d8-0x9018 04D8/9018

  • Manufacturer : Microchip Technology Incorporated
  • Product : MPLAB® Snap ICD
    so the device is connected.
    what can be the problem?
    Under windows device manager i see the Microchip WinUSB Device is working properly.

Upload time

Hi Is there any way to make the upload faster? My 17kB code takes 33 seconds to load. My next project has significantly more code...
many thanks for providing this, I hope you can speed it up.

Where is the source code?

At the time of writing this the repository has just a single commit from 1. November 2021. Where is the rest? I mean, there are older releases on PyPI and there are newer testing versions. Where can I find the source for all previous releases?

No connection to ATmega4809

I try want to program an atmega4809 on a arduino nano every with an raspberry pi 4B with it's tx/rx pins.(The usb cable is no option)
I wave used the the following command to find the device but there is no response.
$ sudo pymcuprog ping -d atmega4809 -t uart -u /dev/serial1 Connecting to SerialUPDI
When i quit the command with ^C after a long time of waiting for response i get the following message:
`
^CTraceback (most recent call last):
File "/usr/local/bin/pymcuprog", line 8, in
sys.exit(main())
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/pymcuprog.py", line 292, in main
return pymcuprog_main.pymcuprog(arguments)
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/pymcuprog_main.py", line 82, in pymcuprog
status = _start_session(backend, device_selected, args)
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/pymcuprog_main.py", line 562, in _start_session
backend.start_session(sessionconfig)
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/backend.py", line 376, in start_session
self.programmer.setup_device(
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/programmer.py", line 82, in setup_device
self.device_model = get_nvm_access_provider(self.transport,
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/nvm.py", line 44, in get_nvm_access_provider
accessprovider = NvmAccessProviderSerial(transport, device_info, baud=frequency, options=options)
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/nvmserialupdi.py", line 51, in init
self.avr = UpdiApplication(port, baud, self.dut)
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/serialupdi/application.py", line 72, in init
self.phy = UpdiPhysical(serialport, baud)
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/serialupdi/physical.py", line 31, in init
self.send([constants.UPDI_BREAK])
File "/usr/local/lib/python3.9/dist-packages/pymcuprog/serialupdi/physical.py", line 100, in send
self.ser.write(command)
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 622, in write
abort, ready, _ = select.select([self.pipe_abort_write_r], [self.fd], [], None)
KeyboardInterrupt

When i use serial0 i get this massage:
pymcuprog.pymcuprog - ERROR - Operation failed with error: (22, 'Invalid argument')
`
I have connected it like the the following image.

With kind regards.
schematic

Stef

MCP2221

Did anybody program successfully over UPDI with an MCP2221? I'd like to use MCP2221 in an project together with atmega4809. I'm running Win10 and get the following error:

pymcuprog erase -t uart -u COM6 -d atmega4809
pymcuprog.serialupdi.link - WARNING - Check failed
pymcuprog.serialupdi.link - WARNING - Check failed
Traceback (most recent call last):
File "c:\users\xxx\appdata\local\programs\python\python36\lib\runpy.py", line 193, in _run_module_as_main
"main", mod_spec)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python36\Scripts\pymcuprog.exe_main
.py", line 7, in
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\pymcuprog.py", line 285, in main
return pymcuprog_main.pymcuprog(arguments)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\pymcuprog_main.py", line 80, in pymcuprog
status = _start_session(backend, device_selected, args)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\pymcuprog_main.py", line 549, in _start_session
backend.start_session(sessionconfig)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\backend.py", line 366, in start_session
sessionconfig.interface_speed)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\programmer.py", line 83, in setup_device
options=self.options)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\nvm.py", line 42, in get_nvm_access_provider
accessprovider = NvmAccessProviderSerial(transport, device_info, baud=frequency, options=options)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\nvmserialupdi.py", line 51, in init
self.avr = UpdiApplication(port, baud, self.dut)
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\serialupdi\application.py", line 81, in init
datalink.init_datalink()
File "c:\users\xxx\appdata\local\programs\python\python36\lib\site-packages\pymcuprog\serialupdi\link.py", line 45, in init_datalink
raise PymcuprogError("UPDI initialisation failed")
pymcuprog.pymcuprog_errors.PymcuprogError: UPDI initialisation failed

  • Swapping RX/TX (just in case) didn't help
  • Tried the driver from the Microchip web site instead of the one installed by Windows automatically, no change
  • Testing the MCP2221 with an terminal program and loop back works fine
  • Flashing the atmega4809 with an CH340 works just fine

pymcuprog --version
pymcuprog version 3.10.2.133

pymcuprog.pymcuprog_main - ERROR - Operation failed with TypeError: a bytes-like object is required, not 'list'

I have observed the following:

$ pymcuprog -i updi -d atmega4809 --tool uart --uart /dev/ttyUSB0 read -m fuses -f fuses
Pinging device...
Ping response: 1E9651
Reading...
pymcuprog.pymcuprog_main - ERROR - Operation failed with TypeError: a bytes-like object is required, not 'list'
Done.

I believe the following line is at fault:

data = item.data

It should include a cast and be written as:

data = bytes(item.data)

Corrupted flash memory writes for Atmega328p with ISP interface

While trying to execute :

pymcuprog write  -f executable.hex --erase --verify -t atmelice -d atmega328p -i isp

The command always fails at flash memory verification step:

Connecting to any atmelice
Connected to Atmel-ICE CMSIS-DAP from ATMEL (serial number J42700040265)
Debugger firmware version 1.45.7
Debugger hardware revision 0
pymcuprog.nvm - WARNING - 
pymcuprog.nvm - WARNING - AVR-ISP/SPI stack is in Alpha state
pymcuprog.nvm - WARNING - Expect some features to be missing
pymcuprog.nvm - WARNING - 
Pinging device...
Ping response: 1E950F
Erasing device before writing from hex file...
Writing from hex file...
Writing flash...
Verifying flash...
pymcuprog.programmer - ERROR - Verify failed for flash memory:
pymcuprog.programmer - ERROR - Verify mismatch starting at location 0x000000: 0x0C vs 0xFF (is the memory section erased?)
Verification failed!

The mismatch location address is not always the same.

On the other hand, while trying to flash using MPLAB IPE with the same HW setup, and the same hex file, it always passes.

PyedbglibError: Unable to SET (failure code 0x11)

Hi,

I'm trying to connect my Atmel-ICE to my new AVR128DB28 DIP chips on a breadboard. I've never used pymcuprog before, and I'm getting an error message that I don't know how to debug:

klm@pisa ~> sudo pip show pymcuprog | head -n2
Name: pymcuprog
Version: 3.9.1.120
klm@pisa ~> sudo pip show pyedbglib | head -n2
Name: pyedbglib
Version: 2.18.2.75
klm@pisa ~> pacman -Qi libusb|head -n2
Name            : libusb
Version         : 1.0.24-2
klm@pisa ~> sudo pymcuprog ping -d avr128db28
Connecting to anything possible
Connected to Atmel-ICE CMSIS-DAP from ATMEL (serial number J427000*****)
Debugger firmware version 1.0.33
Debugger hardware revision 0
Traceback (most recent call last):
  File "/usr/bin/pymcuprog", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.9/site-packages/pymcuprog/pymcuprog.py", line 249, in main
    return pymcuprog_main.pymcuprog(arguments)
  File "/usr/lib/python3.9/site-packages/pymcuprog/pymcuprog_main.py", line 80, in pymcuprog
    status = _start_session(backend, device_selected, args)
  File "/usr/lib/python3.9/site-packages/pymcuprog/pymcuprog_main.py", line 548, in _start_session
    backend.start_session(sessionconfig)
  File "/usr/lib/python3.9/site-packages/pymcuprog/backend.py", line 363, in start_session
    self.programmer.setup_device(
  File "/usr/lib/python3.9/site-packages/pymcuprog/programmer.py", line 78, in setup_device
    self.device_model = get_nvm_access_provider(self.transport,
  File "/usr/lib/python3.9/site-packages/pymcuprog/nvm.py", line 45, in get_nvm_access_provider
    accessprovider = NvmAccessProviderCmsisDapUpdi(transport, device_info=device_info,
  File "/usr/lib/python3.9/site-packages/pymcuprog/nvmupdi.py", line 55, in __init__
    self.avr.setup_prog_session(khz=frequency // 1000, use_hv=use_hv)
  File "/usr/lib/python3.9/site-packages/pymcuprog/avr8target.py", line 190, in setup_prog_session
    self.protocol.set_variant(Avr8Protocol.AVR8_VARIANT_TINYX)
  File "/usr/lib/python3.9/site-packages/pyedbglib/protocols/avr8protocol.py", line 246, in set_variant
    self.set_byte(self.AVR8_CTXT_CONFIG, self.AVR8_CONFIG_VARIANT, variant)
  File "/usr/lib/python3.9/site-packages/pyedbglib/protocols/jtagice3protocol.py", line 278, in set_byte
    self._set_protocol(context, offset, bytearray([value]))
  File "/usr/lib/python3.9/site-packages/pyedbglib/protocols/jtagice3protocol.py", line 316, in _set_protocol
    raise PyedbglibError(msg)
pyedbglib.pyedbglib_errors.PyedbglibError: Unable to SET (failure code 0x11)

I'm getting this error whether my target MCU has power or not, so I suspect it's a software problem on my host machine. Otherwise, I would have expected a "target doesn't have power" error. Is this a correct assumption? I don't want to debug my wiring before I know that's causing the problem here.

I'm using Arch Linux. I've ran everything as root to avoid usb-permission problems as shown above, but things are still not working.

Any help would be appreciated,
Thank you

Feature request: perform erase before flashing

Hello,

This tool happily corrupts device data. Namely, a Flash write cycle is just that, write only. I understand this from a point of expressiveness, and that's fine for library purposes. For practical purposes, you're always erasing beforehand. When using from CLI, I have to manually run an erase cycle first, or put two commands into a batch/script, to actually reprogram a device.

Erase should simply be another option.

Inconsistency: it seems fuses NEVER need to be erased. (I don't know offhand if that's a quirk of UPDI or what.)

Feature request: a new generic device: 'auto' or 'auto_updi'

Hi,
I'm talking about updi devices. Wouldn't it be nice to have an auto discovery of the updi device/target as long as we have the signature bytes?
Test case: I have two different boards, one has an atmega1609 and one has an atmega3209. The first one can support 1609, 3209 or 4809. The second one can have an 3209 or 4809. For the first board, I can stick of course to 1609, but there may be times that I will be force to put an 3209 or 4809 because of the availability.
Now, the pymcuprog is very happy to tell me that I'm wrong, and I use '-d atmega1609' but it have found an atmega3209. And quits. This is just useless. Useful is indeed when it tells me that the binary is too big for the target mcu found.
So, I'm thinking of a new switch, or just a new device like 'auto' or 'updi_auto' for these situations. I would like to be able to use such a thing:
pymcuprog -d auto write -f xyz.hex
pymcuprog -t uart -u com35 -d auto write -f xyz.hex
I'm aware that the nano kits already have a default target, so the '-d auto' will tell it that there is not the default target, but just 'ping' it and see what you find.
What do you think?
Thanks.

Read, Verify broken for ATtiny402

Heyo,
I've been trying to work with the ATtiny402 using an atmel ice programmer through updi interface. The MCU has a 4kb flash memory. However, reading more than 256 Bytes at a time causes the read_memory output to be corrupted/incorrect. For example, reading 257 bytes will corrupt the first 1-2 lines of the output data. This, in turn, messes with the Verify function as well. I've verified that programming works properly with Atmel studio 7.

Best I can tell, the values for ATtiny402 are accurate, but you probably know more about those parameters than I do.
Haven't tried this with any other UPDI chips, but I've tried multiple 402's and multiple Atmel ICE programmers.

Let me know if you have any thoughts

nEDBG custom PIC18LF27K40 invalid device ID

I attached to a pic18f47k42 curiosity nano a PIC18LF27K40 and try to use it using pymcuprog.
I fall on strange issue:

2024-02-24 17:00:11,713 - MainThread - debuggerbase - INFO - Device ID read: 3520
2024-02-24 17:00:11,713 - MainThread - debuggerbase - ERROR - Unexpected device ID! (expected: 6960 read: 3520)

According to datasheet PIC18LF27K40 device id is 0x6A40 with is 0x3520 << 1. Is there a bit shift somewhere?

No communication on linux UPDI with attiny 1616

Completely no communication
I have tried to eliminate everything.
There is only short LOW pulse sent that lasts arround 90us
It repeats 3 times.
My command is: "pymcuprog ping -d attiny1616 -t uart -u /dev/ttyUSB0"
response is:
"
Connecting to SerialUPDI
pymcuprog.pymcuprog - ERROR - Operation failed with PymcuprogError: UPDI initialisation failed
"

Problem is definitely on side of library, I read trough documentation, and this impulse will never initiate communication. uC is waiting for special sync character. This pulse is not even close to the sync character labeled in datasheet.

pymcuprog reports upload success but is not uploading code

Hi, Apologies for a long post but the background is important.
I use a pair of AVR 4809 (40 pin variants) in a project. I use FTDI boards to facilitate code uploads and serial comms between a windows PC running my code and the AVRs. I use the Platformio IDE. When I started with the 4809s it was my first experience of UPDI and I found pyupdi, which in those days was not deprecated. It worked fine as installed in my platformio IDE. I subsequently started using pymcuprog when pyupdi became deprecated, but as it is much slower to upload code than pyupdi, I reverted to pyupdi.
So the problem is that (for a reason I am exploring with the Platformio folks), pyupdi periodically disappears from my IDE. When this happens, I use pymcuprog as follows:

pymcuprog write -d atmega4809 -t uart -u COM3 -c 250k -f .pio\build\ATmega4809\firmware.hex

and it reports success when uploading code.
However, I don't think the code uploads. A simple blinkled prog. used as a trial does not blink the LED. Naturally to start with I thought it was me, but today I managed to reinstall pyupdi and used that to upload the same blinkled code. It worked, so just out of curiosity, I used pymcuprog to upload the code and that seemed to work too as reported below:

PS C:\Users\Paul\Documents\PlatformIO\Projects\Arduino-code-blinkled> pymcuprog write -d atmega4809 -t uart -u COM3 -c 250k -f .pio\build\ATmega4809\firmware.hex
Pinging device...
Ping response: 1E9651
Writing from hex file...
Writing flash...
Done.

But it doesn't.

So I think all the above can be summarised as follows:
If I use pyupdi to upload code, that works.
If I use pymcuprog, it doesn't work.

It's probably a setting I have missed. Thanks for any thoughts.

Upload time

Hi, just to flag this. I have a project which uses an AVR4809 and I program it using pyUPDI. My 13k program takes 34 seconds to upload. For preference I would like to use pymcuprog, but the same code upload takes approx 3 minutes. I am using windows 10 and an FTDI chip as the USB to serial converter. The maximum value I can use for the -c parameter is -c 250k and the command line I use is:

pymcuprog write -d atmega4809 -t uart -u COM17 -c 250k -f .pio\build\ATmega4809\firmware.hex

Any suggestions for how I could improve the upload time would be welcome.

Thanks for considering this

Linux UART left in unknown state after first use flashing UPDI

Command: `pymcuprog write -t uart -d attiny1616 -u /dev/ttyUSB0 -c 115200 -f firmware.hex --erase --verify

Platform: Linux (Ubuntu 22.04.1 LTS)
UART: CH340-E
Target: ATtiny1616
Behavior: flash completes first time successfully; subsequent attempts fail.

pymcuprog.serialupdi.physical - INFO - Opening port '/dev/ttyUSB0' at 115200 baud (timeout 1.0s)
pymcuprog.serialupdi.physical - ERROR - Unable to open serial port '/dev/ttyUSB0'

unplugging / pluggin-in the USB-UART accomplish some sort of reset and it will work again, once.

Note: The same test under Windows 10 x64 works every time and does not require the USB-UART to bet manually reset.

Unable to write to userrow when device is locked

The datasheet claims I can write to userrow when device is locked. I've been unable to using this command:

pymcuprog -U -t uart -u COM8 -d attiny1624 write -m user_row -l 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

Same issue with this method:

pymcuprog -t uart -u COM8 -d attiny1624 write -f userrow.hex -U
pymcuprog.serialupdi.link - WARNING - Check failed
pymcuprog.serialupdi.application - ERROR - Timeout waiting for device to unlock
pymcuprog.nvm - ERROR - Device is locked.
Error:
Failed to enter NVM programming mode: device is locked
pymcuprog.serialupdi.application - ERROR - Timeout waiting for device to unlock
pymcuprog.nvm - ERROR - Device is locked.
Error:
Failed to enter NVM programming mode: device is locked
Pinging device...
pymcuprog.pymcuprog_main - ERROR - Error with st_ptr
Done.

contents of userrow.hex (which programs OK when not locked)

:02000004008575
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:00000001FF

avr128da32 cannot be flashed the second time

I flashed a simpled pin-toggler successful. Then I want to overwrite this with another content.
pymcuprog states success, but the flash isn't overwritten, I have to explicitly erase and then write. Then the new content is flashed successfully.

pymcuprog cannot write to attiny414

pymcuprog can ping and seems can read(verify) from attiny414. But it fails to upload code to attiny414. There is no problem when switch back to pyupdi.

Attiny412 (and others) device info issues

I'm currently unable to read the serial number for this device. With some digging it seems to be that the signatures section is set to a size of 0x3 currently, only allowing you access to the Device ID.

Changing 'signatures_size_bytes': 0x3 to 'signatures_size_bytes': 0x26 allows me to access the whole of the signatures as from the datasheet it should be from 0x00 to 0x25 (with 0x0D-0x1F reserved).
I believe this same issue is within multiple device info's as I had a quick look at some of the other attiny's and found the same 0x3 value set

Error using chip erase

By setting fuses, I have enabled CRC scan of boot section during boot. The CRC scan fails.

Then, I perform chip erase by running:

sudo pymcuprog erase -i updi -d avr64ea48

That does not work, and produces following output:

pyedbglib.protocols.jtagice3protocol - ERROR - JTAGICE3 error response code 0x43: 'AVR8_FAILURE_CRC_FAILURE: CRC error' 
pymcuprog.nvm - WARNING - AVR8_FAILURE_CRC_FAILURE: CRC error
pymcuprog.pymcuprog - ERROR - Operation failed with Jtagice3ResponseError: AVR8_FAILURE_CRC_FAILURE: CRC error

The chip erase works when using Microchip Studio: Device Programming -> Memories -> Device -> Erase Now. I assume chip erase should work the same way in pymcuprog.

Unable to write fuses on Atmega 4809 using serial updi

Hi,

Not sure if I have found a bug or I am just doing it wrong, but I cant work this out from the docs or any examples I have found online.

When I use the API to write fuses using:

xfuses = [0x00,0xE4,0x02,0xFF,0xFF,0xC5,0x07,0x02,0xFF,0x00]

backend.write_memory(xfuses,MemoryNames.FUSES,0x00)

I get the following error

Traceback (most recent call last):
  File "loader.py", line 39, in <module>
    backend.write_memory(xfuses,MemoryNames.FUSES,0x00)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/backend.py", line 529, in write_memory
    self.programmer.write_memory(data=data, memory_name=memory_name, offset=offset_byte)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/programmer.py", line 187, in write_memory
    self.device_model.write(memory, offset, data)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/nvmserialupdi.py", line 171, in write
    self.avr.nvm.write_flash(offset_aligned, chunk)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/serialupdi/nvm.py", line 223, in write_flash
    return self.write_nvm(address, data, use_word_access=True)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/serialupdi/nvm.py", line 301, in write_nvm
    self.readwrite.write_data_words(address, data)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/serialupdi/readwrite.py", line 138, in write_data_words
    return self.datalink.st_ptr_inc16(data)
  File "/home/james/.local/lib/python3.8/site-packages/pymcuprog/serialupdi/link.py", line 142, in st_ptr_inc16
    constants.UPDI_DATA_16, data[0], data[1]])
IndexError: list index out of range

When I use PDB to look at the frame with the out of range exception, I see that it is trying to access data[1] of a since byte of data.

I get the same problem when I try and use a bytearray instead of a list.
Can anyone suggest what I am doing wrong?

(Pinging, erasing, writing flash and verifying all work fine, so my connection to the device is good and the api is otherwise working well)

Error return code when --verify fails

Request: return error code when --verify fails

I am running this comand and captures the return code:

$ sudo pymcuprog write -d avr64ea48 -i updi --verify -f build/out.hex && echo Status code: $?

gives status code 0 when it fails

Writing flash...
Verifying flash...
pymcuprog.programmer - ERROR - Verify failed for flash memory:
pymcuprog.programmer - ERROR - Verify mismatch starting at location 0x000000: 0x0C vs 0xFF (is the memory section erased?)
Verification failed!
Done.
Status code: 0

and status code 0 when it succeeds

Writing flash...
Verifying flash...
OK
Done.
Status code: 0

No CLI Documentation

There doesn't seem to be any documentation for using pymcuprog via the CLI, other than that provided by the "pymcuprog --help" command. How about creating such a file, even if it no more than a copied output of the help command?

Having to browse the source or install and run the program just to see what commands are available is sub-optimal!

Suggestion to use a switch in the circuit

I have used the circuit here which is a simple modification to the pymcuprog UPDI diagram. You can use an FTDI device as a programming conduit as well as a serial comms device. I've tested this on my AVR4809. Do serial comms in one switch position and program the chip using pymcuprog in the other position. Hope it helps.

Program write not working for AVR128DA MCU

Edit: Found a solution. See next comment.

Hello, all. I have a project using an AVR128DA28 which I have always previously programmed using the Arduino IDE with DxCore. Here are the settings that I have there:

image

Here is the code I am experimenting with:

#include <avr/io.h>
#include <util/delay.h>

#define LED_PIN_YELLOW 7

int main (void)
{
  // init();

  // Setup pins
  PORTD.DIR = 0;  // Initialize direction for all Port D pins to input
  PORTD.DIR = PORTD.DIR | (1 << LED_PIN_YELLOW);  // Set yellow LED pin to be output

  PORTD.OUT = 0;  // Start with all LEDs off

  while (1) {

    PORTD.OUT = PORTD.OUT | (1 << LED_PIN_YELLOW);  // Turn on yellow LED
    _delay_ms(300);

    PORTD.OUT = PORTD.OUT & ~(1 << LED_PIN_YELLOW);  // Turn off yellow LED
    _delay_ms(600);

  }

  return 0;
}

If I flash using the Arduino IDE, my LED blinks as expected.

If I flash the MCU using the IDE and then run pymcuprog read -t uart -u COM4 -d avr128da28 -f blink_read_arduino, I get these files: blink_read_arduino.zip.

If I then run pymcuprog write -t uart -u COM4 -d avr128da28 -f blink.hex. I get:

Connecting to SerialUPDI
Pinging device...
Ping response: 1E970A
Writing from hex file...
Writing flash...
Done.

but my LED does not flash. And pymcuprog verify -t uart -u COM4 -d avr128da28 -f blink.hex gives me:

Connecting to SerialUPDI
Pinging device...
Ping response: 1E970A
Verifying...
pymcuprog.programmer - ERROR - Verify failed for flash memory:
pymcuprog.programmer - ERROR - Verify mismatch starting at location 0x000000: 0x0C vs 0x00 (is the memory section erased?)
Done.

Here is the blink.hex file that I am flashing: blink.txt (renamed because I can't upload a .hex file here).

If I then run pymcuprog read -t uart -u COM4 -d avr128da28 -f blink_read_cmd_line, I get these files: blink_read_cmd_line_hex.zip.

I differed the files that I've attached and made the following notes:

  • eeprom - identical
  • flash - The first 268 bytes are different, but the rest are the same
  • fuses - identical
  • internal sram - Command line file has '0088 0088' repeated over and over; looks like the Arduino IDE file has real data. This is probably because nothing is running with the command line flash?
  • lockbits - identical
  • user row - identical
  • signatures - identical

So, any ideas what I need to do differently to replicate what the Arduino IDE/DxCore is doing? It looks like that is actually using a modified version of pymcuprog.

Any help would be greatly appreciated. Thank you!

Feature request: make info logging more concise

Using pip version from pymcuprog, and serialupdi, in attiny 2 series (3226).
With "-v warning", there are no logs on the progress of the programming.
With "-v info", there are way too many log lines that are strictly identical and tell nothing:

pymcuprog.programmer - INFO - Setting up programming session for 'attiny3226'
pymcuprog.deviceinfo.deviceinfo - INFO - Looking for device attiny3226
pymcuprog.serialupdi.physical - INFO - Opening port '/dev/cu.usbserial-AQ035A6L' at 115200 baud (timeout 1.0s)
pymcuprog.serialupdi.link - INFO - UPDI datalink check failed
pymcuprog.serialupdi.physical - INFO - Sending double break
pymcuprog.serialupdi.physical - INFO - Opening port '/dev/cu.usbserial-AQ035A6L' at 115200 baud (timeout 1.0s)
pymcuprog.serialupdi.link - INFO - UPDI init OK
pymcuprog.serialupdi.application - INFO - SIB: 'tinyAVR P:0D:1-3M2 (00.59B0E.0)'
pymcuprog.serialupdi.application - INFO - Device family ID: 'tinyAVR'
pymcuprog.serialupdi.application - INFO - NVM interface: 'P:0'
pymcuprog.serialupdi.application - INFO - Debug interface: 'D:1'
pymcuprog.serialupdi.application - INFO - PDI oscillator: '3M2'
pymcuprog.serialupdi.application - INFO - Extra info: '(00.59B0E.0)'
pymcuprog.serialupdi.application - INFO - NVM type 0: 16-bit, page oriented write
pymcuprog.serialupdi.application - INFO - PDI revision = 0x04
pymcuprog.serialupdi.application - INFO - Entering NVM programming mode
pymcuprog.serialupdi.application - INFO - Apply reset
pymcuprog.serialupdi.application - INFO - Release reset
Pinging device...
pymcuprog.programmer - INFO - Reading device ID...
pymcuprog.serialupdi.application - INFO - SIB: 'tinyAVR P:0D:1-3M2 (00.59B0E.0)'
pymcuprog.serialupdi.application - INFO - Device family ID: 'tinyAVR'
pymcuprog.serialupdi.application - INFO - NVM interface: 'P:0'
pymcuprog.serialupdi.application - INFO - Debug interface: 'D:1'
pymcuprog.serialupdi.application - INFO - PDI oscillator: '3M2'
pymcuprog.serialupdi.application - INFO - Extra info: '(00.59B0E.0)'
pymcuprog.serialupdi.application - INFO - NVM type 0: 16-bit, page oriented write
pymcuprog.serialupdi.application - INFO - PDI revision = 0x04
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.application - INFO - Device ID from serialupdi = '1E9527' rev 'A'
pymcuprog.nvm - INFO - Device family: 'tinyAVR'
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.nvm - INFO - Device ID: '1E9527'
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.nvm - INFO - Device revision: '0.0'
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.nvm - INFO - Device serial number: 'b'304350514655636f153f''
Ping response: 1E9527
Erasing device before writing from hex file...
pymcuprog.programmer - INFO - Erase...
pymcuprog.serialupdi.nvm - INFO - Chip erase using NVM CTRL
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
Writing from hex file...
Writing flash...
pymcuprog.programmer - INFO - Write...
pymcuprog.programmer - INFO - Writing 29047 bytes of data to flash...
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to 0x001000
pymcuprog.serialupdi.link - INFO - LD from 0x001002
pymcuprog.programmer - INFO - Write complete.
Verifying flash...
pymcuprog.programmer - INFO - Reading 29048 bytes from flash...
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.serialupdi.link - INFO - ST to ptr
pymcuprog.programmer - INFO - Verifying...
OK
pymcuprog.serialupdi.application - INFO - Leaving NVM programming mode
pymcuprog.serialupdi.application - INFO - Apply reset
pymcuprog.serialupdi.application - INFO - Release reset
Done.
pymcuprog.serialupdi.physical - INFO - Closing port '/dev/cu.usbserial-AQ035A6L'

Most, of not all, of the pymcuprog.serialupdi.link - INFO logs tell nothing. They're all the same, repeating endlessly.
No progress info can be gotten from it. Compare this to avrdude, where we get this type of output:

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9527 (probably t3226)
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: reading input file .pio/build/ATtiny3226/firmware.hex for flash
         with 29047 bytes in 1 section within [0, 0x7176]
         using 227 pages and 9 pad bytes
avrdude: writing 29047 bytes flash ...

Writing | ################################################## | 100% 35.64s

avrdude: 29047 bytes of flash written
avrdude: verifying flash memory against .pio/build/ATtiny3226/firmware.hex

Reading | ################################################## | 100% 13.83s

avrdude: 29047 bytes of flash verified

avrdude done.  Thank you.

Much better.

Feature request:
can the info logs be adapted to show concise progress info?

Debug output from SerialUPDI uses non-padded hex strings

Sample output:

pymcuprog.serialupdi.link - DEBUG - STCS to 0x03
pymcuprog.serialupdi.physical - DEBUG - send : [0x55, 0xc3, 0x8]
pymcuprog.serialupdi.link - DEBUG - STCS to 0x02
pymcuprog.serialupdi.physical - DEBUG - send : [0x55, 0xc2, 0x80]

Now, the problem is the 0x8 value, which should have been in fact 0x08. Other entries are not consistent with rest of the output either (0xc3 here but pymcuprog.serialupdi.link - DEBUG - LDCS from 0x0B elsewhere). This is all due to usage of hex(x) function usage in physical.py module.

Return value 0 on error

pymcuprog returns 0 when an error occurs during programming (e.g. when target disconnected from programmer), but return value should be nonzero for error.

Examples:

No error (return value is 0 -- correct):

$ pymcuprog -t uart -u /dev/ttyUSB1 -d attiny214 ping; echo $?
Connecting to SerialUPDI
Pinging device...
Ping response: 1E9120
Done.
0

Target disconnected (return value is still 0 -- wrong):

$ pymcuprog -t uart -u /dev/ttyUSB1 -d attiny214 ping; echo $?
Connecting to SerialUPDI
pymcuprog.pymcuprog - ERROR - Operation failed with PymcuprogError: UPDI initialisation failed
0

Wrong parameters (return value is 2 -- correct, it's nonzero):

$ pymcuprog foobar; echo $?
usage: pymcuprog [-h] [-d DEVICE] [-p PACKPATH] [-t TOOL] [-s SERIALNUMBER]
                 [-m MEMORY] [-o OFFSET] [-b BYTES] [-l LITERAL [LITERAL ...]]
                 [-f FILENAME] [-c CLK] [-u UART] [-i INTERFACE]
                 [-v {debug,info,warning,error,critical}] [-V] [-R] [--erase]
                 [--verify] [-x]
                 [-H {tool-toggle-power,user-toggle-power,simple-unsafe-pulse}] [-U]
                 [-C]
                 {ping,erase,read,write,verify,getvoltage,getsupplyvoltage,reboot-debugger,setsupplyvoltage,getusbvoltage,reset}
pymcuprog: error: argument action: invalid choice: 'foobar' (choose from 'ping', 'erase', 'read', 'write', 'verify', 'getvoltage', 'getsupplyvoltage', 'reboot-debugger', 'setsupplyvoltage', 'getusbvoltage', 'reset')
2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.