This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf52833 NRF_ERROR_NO_MEM

Hello,

I am having an issue with the nRF52833. I'm using the NRF5SDK, version 16, and the SoftDevice s113 version 7.0.1. I can take the ble_app_uart example from the sdk (located here: /examples/ble_peripheral/ble_app_uart/pca10100/s113/ses/main.c) and replace the main method with this, and it works:

#include "assert.h"
#include "nrf_sdm.h"
static void sd_fault_handler(uint32_t id, uint32_t pc, uint32_t info)
{
  while (1){};
}
/**@brief Application main function.
 */
int main(void)
{
   SystemCoreClockUpdate();

  uint32_t err_code = 0;

  const nrf_clock_lf_cfg_t clk_cfg = {
    .source = NRF_CLOCK_LF_SRC_RC,
    .rc_ctiv = 16, // Interval in 0.25 s, 16 * 0.25 = 4 sec
    .rc_temp_ctiv = 2, // Check temperature every .rc_ctiv, but calibrate every .rc_temp_ctiv 
    .accuracy = 0,
  };

  err_code = sd_softdevice_enable(&clk_cfg, sd_fault_handler);
  assert(err_code == NRF_SUCCESS);

   // register for interrupts
  sd_nvic_EnableIRQ(SD_EVT_IRQn);

  uint32_t ram_base = 0;
 nrf_sdh_ble_app_ram_start_get(&ram_base);
 err_code = sd_ble_enable(&ram_base);
 assert(err_code == NRF_SUCCESS);

    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
    }
}

While this is nice, I need to be able to create projects outside of the SDK. When I moved this example, the call to sd_ble_enable failed with NRF_ERROR_NO_MEM. This is unexpected because I used the same flash_placement.xml, sdk_config.h, and the same .emProject file (except for changing the include paths). What could be causing this, and how to fix it? 

For reference, i've included the steps and modifications I made when copying the example code outside the SDK. 

example copied: /examples/ble_peripheral/ble_app_uart/pca10100/s113/ses/

directory layout: 

/ses (copied example)/
                        sdk_config.h
                        ble_app_uart_pca10100_s113.emProject
                        flash_placement.xml
                        main.c
/SDK/nrf5sdk
            all the sdk files, untouched

modifications to .emProject file:

