Closed
Description
I am unable to flash an NRF52 part over CMSIS-DAP connection. I'm pretty sure this used to work but I am unable to find back when. The same physical board can be successfully programmed from the same Macbook from within a Ubuntu VM using the same version of pyOCD (0.32.1)
The error is:
(venv) user@machine pyOCD % python -m pyocd flash -u 0a -t nrf52840 ~/image.hex
0001933 I Loading /Users/user/image.hex [load_cmd]
0003073 C DAP_TRANSFER response error [__main__]
Traceback (most recent call last):
File "/Users/user/pyOCD/pyocd/subcommands/load_cmd.py", line 117, in invoke
programmer.program(filename,
File "/Users/user/pyOCD/pyocd/flash/file_programmer.py", line 171, in program
self._loader.commit()
File "/Users/user/pyOCD/pyocd/flash/loader.py", line 289, in commit
perf = builder.program(chip_erase=chipErase,
File "/Users/user/pyOCD/pyocd/flash/builder.py", line 458, in program
self._build_sectors_and_pages(keep_unwritten)
File "/Users/user/pyOCD/pyocd/flash/builder.py", line 339, in _build_sectors_and_pages
old_data = self.flash.target.read_memory_block8(page_data_end, old_data_len)
File "/Users/user/pyOCD/pyocd/core/soc_target.py", line 166, in read_memory_block8
return self.selected_core.read_memory_block8(addr, size)
File "/Users/user/pyOCD/pyocd/coresight/cortex_m.py", line 433, in read_memory_block8
data = self.ap.read_memory_block8(addr, size)
File "/Users/user/pyOCD/pyocd/core/memory_interface.py", line 97, in read_memory_block8
mem = self.read_memory_block32(addr, size // 4)
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/coresight/ap.py", line 1083, in _read_memory_block32
resp += self._read_block32_page(addr, n//4)
File "/Users/user/pyOCD/pyocd/coresight/ap.py", line 1041, in _read_block32_page
resp = self.dp.read_ap_multiple(self.address.address + self._reg_offset + MEM_AP_DRW, size)
File "/Users/user/pyOCD/pyocd/coresight/dap.py", line 838, in read_ap_multiple
result_cb = self.probe.read_ap_multiple(addr, count, now=False)
File "/Users/user/pyOCD/pyocd/probe/cmsis_dap_probe.py", line 400, in read_ap_multiple
result = self._link.reg_read_repeat(count, ap_reg, dap_index=0, now=now)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 968, in reg_read_repeat
transfer = self._write(dap_index, num_repeats, request, None)
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 1115, in _write
self._send_packet()
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 1061, in _send_packet
self._read_packet()
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 1016, in _read_packet
decoded_data = cmd.decode_data(raw_data)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 454, in decode_data
data = self._decode_transfer_data(data)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 358, in _decode_transfer_data
raise ValueError('DAP_TRANSFER response error')
ValueError: DAP_TRANSFER response error
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/user/pyOCD/pyocd/__main__.py", line 170, in run
status = cmd.invoke()
File "/Users/user/pyOCD/pyocd/subcommands/load_cmd.py", line 117, in invoke
programmer.program(filename,
File "/Users/user/pyOCD/pyocd/core/session.py", line 348, in __exit__
self.close()
File "/Users/user/pyOCD/pyocd/core/session.py", line 474, in close
self.board.uninit()
File "/Users/user/pyOCD/pyocd/board/board.py", line 112, in uninit
self.target.disconnect(resume)
File "/Users/user/pyOCD/pyocd/coresight/coresight_target.py", line 111, in disconnect
core.disconnect(resume)
File "/Users/user/pyOCD/pyocd/coresight/cortex_m.py", line 319, in disconnect
self.resume()
File "/Users/user/pyOCD/pyocd/coresight/cortex_m.py", line 884, in resume
if self.get_state() != Target.State.HALTED:
File "/Users/user/pyOCD/pyocd/coresight/cortex_m.py", line 845, in get_state
dhcsr = self.read_memory(CortexM.DHCSR)
File "/Users/user/pyOCD/pyocd/coresight/cortex_m.py", line 418, in read_memory
result = self.ap.read_memory(addr, transfer_size, now)
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/coresight/ap.py", line 994, in _read_memory
result = read_mem_cb()
File "/Users/user/pyOCD/pyocd/coresight/ap.py", line 973, in read_mem_cb
res = result_cb()
File "/Users/user/pyOCD/pyocd/coresight/dap.py", line 797, in read_ap_cb
result = result_cb()
File "/Users/user/pyOCD/pyocd/probe/cmsis_dap_probe.py", line 366, in read_ap_result_callback
value = result()
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 931, in read_reg_cb
res = transfer.get_result()
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 146, in get_result
self.daplink.flush()
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 751, in flush
self._read_packet()
File "/Users/user/pyOCD/pyocd/utility/concurrency.py", line 28, in _locking
return func(self, *args, **kwargs)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 1016, in _read_packet
decoded_data = cmd.decode_data(raw_data)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 454, in decode_data
data = self._decode_transfer_data(data)
File "/Users/user/pyOCD/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 358, in _decode_transfer_data
raise ValueError('DAP_TRANSFER response error')
ValueError: DAP_TRANSFER response error
When the error occurs, the actual value of data[0] is DAP_TRANSFER_BLOCK, not DAP_TRANSFER as expected