Adafruit Feather Express, Zephyr and some Black Magic
--
I was playing around with some Nordic boards. One of them is this one — Adafruit Feather Express with nRF52840 BLE SoC. Initially, I used Arduino IDE to write some basic test apps but for a project of mine with friends, we decided to set up nRF SDK because we were designing a custom board for a project with nRF52840.
First steps
My friends from NextLab have solid experience with Nordic and of course other chips. They helped me to set up a working environment using nRF5 SDK version 16 and Eclipse as an IDE. Read here how to make it work:
Cool, but I decided to get a little further. Searching for some details around the new Nordic Connect SDK on the Nordic DevZone I found something interesting mentioning PlatformIO. Going further I found that this is the only straightforward way to set up a new project for CLion using Platformio’s plugin. CLion does not currently support the build system west which is used by Zephyr and the nRF Connect SDK.
Giving it a try
Following the Platformio official guide I could easily set up a project for my Adafruit Feather Express.
The options
You have several options when creating a project for your Adafruit. You can use the “Adafruit Feather nRF52840 Express” board from the wizard but here is the gotcha — it will use the Arduino framework and also you must use one of the following protocols for upload:
jlink, nrfjprog, nrfutil, stlink
Another option is to use “Nordic nRF52840-DK (Adafruit BSP)”. Again limited for my purpose frameworks (just Arduino) and few debugger options:
jlink, nrfjprog, stlink
The last chance is to use “Nordic nRF52840-DK” — plenty of upload protocols and all frameworks supported. I want to use my Black Magic Probe debugger. Let’s go!
Black magic blinky
Make sure your Black Magic is up-to-date with the latest firmware. My previous article addresses this.
After the project was created I copied the blinky demo from GitHub. Then build the project. To use the Black Magic Probe you must update the platformio.ini configuration:
[env:nrf52840_dk]
platform = nordicnrf52
board = nrf52840_dk
framework = zephyrdebug_tool = blackmagic
debug_port = /dev/cu.usbmodem79A67BCB1
upload_protocol = blackmagic
upload_port = /dev/cu.usbmodem79A67BCB1
Select PlatformIO Upload or PlatformIO Debug target and hit run!
Everything should be fine except that you won’t see any blinking LEDs… Ha-ha-ha…
Device Trees
After spending some time debugging and testing why the hell the LED is not working, at last, I figured it out — My Adafruit and the DK have different device trees, which means different pinouts mapping, different LEDs mapping, etc. Remember that we used the DK as a template to have a Zephyr and Black Magic support!
Checking this one…
And the DK and you will find the differences:
Okay… let’s try just changing the defines to match our board…
#define LED_PORT "GPIO_1"
#define LED 15
Build, run, and voila!
Extras
Currently, the setup requires two USB cables to power the probe and the Adafruit separately. You can get rid of the Adafruit power and supply it from the probe directly. Slight modifications are needed in platformio.ini. I modified the default debug commands and added:
monitor tpwr enable