nRF5 SDK for Mesh v3.1.0
Integrating Mesh into nRF5 SDK examples

You can either:

See Building the mesh stack and examples for information on how to download and install the nRF5 SDK. See Coexistence examples examples to see how the nRF5 SDK features can be simultaneously used with nRF5 SDK for Mesh.

Note
  • nRF5 SDK integration is only tested with nRF5 SDK version 15.2.
  • nRF5 SDK version 15.2 does not support nRF51.

Dynamic memory

The mesh stack uses the Mesh memory manager interface for dynamic memory allocation. The default backend, mesh_mem_stdlib.c, uses the standard library malloc(), which requires a sufficiently large heap size to be defined. This behavior can be changed by replacing the backend with another memory manager.

If you are using Segger Embedded Studio for building the application set the Heap Size to 8192 bytes in the Project Options> Code> Runtime Memory Area settings.

Concurrent SoftDevice and mesh activity

By design, the SoftDevice activity is prioritized over mesh activity. Therefore, you should keep the connection and advertisement intervals used by the SoftDevice as large as possible when using Bluetooth low energy connections. If scanning, keep the scan intervals as long as possible, and the scan windows as short as possible. You should also reduce mesh activity while the SoftDevice is doing fast advertising and continue normal activity after a connection is established.


Including nRF5 SDK in an nRF5 SDK for Mesh example

Depending on your toolchain:


Including nRF5 SDK for Mesh functionality in an nRF5 SDK example

Include the following source files from nRF5 SDK for Mesh in the nRF5 SDK example's project file:

Note
If various mesh features are not needed (like e.g. DFU), the corresponding files may simply be omitted from the project file. Then examples/nrf_mesh_weak.c must be added in their place to provide stubs for the missing API functions.

Add the following folders to the nRF5 SDK example's project include path:

Add the following preprocessor symbols to the nRF5 SDK example's project file:

Note
Examples using the simple_hal module in the mesh stack may need to be updated to use the Nordic nRF5 SDK bsp module if integrated with the nRF5 SDK. It is possible to use both, but in this case GPIOTE_IRQHandler must be removed from one of them, and only one of the modules may register callback functions.

If the original Nordic nRF5 SDK example uses the SoftDevice, make sure that the mesh stack is initialized and enabled after the SoftDevice is enabled. In that case, SoftDevice events must be forwarded to the mesh stack. Add the following code to your application:

#include "nrf_sdh_soc.h"
#define MESH_SOC_OBSERVER_PRIO 0
static void mesh_soc_evt_handler(uint32_t evt_id, void * p_context)
{
nrf_mesh_on_sd_evt(evt_id);
}
NRF_SDH_SOC_OBSERVER(m_mesh_soc_observer, MESH_SOC_OBSERVER_PRIO, mesh_soc_evt_handler, NULL);

If you have multiple SOC observers, ensure that the SOC observer events are forwarded to the mesh stack only from one of the observers at a time.

Flash storage of network configuration is enabled by default in the mesh stack as well as in some of the Nordic nRF5 SDK applications. The flash areas used for this purpose may overlap and cause errors. To allow safe coexistence of the flash storage module Flash manager in the mesh stack and the flash storage module fstorage in the Nordic nRF5 SDK, add the following code block to nrf_mesh_config_app.h:

#include "fds.h"
#include "fds_internal_defs.h"
#define FLASH_MANAGER_RECOVERY_PAGE_OFFSET_PAGES FDS_PHY_PAGES
Note
If you are adding you own mesh functionality rather than working from an existing mesh example, you also need to add the file nrf_mesh_config_app.h. Copy it from the examples/templates folder in mesh stack repository into your project folder, and remove #error message at the top of the file. Make other appropriate changes to the file content, like adjusting ACCESS_ELEMENT_COUNT and ACCESS_MODEL_COUNT to the required number of elements and models.

nRF5 SDK NVM storage modules

Using nRF5 SDK modules such as fstorage, pstorage, or ble_flash for writing to flash may be problematic due to long timeslot events occupied by the mesh stack. Use the Flash manager module provided by the mesh stack instead.

Furthermore, when writing to flash, ensure to not write or erase areas utilized by the mesh stack modules and the bootloader (if present). By default, the mesh modules utilize the last x number of pages before the start of the bootloader, if present, or the last x number of pages of the available flash on the Nordic SoC. The value of x depends on the configuration of the mesh stack and can be calculated by:

x = 2 + ACCESS_FLASH_PAGE_COUNT + DSM_FLASH_PAGE_COUNT

Estimated sizes

The following are estimated sizes based on the Light switch server example, built using Keil v5 with optimization level O3 for nRF52832.

Definitions

Definition Value
ACCESS_MODEL_COUNT 3
ACCESS_SUBSCRIPTION_LIST_COUNT1
ACCESS_ELEMENT_COUNT 1
DSM_NONVIRTUAL_ADDR_MAX 3
DSM_VIRTUAL_ADDR_MAX 1
DSM_SUBNET_MAX 1
DSM_DEVICE_MAX 1
DSM_APP_MAX 1

Base sizes

Structure/union Size in bytes
fm_header_t 4
access_model_state_data_t 20
access_flash_subscription_list_t 4
dsm_local_unicast_address_t 4
dsm_flash_entry_addr_nonvirtual_t2
dsm_flash_entry_addr_virtual_t 16
dsm_flash_entry_subnet_t 36
dsm_flash_entry_devkey_t 20
dsm_flash_entry_appkey_t 36
flash_manager_metadata_t 8
dsm_flash_entry_t 36

Results

Count name Value
ACCESS_FLASH_PAGE_COUNT 1
DSM_FLASH_PAGE_COUNT 1
Total page count 4

Documentation feedback | Developer Zone | Subscribe | Updated