nrf5340-device-interaction

star 26

Interact with nRF5340 devices over BLE, USB serial, and J-Link. Covers DFU firmware updates via mcumgr, BLE GATT service exploration, nRF Connect SDK CLI tools, RTT logging, and Zephyr shell commands. Use when flashing firmware, debugging BLE connections, reading sensor data, or managing nRF5340-based BCI receivers.

plurigrid By plurigrid schedule Updated 6/10/2026

name: nrf5340-device-interaction description: "Interact with nRF5340 devices over BLE, USB serial, and J-Link. Covers DFU firmware updates via mcumgr, BLE GATT service exploration, nRF Connect SDK CLI tools, RTT logging, and Zephyr shell commands. Use when flashing firmware, debugging BLE connections, reading sensor data, or managing nRF5340-based BCI receivers." trit: +1

nRF5340 Device Interaction

Talk to nRF5340 devices. Flash, debug, stream, monitor.

Connection Methods

Method Tool Speed Use Case
J-Link SWD nrfjprog / west flash Fast Development, full flash
USB Serial screen / minicom 115200 Zephyr shell, logs
BLE nRF Connect app / bluetoothctl Wireless Production DFU, GATT
RTT J-Link RTT Viewer Real-time Debug logging (no UART needed)

Flash Firmware

# Via west (preferred)
west flash --erase

# Via nrfjprog (J-Link)
nrfjprog --program app.hex --chiperase --verify
nrfjprog --reset

# Flash network core separately
nrfjprog --program net_core.hex --coprocessor CP_NETWORK --chiperase
nrfjprog --reset

# Recover bricked device
nrfjprog --recover
nrfjprog --recover --coprocessor CP_NETWORK

DFU Over BLE (mcumgr)

# List images on device
mcumgr --conntype ble --connstring peer_name=BCI_RX image list

# Upload new firmware
mcumgr --conntype ble --connstring peer_name=BCI_RX image upload app_update.bin

# Confirm and reset
mcumgr --conntype ble --connstring peer_name=BCI_RX image confirm
mcumgr --conntype ble --connstring peer_name=BCI_RX reset

DFU Over USB

# Create DFU package
nrfutil pkg generate --hw-version 52 --sd-req 0x00 \
  --application app.hex --application-version 1 dfu_pkg.zip

# Flash via USB serial
nrfutil dfu serial -pkg dfu_pkg.zip -p /dev/cu.usbmodem* -b 115200

BLE GATT Exploration

# Scan for nRF5340 devices
bluetoothctl
> scan on
# Look for "BCI_RX" or "nRF5340"
> scan off
> connect AA:BB:CC:DD:EE:FF

# List services
gatttool -b AA:BB:CC:DD:EE:FF --primary

# Nordic UART Service (NUS) — common for BCI data streaming
# Service UUID: 6e400001-b5a3-f393-e0a9-e50e24dcca9e
# TX Char:      6e400003-b5a3-f393-e0a9-e50e24dcca9e (notify)
# RX Char:      6e400002-b5a3-f393-e0a9-e50e24dcca9e (write)

# Subscribe to notifications (BCI data stream)
gatttool -b AA:BB:CC:DD:EE:FF --char-write-req -a 0x0012 -n 0100 --listen

Zephyr Shell (USB Serial)

# Connect to Zephyr shell
screen /dev/cu.usbmodem* 115200

# Useful shell commands
> kernel version
> kernel threads
> kernel stacks
> device list
> sensor get bme280
> flash read 0 0x0 32
> bt scan on
> bt connect AA:BB:CC:DD:EE:FF public
> log enable dbg app

RTT Logging (No UART Pins Needed)

# Start J-Link RTT server
JLinkRTTViewerExe

# Or via command line
JLinkExe -device nRF5340_xxAA_APP -if SWD -speed 4000
> connect
> r
# RTT output appears automatically

# In Zephyr, enable RTT backend:
# CONFIG_USE_SEGGER_RTT=y
# CONFIG_LOG_BACKEND_RTT=y
# CONFIG_SHELL_BACKEND_RTT=y

BCI Data Streaming Protocol

The zig-syrup-bci receiver uses NUS (Nordic UART Service) to stream:

Packet: [0xBC] [modality] [channel_count] [sample_count] [data...] [crc8]

Modality bytes:
  0x01 = EEG (from Cyton dongle relay)
  0x02 = fNIRS (from OpenNIRScap ADC)
  0x03 = Eye tracking (from Tobii/Pupil)
  0x04 = IMU (from onboard LSM6DSO)
  0x05 = Pose (from MediaPipe relay)

GF(3) trit per packet:
  EEG=0, fNIRS=+1, Eye=-1, IMU=0, Pose=0

Power Profiling

# nRF Power Profiler Kit II
nrfutil toolchain-manager launch --ncs-version v2.6.0 -- \
  nrfutil ppk2 measure --period 10 --average

# Expected current draw:
# BLE advertising: ~1.5 mA
# BLE connected, streaming NUS: ~3.5 mA
# BLE + SPI ADC polling: ~5 mA
# System OFF: ~0.4 µA

Troubleshooting

Symptom Cause Fix
nrfjprog: no debugger J-Link not connected Check USB, install J-Link drivers
BLE not advertising Network core not flashed Flash net core: west flash --domain cpunet
GATT empty Services not registered Check bt_gatt_service_register() in firmware
DFU fails "no slot" MCUboot not configured Build with -DCONFIG_BOOTLOADER_MCUBOOT=y
RTT no output Wrong device selected Use nRF5340_xxAA_APP not nRF5340_xxAA_NET
NUS no data Notifications not enabled Write 0100 to CCCD handle
High current in sleep UART/SPI left active Disable peripherals before sleep

Related Skills

Skill Connection
nrf5340-hardware Pin assignments, power domains, peripherals
cyton-dongle 2.4GHz EEG data source relayed through nRF5340
zig-syrup-bci Firmware consuming this device's BLE stream
opennirscap-build fNIRS sensor board connected via SPI to nRF5340
Install via CLI
npx skills add https://github.com/plurigrid/asi --skill nrf5340-device-interaction
Repository Details
star Stars 26
call_split Forks 8
navigation Branch main
article Path SKILL.md
More from Creator