I'm getting timeout errors when trying to program a Thingy:91 with a J-Link Pro PoE on macOS on an ARM Apple M3 Max.
Here's the command and error message:
❯ west flash -i 1196000003 -- west flash: rebuilding [0/26] Performing build step for 'tfm' ninja: no work to do. [1/7] Performing build step for 'mcuboot_subimage' ninja: no work to do. [2/7] Performing install step for 'tfm' -- Install configuration: "MinSizeRel" [6/6] Completed 'mcuboot_subimage' -- west flash: using runner nrfjprog -- runners.nrfjprog: Flashing file: /Users/chris/cgnd/clients/golioth/thingy91-golioth-workspace/app/build/zephyr/merged.hex Timed out waiting for progress updates.sing non-volatile memory - block 2 of 2 Did worker process die? [ #################### ] 14.809s | Erase file - Done erasing ERROR: An internal error has occurred, please try again. NOTE: For additional output, try running again with logging enabled (--log). NOTE: Any generated log error messages will be displayed. FATAL ERROR: command exited with status 63: nrfjprog --program /Users/chris/cgnd/clients/golioth/thingy91-golioth-workspace/app/build/zephyr/merged.hex --sectorerase --verify -f NRF91 --snr 1196000003
I get the same error when running nrfjprog manually (I've attached the log file):
❯ nrfjprog --program /Users/chris/cgnd/clients/golioth/thingy91-golioth-workspace/app/build/zephyr/merged.hex --sectorerase --verify -f NRF91 --snr 1196000003 --log Timed out waiting for progress updates.sing non-volatile memory - block 2 of 2 Did worker process die? [ #################### ] 16.435s | Erase file - Done erasing ERROR: An internal error has occurred, please try again.
However, running nrfjprog --recover
appears to fix whatever is causing the errors:
❯ nrfjprog --recover Recovering device. This operation might take 30s. Erasing user code and UICR flash areas. ❯ nrfjprog --log --program /Users/chris/cgnd/clients/golioth/thingy91-golioth-workspace/app/build/zephyr/merged.hex --sectorerase --verify -f NRF91 --snr 1196000003 [ #################### ] 13.059s | Erase file - Done erasing [ #################### ] 2.836s | Program file - Done programming [ #################### ] 2.820s | Verify file - Done verifying
Is there a way to get a better understanding of what's going on here? Is there something that my application code is doing that is preventing the J-Link from being able to flash the device reliably? What is nrfjprog --recover
doing to "fix" this issue?