From bdbc0afa2f2340d36a41091c088f1b0989665583 Mon Sep 17 00:00:00 2001 From: MagnusKos Date: Mon, 21 Jul 2025 18:40:24 +0300 Subject: [PATCH] Clear GPREGRET before setting There are some troubles with that register: it is recommended to clear it with 0xFF mask and only after that perform a setting. --- src/platform/nrf52/main-nrf52.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/nrf52/main-nrf52.cpp b/src/platform/nrf52/main-nrf52.cpp index f9f85c083..8441fa310 100644 --- a/src/platform/nrf52/main-nrf52.cpp +++ b/src/platform/nrf52/main-nrf52.cpp @@ -363,6 +363,7 @@ void cpuDeepSleep(uint32_t msecToWake) // Resume on user button press // https://github.com/lyusupov/SoftRF/blob/81c519ca75693b696752235d559e881f2e0511ee/software/firmware/source/SoftRF/src/platform/nRF52.cpp#L1738 constexpr uint32_t DFU_MAGIC_SKIP = 0x6d; + sd_power_gpregret_clr(0, 0xFF); // Clear the register before setting a new values in it for stability reasons sd_power_gpregret_set(0, DFU_MAGIC_SKIP); // Equivalent NRF_POWER->GPREGRET = DFU_MAGIC_SKIP // FIXME, use system off mode with ram retention for key state?