From 21a77d2bc69976a6779c1f3e772d3d17be7bdc37 Mon Sep 17 00:00:00 2001 From: liu weikai Date: Fri, 3 Jul 2026 23:38:21 +0800 Subject: [PATCH] Add nrf reset reason diagnostics --- .../src/nrf52_node_app_facade_runtime.cpp | 3 +++ .../src/nrf52_node_startup_runtime.cpp | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/apps/nrf52_node/src/nrf52_node_app_facade_runtime.cpp b/apps/nrf52_node/src/nrf52_node_app_facade_runtime.cpp index 1917c001..acb64668 100644 --- a/apps/nrf52_node/src/nrf52_node_app_facade_runtime.cpp +++ b/apps/nrf52_node/src/nrf52_node_app_facade_runtime.cpp @@ -682,6 +682,9 @@ void AppFacadeRuntime::setBleEnabled(bool enabled) void AppFacadeRuntime::restartDevice() { + platform::nrf52::debug_console::println("[nrf52][app] restart requested"); + Serial.flush(); + Serial2.flush(); NVIC_SystemReset(); } diff --git a/apps/nrf52_node/src/nrf52_node_startup_runtime.cpp b/apps/nrf52_node/src/nrf52_node_startup_runtime.cpp index 75da330a..e2f49ee9 100644 --- a/apps/nrf52_node/src/nrf52_node_startup_runtime.cpp +++ b/apps/nrf52_node/src/nrf52_node_startup_runtime.cpp @@ -9,13 +9,38 @@ #include "platform/nrf52/debug/nrf52_debug_console.h" #include "sys/clock.h" +#include + namespace trailmate::apps::nrf52_node::startup_runtime { +namespace +{ + +void logAndClearResetReason() +{ + const uint32_t reason = NRF_POWER->RESETREAS; + platform::nrf52::debug_console::printf("%s resetreas raw=0x%08lX pin=%u dog=%u sreq=%u lockup=%u off=%u vbus=%u\n", + target_board::kLogTag, + static_cast(reason), + (reason & POWER_RESETREAS_RESETPIN_Msk) ? 1U : 0U, + (reason & POWER_RESETREAS_DOG_Msk) ? 1U : 0U, + (reason & POWER_RESETREAS_SREQ_Msk) ? 1U : 0U, + (reason & POWER_RESETREAS_LOCKUP_Msk) ? 1U : 0U, + (reason & POWER_RESETREAS_OFF_Msk) ? 1U : 0U, + (reason & POWER_RESETREAS_VBUS_Msk) ? 1U : 0U); + if (reason != 0) + { + NRF_POWER->RESETREAS = reason; + } +} + +} // namespace void run() { platform::nrf52::debug_console::begin(); platform::nrf52::debug_console::println(); + logAndClearResetReason(); platform::nrf52::debug_console::printf("%s startup begin\n", target_board::kLogTag); auto& board = target_board::instance(); platform::nrf52::debug_console::printf("%s startup board begin\n", target_board::kLogTag);