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 |