Michael
Published © CC BY-NC-ND

nRF54L15 + Zephyr RTOS: Encrypted LoRa P2P Vibration & Audio

Hey guys, I built a wireless sensor node on the nRF54L15 Sense with Zephyr RTOS that streams audio FFT over BLE to WebUI+ IMU Data via LoRa.

IntermediateWork in progress86
nRF54L15 + Zephyr RTOS: Encrypted LoRa P2P Vibration & Audio

Things used in this project

Story

Read more

Schematics

Architecture of BLE/LoRa with TX/RX

HW/SW Architecture and used technologies for this prokect

Code

prj_combined.conf

C/C++
Project Config to use BLE & LoRa with Battery. UART for debugging is deactivated (no J-Link Debugger available on this board)
# Combined BLE + LoRa P2P for nRF54L15
# Key: NRF_SECURITY + BLE conflict fixed by using BUILTIN mbedtls

CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="nRF54L15 BLE+LoRa"
CONFIG_BT_MAX_CONN=1
CONFIG_BT_MAX_PAIRED=1
CONFIG_CMSIS_DSP=y
CONFIG_CMSIS_DSP_TRANSFORM=y
CONFIG_CMSIS_DSP_FASTMATH=y
CONFIG_CMSIS_DSP_COMPLEXMATH=y
CONFIG_CMSIS_DSP_STATISTICS=y
CONFIG_FPU=y
CONFIG_FPU_SHARING=y
CONFIG_AUDIO=y
CONFIG_AUDIO_DMIC=y
CONFIG_AUDIO_DMIC_NRFX_PDM=y
CONFIG_NRFX_PDM=y
CONFIG_CBPRINTF_FP_SUPPORT=y
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
CONFIG_BT_NUS=y
CONFIG_PWM=y
CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_PRINTK=y
CONFIG_LOG=y
CONFIG_LOG_BACKEND_UART=y
CONFIG_LOG_PRINTK=y
CONFIG_ASSERT=y
CONFIG_MAIN_STACK_SIZE=16384
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192
CONFIG_BT_RX_STACK_SIZE=8192
CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y
CONFIG_BT_HCI_TX_STACK_SIZE=4096
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
CONFIG_HEAP_MEM_POOL_SIZE=32768
CONFIG_BT_BUF_ACL_TX_SIZE=251
CONFIG_BT_L2CAP_TX_MTU=247
# Reduced from 32→8: IMU is now 10Hz (~100ms), 8 buffers are sufficient.
# 32 × 251B = 8KB of heap, with 90% RAM usage this caused ENOMEM (-12) on send.
CONFIG_BT_BUF_ACL_TX_COUNT=8
CONFIG_BT_BUF_EVT_RX_COUNT=32
CONFIG_I2C=y
CONFIG_I2C_GPIO=y
CONFIG_SENSOR=y
CONFIG_LSM6DSL=y
CONFIG_LSM6DSL_TRIGGER_NONE=y
CONFIG_ADC=y
CONFIG_ADC_NRFX_SAADC=y
CONFIG_BT_BAS=n
CONFIG_BT_DIS=n
CONFIG_LOG_DEFAULT_LEVEL=2
CONFIG_LOG_MODE_DEFERRED=y
CONFIG_SPI=y
CONFIG_INPUT=y
CONFIG_INPUT_GPIO_KEYS=y
CONFIG_INPUT_GPIO_QDEC=y

# ========== LoRa P2P ==========
CONFIG_LORA=y
CONFIG_LORAWAN=n
CONFIG_LORA_SX126X=y
CONFIG_LORA_LOG_LEVEL_WRN=y
CONFIG_COMPILER_OPT="-Wno-double-promotion"
CONFIG_FLASH=y
CONFIG_FLASH_MAP=y

# ========== MbedTLS & Crypto (compatible with both BLE and LoRa AES-CTR) ==========
CONFIG_NRF_SECURITY=y
CONFIG_MBEDTLS_LEGACY_CRYPTO_C=y
CONFIG_MBEDTLS_CIPHER_MODE_CTR=y
CONFIG_MBEDTLS_ENABLE_HEAP=y
CONFIG_MBEDTLS_HEAP_SIZE=8192

# ========== System Monitoring & Diagnostics (DISABLED) ==========
# SYS_HEAP_RUNTIME_STATS, THREAD_MONITOR, INIT_STACKS and STACK_INFO
# change the heap footer / thread struct layout on nRF54L11, which
# breaks the BLE RPC shared memory with the MPSL controller, causing
# a BUS FAULT (BFAR 0x1000b) during bt_enable().

Credits

Michael
1 project • 0 followers
HW engineer with experience in Automotive, Safety, Industry and Wireless (WiFi, BLE, LoRa). IoT Devices & Proof of Concept Design

Comments