From 58b99e59d44197c32cf68e730f67563f28382d2e Mon Sep 17 00:00:00 2001 From: hathach Date: Tue, 5 May 2020 23:07:56 +0700 Subject: [PATCH] detect if SD is actually present on the flash using SD magic even with SOFTDEVICE_PRESENT defined, SD may not be present on actual flash. --- src/portable/nordic/nrf5x/dcd_nrf5x.c | 28 ++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/portable/nordic/nrf5x/dcd_nrf5x.c b/src/portable/nordic/nrf5x/dcd_nrf5x.c index 12435ea2..d788547b 100644 --- a/src/portable/nordic/nrf5x/dcd_nrf5x.c +++ b/src/portable/nordic/nrf5x/dcd_nrf5x.c @@ -32,13 +32,6 @@ #include "nrf_clock.h" #include "nrf_power.h" #include "nrfx_usbd_errata.h" - -#ifdef SOFTDEVICE_PRESENT -// For enable/disable hfclk with SoftDevice -#include "nrf_sdm.h" -#include "nrf_soc.h" -#endif - #include "device/dcd.h" // TODO remove later @@ -564,9 +557,26 @@ void dcd_int_handler(uint8_t rhport) // HFCLK helper //--------------------------------------------------------------------+ #ifdef SOFTDEVICE_PRESENT -// check if SD is present and enabled -static bool is_sd_enabled(void) + +// For enable/disable hfclk with SoftDevice +#include "nrf_mbr.h" +#include "nrf_sdm.h" +#include "nrf_soc.h" + +#ifndef SD_MAGIC_NUMBER + #define SD_MAGIC_NUMBER 0x51B1E5DB +#endif + +static inline bool is_sd_existed(void) { + return *((uint32_t*)(SOFTDEVICE_INFO_STRUCT_ADDRESS+4)) == SD_MAGIC_NUMBER; +} + +// check if SD is existed and enabled +static inline bool is_sd_enabled(void) +{ + if ( !is_sd_existed() ) return false; + uint8_t sd_en = false; (void) sd_softdevice_is_enabled(&sd_en); return sd_en;