pyOCD lpc55s69 "savemem" fails for size larger than 0x28000 using
Open
Nobody has claimed this yet.
needs feedback
- Dominant language
- Python
- Stars
- 1.5k
- Forks
- 560
- Avg merge
- 1h 41m
- Merged PRs (30d)
- 3
Description
Example succeeds
pyocd commander -t lpc55s69 -c "savemem 0x00000000 0x00028000 dump.bin"
Saved 163840 bytes to dump.bin
Example fails
$ pyocd_launch commander -t lpc55s69 -c "savemem 0x00000000 0x00028001 dumppa.bin"
Error: transfer failed
Traceback (most recent call last):
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/cmsis_dap_probe.py", line 294, in read_ap_result_callback
return result()
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 810, in read_reg_cb
res = transfer.get_result()
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 141, in get_result
self.daplink.flush()
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 665, in flush
self._read_packet()
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 894, in _read_packet
decoded_data = cmd.decode_data(raw_data)
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 449, in decode_data
data = self._decode_transfer_data(data)
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 356, in _decode_transfer_data
self._check_response(data[2])
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 335, in _check_response
raise DAPAccessIntf.TransferFaultError()
pyocd.probe.pydapaccess.dap_access_api.DAPAccessIntf.TransferFaultError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/jaakor01/workspace/pyOCD/pyocd/tools/pyocd.py", line 709, in run
result = self.command_list[cmd](args)
File "/home/jaakor01/workspace/pyOCD/pyocd/tools/pyocd.py", line 991, in handle_savemem
data = bytearray(self.target.aps[self.selected_ap].read_memory_block8(addr, count))
File "/home/jaakor01/workspace/pyOCD/pyocd/core/memory_interface.py", line 102, in read_memory_block8
mem = self.read8(addr)
File "/home/jaakor01/workspace/pyOCD/pyocd/core/memory_interface.py", line 64, in read8
return self.read_memory(addr, 8, now)
File "/home/jaakor01/workspace/pyOCD/pyocd/coresight/ap.py", line 142, in _locking
return func(self, *args, **kwargs)
File "/home/jaakor01/workspace/pyOCD/pyocd/coresight/ap.py", line 583, in _read_memory
result = read_mem_cb()
File "/home/jaakor01/workspace/pyOCD/pyocd/coresight/ap.py", line 565, in read_mem_cb
res = result_cb()
File "/home/jaakor01/workspace/pyOCD/pyocd/coresight/dap.py", line 412, in read_ap_cb
result = result_cb()
File "/home/jaakor01/workspace/pyOCD/pyocd/probe/cmsis_dap_probe.py", line 297, in read_ap_result_callback
six.raise_from(self._convert_exception(error), error)
File "<string>", line 3, in raise_from
pyocd.core.exceptions.TransferFaultError: SWD/JTAG Transfer Fault @ 0x00028000-0x00028000
Note: Using default onboard debug probe, not updated to DAPLINK.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with handle_savemem in pyocd/tools/pyocd.py and follow its read_memory_block8 call through the memory and probe layers named in the traceback. Reproduce the lpc55s69 commands with the onboard debug probe, then verify that reads larger than 0x28000 complete successfully without a transfer fault.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli, embedded-iot
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100