This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Unable to recover PCA10040 after writing 0xFFFFFF00 to APPROTECT register.

Hello! After writing 0xFFFFFF00 to APPROTECT register can't "recover" board:

C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin>nrfjprog.exe --recover --log
Recovering device. This operation might take 30s.
ERROR: JLinkARM DLL reported an error. Try again. If error condition
ERROR: persists, run the same command again with argument --log, contact Nordic
ERROR: Semiconductor and provide the generated log.log file to them.

nRF5x-Command-Line-Tools version is 8_5_0.

Firmware in the device is working, I can see it's ble services. So it's looks like nrf52 chip is working. In windows control panel j-link-programmer from the board is presented, so j-link maybe working too. I've tried different USB ports but with no luck.

Log file for nrfjprog.exe --recover --log:

--------------------------------------------------------------------------------
nrfjprog.exe --recover --log
nrfjprog verion 8.5.0
--------------------------------------------------------------------------------
FUNCTION: open_dll.
FUNCTION: open_dll.
FUNCTION: enum_emu_snr.
FUNCTION: enum_emu_snr.
FUNCTION: enum_emu_snr.
FUNCTION: enum_emu_snr.
FUNCTION: connect_to_emu_with_snr.
FUNCTION: connect_to_emu_with_snr.
FUNCTION: connect_to_emu_without_snr.
FUNCTION: enum_emu_snr.
Device "NRF52832_XXAA" selected.
FUNCTION: recover.
FUNCTION: recover.
Found SWD-DP with ID 0x2BA01477
Communication timed out: Requested 20 bytes, received 0 bytes !
Could not read hardware status!
JLinkARM.dll Connect returned error -257.
Could not transfer JTAG data.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.
JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.
JLinkARM.dll IsHalted returned error -1.
FUNCTION: close_dll.
FUNCTION: close_dll.
  • Just found out - it is the same problem as here: devzone.nordicsemi.com/.../ But with different version of nrfjprog.

  • You could try doing it manually using JLink from the command line, connect with

    JLink -if swd -device nrf52
    

    or on OSX it's JLinkExe. Then

    SWDSelect
    SWDWriteDP 1, 0x50000000
    SWDWriteDP 2, 0x01000000
    SWDWriteAP 1, 0x00000001
    

    That should clear the app protection and entirely erase the chip and allow JLink to connect to the chip again. I have actually done this myself and it did work for me (on a module which came factory locked).

  • C:\Program Files (x86)\SEGGER\JLink_V512f>Jlink -if swd -device nrf52 SEGGER J-Link Commander V5.12f (Compiled May 17 2016 16:04:09) DLL version V5.12f, compiled May 17 2016 16:03:35

    Connecting to J-Link via USB...O.K.
    Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Mar 15 2016 18:03:17
    Hardware version: V1.00
    S/N: <my serial number>
    VTref = 3.300V
    
    
    Type "connect" to establish a target connection, '?' for help
    J-Link>SWDSelect
    Select SWD by sending SWD switching sequence.
    Found SWD-DP with ID 0x2BA01477
    J-Link>SWDWriteDP 1, 0x50000000
    Write DP register 1 = 0x50000000
    J-Link>SWDWriteDP 2, 0x01000000
    Write DP register 2 = 0x01000000
    J-Link>SWDWriteAP 1, 0x00000001
    Write AP register 1 = 0x00000001
    J-Link>^C
    C:\Program Files (x86)\SEGGER\JLink_V512f>
    

    After that, device unfortunately is sill has readback protection and I can't disable it.

  • well that's the reset sequence and I've had it work, you can if you like add onto the end

    SWDReadAP 2
    

    and repeat that until you get '0' which says it's finished clearing memory and at that point

    SWDReadAP 3
    

    should return 1 (you have to do it twice) showing protection is disabled. The output above looks right to me, incluidng the SWD-DP id so you definitely found it.

  • J-Link>SWDSelect

        Select SWD by sending SWD switching sequence.
        Found SWD-DP with ID 0x2BA01477
        J-Link>SWDWriteDP 1, 0x50000000
        Write DP register 1 = 0x50000000
        J-Link>SWDWriteDP 2, 0x01000000
        Write DP register 2 = 0x01000000
        J-Link>SWDWriteAP 1, 0x00000001
        Write AP register 1 = 0x00000001
        J-Link>SWDReadAP 2
        Read AP register 2 = 0x00000000
        J-Link>SWDReadAP 3
        Read AP register 3 = 0x00000001
        J-Link>SWDReadAP 3
        Read AP register 3 = 0x00000000
        J-Link>SWDReadAP 3
        Read AP register 3 = 0x00000000
    

    After that, readback is still on. More then this - firmware in the board is still working - I can see my ble services.

    After first call SWDReadAP 3 returns 1, after second and third - it returns 0.

Related