tcl/target/nrf52: fix nrf52_recover
[fw/openocd] / 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"