This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

RTT freeze after writing to UICR

I have a test suite connecting to a nRF52832dk using RTT. This one test writes random data to the UICR config area, resets the chip, then reads back the config.

When running this test only, all is fine. So is running the test several times in a row.

However, when I run any other of my tests before the config test, it freezes. I could narrow it down to MultiAPI.rtt_write() in pynrfjprog returning 0, RTT seems not accessible.

In the working situation (testing only UICR config), the command passed through RTT sends the first 15 bytes, then 2 extra. This is as expected, given the default size of the RTT buffer.

However, when the config test fails, the first 15 bytes are passed (15 is returned by the function rtt_write()), but the 2 following bytes are not (0 is returned by the function rtt_write()). No further bytes can be sent, even after reflashing the firmware. Hard reset is required.

To summarize, the RTT seems to have troubles running after a config set, until hard reset. This only happens after running other tests first, but I cannot find out why. My question is: what could possibly make the RTT stop flushing its buffer, or fail to write?

Parents
  • Might I suggest looking at this post. UICR is not just a hardware register and some care is required when when writing, particularly multiple times.

  • Have you tried debugging the device when you write the UICR registers, to see if any error codes are returned or if any hardfaults are happening?

  • It's `pynrfjprog` that isn't doing  what I expect. I don't have the source, so I can't debug that. 

    `pynrfjprog`'s `rtt_write` does not manage to send all bytes to the devkit, if the devkit's UICR has just been flashed. I suspect that the devkit's write function is missing some kind of termination for the write itself?

  • Can you try to enable logging by passing a filename to the parameter log_file_path? Remember to provide a separate filename to each instance of MultiAPI. Please upload the generated log files.

  • [NRFJPROG DLL LOG]: FUNCTION: open_dll.
    [NRFJPROG DLL LOG]: FUNCTION: open_dll.
    [NRFJPROG DLL LOG]: FUNCTION: connect_to_emu_with_snr.
    [NRFJPROG DLL LOG]: FUNCTION: connect_to_emu_with_snr.
    [NRFJPROG DLL LOG]: FUNCTION: connect_to_emu_without_snr.
    [NRFJPROG DLL LOG]: FUNCTION: enum_emu_snr.
    [NRFJPROG DLL LOG]: Device "NRF52832_XXAA" selected.
    [NRFJPROG DLL LOG]: FUNCTION: erase_uicr.
    [NRFJPROG DLL LOG]: FUNCTION: erase_uicr.
    [NRFJPROG DLL LOG]: Found SWD-DP with ID 0x2BA01477
    [NRFJPROG DLL LOG]: AP-IDR: 0x24770011, Type: AHB-AP
    [NRFJPROG DLL LOG]: Found Cortex-M4 r0p1, Little endian.
    [NRFJPROG DLL LOG]: FPUnit: 6 code (BP) slots and 2 literal slots
    [NRFJPROG DLL LOG]: CoreSight components:
    [NRFJPROG DLL LOG]: ROMTbl 0 @ E00FF000
    [NRFJPROG DLL LOG]: ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS
    [NRFJPROG DLL LOG]: ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWT
    [NRFJPROG DLL LOG]: ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPB
    [NRFJPROG DLL LOG]: ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITM
    [NRFJPROG DLL LOG]: ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 000BB9A1 TPIU
    [NRFJPROG DLL LOG]: ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 000BB925 ETM
    [NRFJPROG DLL LOG]: FUNCTION: sys_reset.
    [NRFJPROG DLL LOG]: FUNCTION: sys_reset.
    [NRFJPROG DLL LOG]: FUNCTION: go.
    [NRFJPROG DLL LOG]: FUNCTION: go.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_start.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_start.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_read.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_stop.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_stop.
    [NRFJPROG DLL LOG]: FUNCTION: sys_reset.
    [NRFJPROG DLL LOG]: FUNCTION: sys_reset.
    [NRFJPROG DLL LOG]: FUNCTION: go.
    [NRFJPROG DLL LOG]: FUNCTION: go.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_start.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_start.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_is_control_block_found.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: rtt_write.
    [NRFJPROG DLL LOG]: FUNCTION: disconnect_from_emu.
    [NRFJPROG DLL LOG]: FUNCTION: disconnect_from_emu.
    [NRFJPROG DLL LOG]: FUNCTION: close_dll.
    [NRFJPROG DLL LOG]: FUNCTION: close_dll.
    

    Right, this is what I got.

    The reason why the writes and reads are duplicated is because the commands are sent 15 bytes at a time, and they are longer than that. I'm a bit surprised by the duplicated "go", "sys_reset", ...

    Things go well until the second sys_reset, line 70/71.

    rtt_start seems fine, the control block is found at least.

    Subsequent rtt_write return 0 (number of bytes sent), until max number of retries (100) is reached.

    To be honest, I'm not so sure this is related to UICR anymore.

  • Can you test with debug_reset instead of sys_reset? We have seen some issues with re-init of rtt-buffers sometimes after sys_reset.

Reply Children
Related