In the definition of c_user_include_directories, I got rid of ../../../config (i didn't see this file in /examples/ble_peripheral/ble_app_uart anyway), and I got rid of ../config (I copied the sdk_config.h file to the new location of .emProject). I then replaced '../../../../../..' with '../SDK/nrf5sdk'

.emProject file: (included in case anyone is confused about how the include paths were renamed)

<!DOCTYPE CrossStudio_Project_File>
<solution Name="ble_app_uart_pca10100_s113" target="8" version="2">
  <project Name="ble_app_uart_pca10100_s113">
    <configuration
      Name="Common"
      arm_architecture="v7EM"
      arm_core_type="Cortex-M4"
      arm_endian="Little"
      arm_fp_abi="Hard"
      arm_fpu_type="FPv4-SP-D16"
      arm_linker_heap_size="2048"
      arm_linker_process_stack_size="0"
      arm_linker_stack_size="2048"
      arm_linker_treat_warnings_as_errors="No"
      arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
      arm_target_device_name="nRF52833_xxAA"
      arm_target_interface_type="SWD"
      c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BOARD_PCA10100;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52833_XXAA;NRF_SD_BLE_API_VERSION=7;S113;SOFTDEVICE_PRESENT;"
      c_user_include_directories=".;../SDK/nrf5sdk/components;../SDK/nrf5sdk/components/ble/ble_advertising;../SDK/nrf5sdk/components/ble/ble_dtm;../SDK/nrf5sdk/components/ble/ble_link_ctx_manager;../SDK/nrf5sdk/components/ble/ble_racp;../SDK/nrf5sdk/components/ble/ble_services/ble_ancs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_ans_c;../SDK/nrf5sdk/components/ble/ble_services/ble_bas;../SDK/nrf5sdk/components/ble/ble_services/ble_bas_c;../SDK/nrf5sdk/components/ble/ble_services/ble_cscs;../SDK/nrf5sdk/components/ble/ble_services/ble_cts_c;../SDK/nrf5sdk/components/ble/ble_services/ble_dfu;../SDK/nrf5sdk/components/ble/ble_services/ble_dis;../SDK/nrf5sdk/components/ble/ble_services/ble_gls;../SDK/nrf5sdk/components/ble/ble_services/ble_hids;../SDK/nrf5sdk/components/ble/ble_services/ble_hrs;../SDK/nrf5sdk/components/ble/ble_services/ble_hrs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_hts;../SDK/nrf5sdk/components/ble/ble_services/ble_ias;../SDK/nrf5sdk/components/ble/ble_services/ble_ias_c;../SDK/nrf5sdk/components/ble/ble_services/ble_lbs;../SDK/nrf5sdk/components/ble/ble_services/ble_lbs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_lls;../SDK/nrf5sdk/components/ble/ble_services/ble_nus;../SDK/nrf5sdk/components/ble/ble_services/ble_nus_c;../SDK/nrf5sdk/components/ble/ble_services/ble_rscs;../SDK/nrf5sdk/components/ble/ble_services/ble_rscs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_tps;../SDK/nrf5sdk/components/ble/common;../SDK/nrf5sdk/components/ble/nrf_ble_gatt;../SDK/nrf5sdk/components/ble/nrf_ble_qwr;../SDK/nrf5sdk/components/ble/peer_manager;../SDK/nrf5sdk/components/boards;../SDK/nrf5sdk/components/libraries/atomic;../SDK/nrf5sdk/components/libraries/atomic_fifo;../SDK/nrf5sdk/components/libraries/atomic_flags;../SDK/nrf5sdk/components/libraries/balloc;../SDK/nrf5sdk/components/libraries/bootloader/ble_dfu;../SDK/nrf5sdk/components/libraries/bsp;../SDK/nrf5sdk/components/libraries/button;../SDK/nrf5sdk/components/libraries/cli;../SDK/nrf5sdk/components/libraries/crc16;../SDK/nrf5sdk/components/libraries/crc32;../SDK/nrf5sdk/components/libraries/crypto;../SDK/nrf5sdk/components/libraries/csense;../SDK/nrf5sdk/components/libraries/csense_drv;../SDK/nrf5sdk/components/libraries/delay;../SDK/nrf5sdk/components/libraries/ecc;../SDK/nrf5sdk/components/libraries/experimental_section_vars;../SDK/nrf5sdk/components/libraries/experimental_task_manager;../SDK/nrf5sdk/components/libraries/fds;../SDK/nrf5sdk/components/libraries/fifo;../SDK/nrf5sdk/components/libraries/fstorage;../SDK/nrf5sdk/components/libraries/gfx;../SDK/nrf5sdk/components/libraries/gpiote;../SDK/nrf5sdk/components/libraries/hardfault;../SDK/nrf5sdk/components/libraries/hci;../SDK/nrf5sdk/components/libraries/led_softblink;../SDK/nrf5sdk/components/libraries/log;../SDK/nrf5sdk/components/libraries/log/src;../SDK/nrf5sdk/components/libraries/low_power_pwm;../SDK/nrf5sdk/components/libraries/mem_manager;../SDK/nrf5sdk/components/libraries/memobj;../SDK/nrf5sdk/components/libraries/mpu;../SDK/nrf5sdk/components/libraries/mutex;../SDK/nrf5sdk/components/libraries/pwm;../SDK/nrf5sdk/components/libraries/pwr_mgmt;../SDK/nrf5sdk/components/libraries/queue;../SDK/nrf5sdk/components/libraries/ringbuf;../SDK/nrf5sdk/components/libraries/scheduler;../SDK/nrf5sdk/components/libraries/sdcard;../SDK/nrf5sdk/components/libraries/slip;../SDK/nrf5sdk/components/libraries/sortlist;../SDK/nrf5sdk/components/libraries/spi_mngr;../SDK/nrf5sdk/components/libraries/stack_guard;../SDK/nrf5sdk/components/libraries/strerror;../SDK/nrf5sdk/components/libraries/svc;../SDK/nrf5sdk/components/libraries/timer;../SDK/nrf5sdk/components/libraries/twi_mngr;../SDK/nrf5sdk/components/libraries/twi_sensor;../SDK/nrf5sdk/components/libraries/uart;../SDK/nrf5sdk/components/libraries/usbd;../SDK/nrf5sdk/components/libraries/usbd/class/audio;../SDK/nrf5sdk/components/libraries/usbd/class/cdc;../SDK/nrf5sdk/components/libraries/usbd/class/cdc/acm;../SDK/nrf5sdk/components/libraries/usbd/class/hid;../SDK/nrf5sdk/components/libraries/usbd/class/hid/generic;../SDK/nrf5sdk/components/libraries/usbd/class/hid/kbd;../SDK/nrf5sdk/components/libraries/usbd/class/hid/mouse;../SDK/nrf5sdk/components/libraries/usbd/class/msc;../SDK/nrf5sdk/components/libraries/util;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser/ac_rec_parser;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ac_rec;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ble_oob_advdata;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ble_pair_lib;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ble_pair_msg;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/common;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ep_oob_rec;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/hs_rec;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/le_oob_rec;../SDK/nrf5sdk/components/nfc/ndef/generic/message;../SDK/nrf5sdk/components/nfc/ndef/generic/record;../SDK/nrf5sdk/components/nfc/ndef/launchapp;../SDK/nrf5sdk/components/nfc/ndef/parser/message;../SDK/nrf5sdk/components/nfc/ndef/parser/record;../SDK/nrf5sdk/components/nfc/ndef/text;../SDK/nrf5sdk/components/nfc/ndef/uri;../SDK/nrf5sdk/components/nfc/platform;../SDK/nrf5sdk/components/nfc/t2t_lib;../SDK/nrf5sdk/components/nfc/t2t_parser;../SDK/nrf5sdk/components/nfc/t4t_lib;../SDK/nrf5sdk/components/nfc/t4t_parser/apdu;../SDK/nrf5sdk/components/nfc/t4t_parser/cc_file;../SDK/nrf5sdk/components/nfc/t4t_parser/hl_detection_procedure;../SDK/nrf5sdk/components/nfc/t4t_parser/tlv;../SDK/nrf5sdk/components/softdevice/common;../SDK/nrf5sdk/components/softdevice/s113/headers;../SDK/nrf5sdk/components/softdevice/s113/headers/nrf52;../SDK/nrf5sdk/components/toolchain/cmsis/include;../SDK/nrf5sdk/external/fprintf;../SDK/nrf5sdk/external/segger_rtt;../SDK/nrf5sdk/external/utf_converter;../SDK/nrf5sdk/integration/nrfx;../SDK/nrf5sdk/integration/nrfx/legacy;../SDK/nrf5sdk/modules/nrfx;../SDK/nrf5sdk/modules/nrfx/drivers/include;../SDK/nrf5sdk/modules/nrfx/hal;../SDK/nrf5sdk/modules/nrfx/mdk;"
      debug_additional_load_file="../SDK/nrf5sdk/components/softdevice/s113/hex/s113_nrf52_7.0.1_softdevice.hex"
      debug_register_definition_file="../SDK/nrf5sdk/modules/nrfx/mdk/nrf52833.svd"
      debug_start_from_entry_point_symbol="No"
      debug_target_connection="J-Link"
      gcc_debugging_level="Level 3"
      gcc_entry_point="Reset_Handler"
      linker_output_format="hex"
      linker_printf_fmt_level="long"
      linker_printf_width_precision_supported="Yes"
      linker_scanf_fmt_level="long"
      linker_section_placement_file="flash_placement.xml"
      linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x20000;FLASH_START=0x1c000;FLASH_SIZE=0x64000;RAM_START=0x20001058;RAM_SIZE=0x1efa8"
      linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x20000"
      macros="CMSIS_CONFIG_TOOL=../SDK/nrf5sdk/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"
      project_directory=""
      project_type="Executable" />
    <folder Name="Segger Startup Files">
      <file file_name="$(StudioDir)/source/thumb_crt0.s" />
    </folder>
    <folder Name="nRF_Log">
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_backend_rtt.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_backend_serial.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_default_backends.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_frontend.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_str_formatter.c" />
    </folder>
    <folder Name="nRF_Libraries">
      <file file_name="../SDK/nrf5sdk/components/libraries/button/app_button.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_error.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_error_handler_gcc.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_error_weak.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/fifo/app_fifo.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/scheduler/app_scheduler.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/timer/app_timer2.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/uart/app_uart_fifo.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_util_platform.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/timer/drv_rtc.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/hardfault/hardfault_implementation.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/nrf_assert.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/atomic_fifo/nrf_atfifo.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/atomic_flags/nrf_atflags.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/atomic/nrf_atomic.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/balloc/nrf_balloc.c" />
      <file file_name="../SDK/nrf5sdk/external/fprintf/nrf_fprintf.c" />
      <file file_name="../SDK/nrf5sdk/external/fprintf/nrf_fprintf_format.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/memobj/nrf_memobj.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/ringbuf/nrf_ringbuf.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/experimental_section_vars/nrf_section_iter.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/sortlist/nrf_sortlist.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/strerror/nrf_strerror.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/uart/retarget.c" />
    </folder>
    <folder Name="None">
      <file file_name="../SDK/nrf5sdk/modules/nrfx/mdk/ses_startup_nrf52833.s" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/mdk/ses_startup_nrf_common.s" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/mdk/system_nrf52833.c" />
    </folder>
    <folder Name="Board Definition">
      <file file_name="../SDK/nrf5sdk/components/boards/boards.c" />
    </folder>
    <folder Name="nRF_Drivers">
      <file file_name="../SDK/nrf5sdk/integration/nrfx/legacy/nrf_drv_clock.c" />
      <file file_name="../SDK/nrf5sdk/integration/nrfx/legacy/nrf_drv_uart.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/soc/nrfx_atomic.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_clock.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_gpiote.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/prs/nrfx_prs.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_uart.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_uarte.c" />
    </folder>
    <folder Name="Board Support">
      <file file_name="../SDK/nrf5sdk/components/libraries/bsp/bsp.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/bsp/bsp_btn_ble.c" />
    </folder>
    <folder Name="Application">
      <file file_name="../config/sdk_config.h" />
      <file file_name="main.c" />
    </folder>
    <folder Name="nRF_Segger_RTT">
      <file file_name="../SDK/nrf5sdk/external/segger_rtt/SEGGER_RTT.c" />
      <file file_name="../SDK/nrf5sdk/external/segger_rtt/SEGGER_RTT_Syscalls_SES.c" />
      <file file_name="../SDK/nrf5sdk/external/segger_rtt/SEGGER_RTT_printf.c" />
    </folder>
    <folder Name="nRF_BLE">
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_advdata.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/ble_advertising/ble_advertising.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_conn_params.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_conn_state.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/ble_link_ctx_manager/ble_link_ctx_manager.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_srv_common.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/nrf_ble_qwr/nrf_ble_qwr.c" />
    </folder>
    <folder Name="UTF8/UTF16 converter">
      <file file_name="../SDK/nrf5sdk/external/utf_converter/utf.c" />
    </folder>
    <folder Name="nRF_BLE_Services">
      <file file_name="../SDK/nrf5sdk/components/ble/ble_services/ble_nus/ble_nus.c" />
    </folder>
    <folder Name="nRF_SoftDevice">
      <file file_name="../SDK/nrf5sdk/components/softdevice/common/nrf_sdh.c" />
      <file file_name="../SDK/nrf5sdk/components/softdevice/common/nrf_sdh_ble.c" />
      <file file_name="../SDK/nrf5sdk/components/softdevice/common/nrf_sdh_soc.c" />
    </folder>
  </project>
  <configuration
    Name="Release"
    c_preprocessor_definitions="NDEBUG"
    gcc_optimization_level="Optimize For Size" />
  <configuration
    Name="Debug"
    c_preprocessor_definitions="DEBUG; DEBUG_NRF"
    gcc_optimization_level="None" />
</solution>

  • Hello,

    I'm afraid I can't of anything that could explain why the RAM_START got changed after you moved the project outside of the SDK tree. But RAM_START=0x20001058 is too low, at least with the default configurations. I get "0x20001e20" as the lowest start address here:

    Please try and see what the ram_base is after the program has returned from sd_ble_enable, then make sure the RAM_START setting matches this value.

    Edit: Forgot to add that RAM_SIZE size must be adjusted as well so that RAM_START+RAM_SIZE don't exceed RAM_PH_START+RAM_PH_SIZE

  • Hello Vidar,

    Unfortunately I tried that already. I updated RAM_START to 0x20001e20 and RAM_SIZE to 0x1e1e0 but I got the same error code. I feel like something simple is wrong but I'm not sure what it is. It seems strange to think that just moving the project to a different directory would be the cause. 

  • Can you try and see what ram_base gets set to after calling nrf_sdh_ble_app_ram_start_get()? It should be the same as RAM_START.

    KaneLee said:
    It seems strange to think that just moving the project to a different directory would be the cause. 

    I don't recall running into this problem at least. I have shown how I usually move projects outside of the SDKs file structure here if you want to compare: https://devzone.nordicsemi.com/f/nordic-q-a/62122/best-practices-for-starting-a-new-project-in-ses-based-on-example-application but it looks like you are already doing the same.

     

  • I re-copied the example, set a macro for SDK_ROOT, and got it to work (third/fourth time). I'm guessing something was getting corrupted in the .emProject file (during the process of renaming the include paths) but for some reason it wasn't so bad this time. It's also possible that I had copied a configuration parameter wrong. 

    Anyway, Vidar, thank you for helping verify the memory layout, for the helpful links to the Nordic documentation, and for the advice about best practices for moving an example. 

    Also, to answer your question, I verified that ram_base was getting set to RAM_START by nrf_sdh_ble_app_ram_start_get(). And when I initially got the error code, I updated RAM_START to the value ram_base was set to by sd_ble_enable().

  • Thanks for the update, I'm glad to hear that it works now.

    Also, to answer your question, I verified that ram_base was getting set to RAM_START by nrf_sdh_ble_app_ram_start_get(). And when I initially got the error code, I updated RAM_START to the value ram_base was set to by sd_ble_enable().

    It sounds like you are doing everything correctly. I assumed it had to be a mismatch between the address returned from nrf_sdh_ble_app_ram_start_get() and RAM_START. Anyway, just let me know if you run into this problem again.

Related