DWM3001CDK with BLE

I have a DWM3001CDK and am trying to add some BLE functionality to the example CLI project in the DWM3001CDK DK Software, Sources, Tools and Developer Guide.

I’ve managed to mostly merge in the configuration from Nordic’s nrf52833 sample config project (DWM3001CDK_SDK\Sources\SDK_BSP\Nordic\NORDIC_SDK_17_1_0\config\nrf52833\ses\generic_nrf52833_xxaa.emProject), but am struggling with the flash configuration.

The flash_placement.xml files are quite different from the Nordic and Qorvo examples, each one having various sections that are not present in the other. I made a best effort at combining the two.

I ran (right-click project)->“Import Section Placement” with the combined flash_placement.xml file, and included the following preprocessor definitions (from the Nordic generic example project):

PP_TIMER_V2
APP_TIMER_V2_RTC1_ENABLED
FLOAT_ABI_HARD
INITIALIZE_USER_SECTIONS
NRF_SD_BLE_API_VERSION=7
NO_VTOR_CONFIG
S113
SOFTDEVICE_PRESENT

When I try building this though, I get the following errors:

uilding ‘AssetTracker’ from solution ‘AssetTracker’ in configuration ‘Common’
  Generating linker script ‘AssetTracker.ld’
  Linking AssetTracker.elf
    C:/Users/MyName/Documents/GitHub/invicton-labs/AssetTracker/DWM3001C/ses/Output/Common/Exe/AssetTracker.elf section `.text.bsp_board_led_on' will not fit in region `UNPLACED_SECTIONS'
    region `UNPLACED_SECTIONS' overflowed by 59964 bytes
    Output/AssetTracker Common/Obj/common/nrf_sdh.o:(.rodata.sdh_stack_observers+0x0): undefined reference to `__start_sdh_stack_observers'
    Output/AssetTracker Common/Obj/common/nrf_sdh.o:(.rodata.sdh_stack_observers+0x4): undefined reference to `__stop_sdh_stack_observers'
    Output/AssetTracker Common/Obj/FreeRTOS/config.o: in function `load_bssConfig':
    config.c:(.text.load_bssConfig+0x70): undefined reference to `__fconfig_start'
    config.c:(.text.load_bssConfig+0x7c): undefined reference to `__config_entry_start'
    config.c:(.text.load_bssConfig+0x80): undefined reference to `__config_entry_end'
    Output/AssetTracker Common/Obj/FreeRTOS/config.o: in function `save_bssConfig':
    config.c:(.text.save_bssConfig+0x38): undefined reference to `__fconfig_start'
    Output/AssetTracker Common/Obj/cmd/cmd.o: in function `command_parser':
    cmd.c:(.text.command_parser+0x148): undefined reference to `__known_commands_end'
    cmd.c:(.text.command_parser+0x150): undefined reference to `__known_commands_start'
    Output/AssetTracker Common/Obj/Startup/ses_startup_nrf_common.o: in function `InitializeUserMemorySections':
    (.init+0x50): undefined reference to `__start_nrf_sections'
    Output/AssetTracker Common/Obj/Startup/thumb_crt0.o: in function `memory_set':
    (.init+0xd8): undefined reference to `__data_load_start__'
    (.init+0xdc): undefined reference to `__data_start__'
    (.init+0xe0): undefined reference to `__data_end__'
    (.init+0xe4): undefined reference to `__text_load_start__'
    (.init+0xe8): undefined reference to `__text_start__'
    (.init+0xec): undefined reference to `__text_end__'
    (.init+0xf0): undefined reference to `__fast_load_start__'
    (.init+0xf4): undefined reference to `__fast_start__'
    (.init+0xf8): undefined reference to `__fast_end__'
    (.init+0xfc): undefined reference to `__ctors_load_start__'
    (.init+0x100): undefined reference to `__ctors_start__'
    (.init+0x104): undefined reference to `__ctors_end__'
    (.init+0x108): undefined reference to `__dtors_load_start__'
    (.init+0x10c): undefined reference to `__dtors_start__'
    (.init+0x110): undefined reference to `__dtors_end__'
    (.init+0x114): undefined reference to `__rodata_load_start__'
    (.init+0x118): undefined reference to `__rodata_start__'
    (.init+0x11c): undefined reference to `__rodata_end__'
    (.init+0x120): undefined reference to `__tdata_load_start__'
    (.init+0x124): undefined reference to `__tdata_start__'
    (.init+0x128): undefined reference to `__tdata_end__'
    ../external/QorvoSDK/Libs/dwt_uwb_driver/lib/libdwt_uwb_driver-m4-hfp-6.0.14.a(deca_compat.c.obj): in function `dwt_probe':
    deca_compat.c:(.text.dwt_probe+0x8c): undefined reference to `__dw_drivers_start'
    deca_compat.c:(.text.dwt_probe+0x90): undefined reference to `__dw_drivers_end'
Build failed

I’m not sure where this UNPLACED_SECTIONS is coming from, since I’ve included all sections from both projects in the flash_placement.xml file. I’m also not clear on why all of these references are undefined.

I’ve also tried updating the section placement macros to add an offset for the SoftDevice in Flash, but that doesn’t change the errors from the build.

Has anyone successfully added a Nordic SoftDevice into the Qorvo example project and enabled BLE? What am I missing here?

@carlos.silva Given that the entire purpose of the DWM3001C was to combine UWB with BLE/Zigbee/etc. functionality, I find it surprising that there are no examples of a project that enables both Qorvo UWB and Nordic BLE/SoftDevice. Clearly, there are major changes that are necessary to support both chips in one application. Are there any plans to add such an example to the SDK/documentation?

Thanks!

In the evaluation tools you can find the release which is working with Apple iPhone, it has BLE softdevice s113 inside and all features around patches required. That is basically a nearly complete “tracker”, like a custom AirTag.

https://www.qorvo.com/products/p/DWM3001CDK#evaluation-tools

1 Like