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

Reflash nRF52832 through SWD

Hi all,

I need to be able to reprogram an nRF52832 on a daughterboard from a mainboard with a Cortex M7. I have been able to eraseall and reprogram the nRF52, but it seems that about 50% of the time either the write or read-back I do to verify fails.

Wondering if someone can tell me if my order of operations on the SWD-DP is correct. I have referred to the blog post here: https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/serial-wire-debug-port-interface-for-nrf52832?CommentSortBy=CreatedDate&CommentSortOrder=Descending.

My steps are:

1) Reset SWJ link and select the SWD-DP.

2) Read SWD-DP ID expecting 0x2BA01477

3) Write 0x0 to DP.SELECT // Select AHB-AP

4) Write 0x50000000 to DP.CTRL/STAT // Request debug and sys powerup

5) Write 0x23000052 to AHB-AP.CSW

6) Write 0xa05f0003 to the DHCSR register of the ARM core through the AHB-AP.

7) Read back DHCSR expecting bit 0 and 1 to be high. // Ensure target is halted.

8) Switch to CTRL-AP and write to ERASEALL

9) Poll ERASEALL_STATUS

10) Switch back to AHB-AP

11) Write to NVMC.CFG to enable writing.

12) Write in 512 byte chunks using following:

12a) Poll NVMC.ready to ensure no on-going writes

12b) Write to TAR

12c) Write to DRW

12d) Read RDBUFF

13) Poll NVMC.ready until it's idle.

13) Read 512 byte chunks

Does this look correct? I feel like my issue is a timing thing since it works ~50% of the time. I am wondering if I'm failing the writes because the AHB-AP is ACKing the write transactions but the NVMC isn't actually capable of writing that word yet. Is there a bit flag or something that I should be checking but am not checking?

Parents
  • Update:

    I've checked the DP.CTRL/STAT register after I finish trying to flash the chip. The value is the same regardless of if the flash writing was successful or not. There are no sticky error flags high and the RDOK flag is high.

    I have also checked the watchdog to make sure it is not running, so I shouldn't be getting a random reset in the middle of programming.

Reply
  • Update:

    I've checked the DP.CTRL/STAT register after I finish trying to flash the chip. The value is the same regardless of if the flash writing was successful or not. There are no sticky error flags high and the RDOK flag is high.

    I have also checked the watchdog to make sure it is not running, so I shouldn't be getting a random reset in the middle of programming.

Children
No Data
Related