diff --git a/tools/build_flash_erase_lock.bat b/tools/build_flash_erase_lock.bat new file mode 100644 index 0000000..0019148 --- /dev/null +++ b/tools/build_flash_erase_lock.bat @@ -0,0 +1,61 @@ +@echo off +setlocal enabledelayedexpansion + +REM ============================================================== +REM Build + Flash + APPROTECT lock (PRODUCTION ONLY) +REM - Rebuilds so build\merged.hex is up to date, then flashes. +REM - Do NOT run on development boards (locking needs --recover). +REM ============================================================== + +set "REPO=%~dp0.." +set "BUILDDIR=%REPO%\build" +set "HEX=%BUILDDIR%\merged.hex" + +REM cmake from the nRF Connect toolchain, fallback to PATH +set "CMAKE=C:\ncs\toolchains\fd21892d0f\opt\bin\cmake.exe" +if not exist "%CMAKE%" set "CMAKE=cmake" + +echo [FLASH] FULL ERASE + APPROTECT LOCK mode (production) +echo [FLASH] This wipes application flash, NVS/settings, and BLE bonds. +echo [FLASH] After locking, SWD debug read/write is disabled. +echo [FLASH] To unlock later: nrfjprog --recover (mass-erases the chip). +echo [FLASH] DFU(SMP) over BLE still works after locking. +echo. + +REM --- Step 1: build (updates merged.hex) --- +echo [FLASH] Step 1/4: build (update merged.hex) +"%CMAKE%" --build "%BUILDDIR%" +if errorlevel 1 ( + echo [FLASH] Build FAILED. Aborting. + exit /b 1 +) + +if not exist "%HEX%" ( + echo [FLASH] merged.hex not found: %HEX% + echo [FLASH] Build the project first. + exit /b 1 +) +echo [FLASH] Using: %HEX% +echo. + +REM --- Step 2: chip erase + program + verify --- +echo [FLASH] Step 2/4: chip erase + program + verify +nrfjprog --program "%HEX%" --chiperase --verify --reset +if errorlevel 1 ( + echo [FLASH] Program FAILED. Aborting before lock. + exit /b 1 +) + +REM --- Step 3: enable APPROTECT --- +echo [FLASH] Step 3/4: enabling APPROTECT (readback protection) +nrfjprog --rbp ALL + +REM --- Step 4: pin reset to apply protection --- +echo [FLASH] Step 4/4: pin reset +nrfjprog --pinreset + +echo. +echo [FLASH] Done. POWER-CYCLE the device to fully latch APPROTECT. +echo [FLASH] Verify lock: nrfjprog --memrd 0x0 should now FAIL. +endlocal +pause