Skip to content

nRF52 program failure; packet order issue with CMSIS-DAP on Mac #1257

Description

@afeinman-snap

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions