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 |