BLE Mesh compatibility with BLE Security Manager Protocol (SMP).

Hello,

I’ve been developing a hybrid BLE GATT and BLE Mesh firmware targeting the nRF52833 and nRF52840. The base functionality is working correctly using the example project from your SDK:

ble_peripheral_lbs_coex – sdk-nrf/samples/bluetooth/mesh

I’m now trying to enable the Security Manager Protocol (SMP) to support BLE Security Level 2 (LE Secure Connections with encryption and pairing). However, when I set CONFIG_BT_SMP=y in prj.conf, the firmware crashes on startup with the following hard fault:

E: ***** HARD FAULT *****
E: Debug event
E: r0/a1: 0x00000000 r1/a2: 0x20005dc8 r2/a3: 0x20005dc8
E: r3/a4: 0x0005309c r12/ip: 0x68e8f0e1 r14/lr: 0x0003baa5
E: xpsr: 0x61000000
E: Faulting instruction address (r15/pc): 0x0001a896
E: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
E: Current thread: 0x20005dc8 (main)
*** Booting EQUI LEVARE new v3.0.2-8ec1a907501d ***
*** Using nRF Connect SDK v3.0.2-89ba1294ac9b ***
*** Using Zephyr OS v4.0.99-f791c49f492c ***

If I remove or set CONFIG_BT_SMP=n, the firmware boots and runs normally again.

I hope you can shed some light on this issue, as I’d really like to move forward with adding BLE security to the project.
Thanks in advance for your help!

Best regards,
Julian



This is my full prj.conf:

#
# Copyright (c) 2021 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
CONFIG_NCS_SAMPLES_DEFAULTS=y

# Deferred logging helps improve LPN power consumption
# when friendship is established.
CONFIG_LOG_MODE_DEFERRED=n

# Enable logging
CONFIG_LOG=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_PRINTK=y
CONFIG_LOG_BACKEND_RTT=n
CONFIG_USE_SEGGER_RTT=n
CONFIG_FAULT_DUMP=2
CONFIG_DEBUG_OPTIMIZATIONS=y
CONFIG_THREAD_NAME=y

# Use printk with RTT
CONFIG_LOG_PRINTK=n

# Optional: Set log level (0=none, 1=error, 2=warn, 3=info, 4=debug)
CONFIG_LOG_DEFAULT_LEVEL=3

# Make sure this is disabled to allow full logging
CONFIG_LOG_MODE_MINIMAL=n

# General configuration
CONFIG_NCS_APPLICATION_BOOT_BANNER_STRING="EQUI LEVARE new"
# CONFIG_MAIN_STACK_SIZE=2048
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
CONFIG_FLASH=y
CONFIG_FLASH_MAP=y
CONFIG_NVS=y
CONFIG_SETTINGS=y
CONFIG_SETTINGS_RUNTIME=y
CONFIG_NVS_LOOKUP_CACHE=y
CONFIG_SETTINGS_NVS_NAME_CACHE=y
CONFIG_HWINFO=y
CONFIG_DK_LIBRARY=y
CONFIG_GPIO=y
CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE=0x8000
CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE=y
CONFIG_BT_DEVICE_NAME_DYNAMIC=y
CONFIG_BT_DEVICE_NAME_MAX=21
CONFIG_HEAP_MEM_POOL_SIZE=4096
CONFIG_SIZE_OPTIMIZATIONS=y
CONFIG_MINIMAL_LIBC=y
CONFIG_I2C=n
CONFIG_SPI=n
CONFIG_SERIAL=y

CONFIG_NEWLIB_LIBC=y

# Bluetooth configuration
CONFIG_BT=y
CONFIG_BT_DIS=y
CONFIG_BT_DIS_MANUF="Stogger Innovation Services"
CONFIG_BT_DIS_MODEL="EQUI LEVARE Jump Unit"
CONFIG_BT_DEVICE_NAME="EQUI LEVARE new"
CONFIG_BT_L2CAP_TX_BUF_COUNT=8
CONFIG_BT_OBSERVER=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_SETTINGS=y
# CONFIG_BT_SMP=y
# CONFIG_BT_BONDABLE=y

CONFIG_BT_EXT_ADV=y
# 5 sets are used by Bluetooth Mesh, 1 is needed for the sample advs.
CONFIG_BT_EXT_ADV_MAX_ADV_SET=6
CONFIG_BT_MAX_CONN=3
CONFIG_BT_ID_MAX=2

# Disable unused Bluetooth features
CONFIG_BT_CTLR_LE_ENC=n
CONFIG_BT_PHY_UPDATE=n
CONFIG_BT_CTLR_CHAN_SEL_2=n
CONFIG_BT_CTLR_MIN_USED_CHAN=n
CONFIG_BT_CTLR_PRIVACY=n

# Bluetooth Mesh configuration
CONFIG_BT_MESH=y
CONFIG_BT_MESH_RELAY=y
CONFIG_BT_MESH_FRIEND=n
CONFIG_BT_MESH_TX_SEG_MAX=10
CONFIG_BT_MESH_PB_GATT=y
CONFIG_BT_MESH_GATT_PROXY=y
CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME=y
CONFIG_BT_MESH_DK_PROV=y
CONFIG_BT_MESH_PROVISIONER=y
CONFIG_BT_MESH_CDB=y
CONFIG_BT_MESH_PB_ADV=y
CONFIG_BT_HCI=y

# Bluetooth Mesh models
CONFIG_BT_MESH_BATTERY_CLI=y
CONFIG_BT_MESH_BATTERY_SRV=y
CONFIG_BT_MESH_LVL_CLI=y
CONFIG_BT_MESH_LVL_SRV=y

# Increase the HCI command buffers to 3 for additional Peripheral LE Service
CONFIG_BT_BUF_CMD_TX_COUNT=3

 

Related