tcl/target/nrf52: fix nrf52_recover
[openocd.git] / tcl / target / nrf52.cfg
index 88f2c6912a8c380b47534ff7e5183ca20351b219..d0c52fdabce7959426fe1f0515123f55eacf5a71 100644 (file)
@@ -53,7 +53,7 @@ flash bank $_CHIPNAME.uicr nrf5 0x10001000 0 1 1 $_TARGETNAME
 # Test if MEM-AP is locked by UICR APPROTECT
 proc nrf52_check_ap_lock {} {
        set dap [[target current] cget -dap]
-       set err [catch {set APPROTECTSTATUS [ocd_$dap apreg 1 0xc]}]
+       set err [catch {set APPROTECTSTATUS [$dap apreg 1 0xc]}]
        if {$err == 0 && $APPROTECTSTATUS != 1} {
                echo "****** WARNING ******"
                echo "nRF52 device has AP lock engaged (see UICR APPROTECT register)."
@@ -71,7 +71,7 @@ proc nrf52_recover {} {
        set target [target current]
        set dap [$target cget -dap]
 
-       set IDR [ocd_$dap apreg 1 0xfc]
+       set IDR [$dap apreg 1 0xfc]
        if {$IDR != 0x02880000} {
                echo "Error: Cannot access nRF52 CTRL-AP!"
                return
@@ -79,37 +79,38 @@ proc nrf52_recover {} {
 
        poll off
 
-       # Assert reset
-       $dap apreg 1 0 1
-
-       # Reset ERASEALLSTATUS event
-       $dap apreg 1 8 0
-
-       # Trigger ERASEALL task
+       # Reset and trigger ERASEALL task
        $dap apreg 1 4 0
        $dap apreg 1 4 1
 
        for {set i 0} {1} {incr i} {
-               set ERASEALLSTATUS [ocd_$dap apreg 1 8]
-               if {$ERASEALLSTATUS == 1} {
+               set ERASEALLSTATUS [$dap apreg 1 8]
+               if {$ERASEALLSTATUS == 0} {
                        echo "$target device has been successfully erased and unlocked."
                        break
                }
-               if {$i >= 5} {
+               if {$i == 0} {
+                       echo "Waiting for chip erase..."
+               }
+               if {$i >= 150} {
                        echo "Error: $target recovery failed."
                        break
                }
                sleep 100
        }
 
+       # Assert reset
+       $dap apreg 1 0 1
+
        # Deassert reset
        $dap apreg 1 0 0
 
-       if {$ERASEALLSTATUS == 1} {
-               sleep 100
-               $target arp_examine
-               poll on
-       }
+       # Reset ERASEALL task
+       $dap apreg 1 4 0
+
+       sleep 100
+       $target arp_examine
+       poll on
 }
 
 add_help_text nrf52_recover "Mass erase and unlock nRF52 device"

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)