(This is a repost from my personal wiki-page)
Note. this page is building on the assumption that the reader has read content in the posts
Introduction
Platform IO is a “new generation toolset for embedded C/C++ development” built on Microsoft’s Visual Studio Code. It can be used as an alternative IDE for “Arduino related work”.
It has a limited support for .ino files, as those have to be manually converted to normal C++ source files for full support.
This document is about enabling embedded C/C++ development for ANT+ protocols within PlatformIO. It describes how to add S340 SD support within Platform Io to the Adafruit nRF52 Core for the Arduino nRF52840 Express Feather.
Credits
This work is based on rtgree01‘s PlatformIO adaptation. See also the Credits section with the page S340 SoftDevice & Adafruit nRF52840 Express Feather
Prerequisites
-
Compile and build the modified bootloader as per S340 SoftDevice & Adafruit nRF52840 Express Feather
-
Please read and understand Arduino IDE integration for the nRF52840 Feather Express with S340 first.
Adding S340 support to Plaform IO
-
Download and install Platform IO IDE for VSCode as per the instructions.
-
Ensure that you can program your Feather with Platform IO by, say, compiling and loading the classic Blinky example into the Feather.
See https://docs.platformio.org/en/latest/boards/nordicnrf52/adafruit_feather_nrf52840.html for further details
-
-
After the first succesful compilation and upload, all the necessary packages has got installed. Go to the location of the “framework package” (this corresponds to the concept of “Core” in the Arduino IDE):
-
On Linux:
~/.platformio/packages/framework-arduinoadafruitnrf52/
-
On Windows:
%HOMEDIR%\.platformio\packages\framework-arduinoadafruitnrf52\
-
-
So, go to
…/.platformio/packages/framework-arduinoadafruitnrf52/bootloader/feather_nrf52840_express/
. Copy the bootloader .zip (0.3.0_s340_6.1.1.zip
) and .hex (0.3.0_s340_6.1.1.hex
) from the build directory of the freshly modified bootloader package here. -
Go to
…/.platformio/packages/framework-arduinoadafruitnrf52/
. Modifyboards.txt
just like I did for the Arduino IDE. See sub-step “1” within the section Second major step: replace the bootloader with the modified bootloader at the Arduino IDE adaptation page:# ---------------------------------- # Bluefruit Feather nRF52840 Express s340 # ---------------------------------- feather52840_s340.name=Adafruit Bluefruit Feather nRF52840 Express w.ANT # VID/PID for bootloader with/without UF2, Arduino + Circuitpython App feather52840_s340.vid.0=0x239A feather52840_s340.pid.0=0x8029 feather52840_s340.vid.1=0x239A feather52840_s340.pid.1=0x0029 feather52840_s340.vid.2=0x239A feather52840_s340.pid.2=0x002A feather52840_s340.vid.3=0x239A feather52840_s340.pid.3=0x802A # Upload feather52840_s340.bootloader.tool=bootburn feather52840_s340.upload.tool=nrfutil feather52840_s340.upload.protocol=nrfutil feather52840_s340.upload.use_1200bps_touch=true feather52840_s340.upload.wait_for_upload_port=true feather52840_s340.upload.maximum_size=815104 feather52840_s340.upload.maximum_data_size=237568 #TODO: fix sizes above # Build feather52840_s340.build.mcu=cortex-m4 feather52840_s340.build.f_cpu=64000000 feather52840_s340.build.board=NRF52840_FEATHER feather52840_s340.build.core=nRF5 feather52840_s340.build.variant=feather_nrf52840_express feather52840_s340.build.usb_manufacturer="Adafruit LLC" feather52840_s340.build.usb_product="Feather nRF52840 Express" feather52840_s340.build.extra_flags=-DNRF52840_XXAA {build.flags.usb} feather52840_s340.build.ldscript=nrf52840_s340_v6.ld feather52840_s340.build.vid=0x239A feather52840_s340.build.pid=0x8029 # SofDevice Menu feather52840_s340.menu.softdevice.s340v6=0.3.0 SoftDevice s340 6.1.1 feather52840_s340.menu.softdevice.s340v6.build.sd_name=s340 feather52840_s340.menu.softdevice.s340v6.build.sd_version=6.1.1 feather52840_s340.menu.softdevice.s340v6.build.sd_fwid=0x00B9 # Debug Menu feather52840_s340.menu.debug.l0=Level 0 (Release) feather52840_s340.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0 feather52840_s340.menu.debug.l1=Level 1 (Error Message) feather52840_s340.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1 feather52840_s340.menu.debug.l2=Level 2 (Full Debug) feather52840_s340.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2 feather52840_s340.menu.debug.l3=Level 3 (Segger SystemView) feather52840_s340.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3
-
Go to
…/.platformio/platforms/nordicnrf52/boards/
. Copyadafruit_feather_nrf52840.json
and name the copy asadafruit_feather_nrf52840_s340.json
. Change the following entries:... "ldscript": "nrf52840_s340_v6.ld", ... "softdevice": { "sd_flags": "-DS340", "sd_name": "s340", "sd_version": "6.1.1", "sd_fwid": "0x00B9" }, ... "name": "Adafruit Feather nRF52840 Express S340",
-
Go to
…/.platformio/packages/framework-arduinoadafruitnrf52/cores/nRF5/linker
. Copy/duplicate the S140 linker script as nrf52840_s140_v6.ld. Modify the linker script memory settings just like I did for the Arduino IDE. See sub-step “2” within the section Second major step: replace the bootloader with the modified bootloader at the Arduino IDE adaptation page. Modify the FLASH and RAM settings:FLASH (rx) : ORIGIN = 0x31000, LENGTH = 0xF4000 - 0x31000
RAM (rwx) : ORIGIN = 0x20006000, LENGTH = 0x20040000 - 0x20006000
-
Modify
…/.platformio/packages/framework-arduinoadafruitnrf52/platform.txt
file because the Adafruit bootloader is now 0.3.0:# Bootloader version # tools.bootburn.bootloader.file={runtime.platform.path}/bootloader/{build.variant}/{build.variant}_bootloader-0.2.13_{build.sd_name}_{build.sd_version} tools.bootburn.bootloader.file={runtime.platform.path}/bootloader/{build.variant}/{build.variant}_bootloader-0.3.0_{build.sd_name}_{build.sd_version}
-
Add the S340 API headers to
…/.platformio/packages/framework-arduinoadafruitnrf52/cores/nRF5/nordic/softdevice/
.-
Make
s340_nrf52_6.1.1_API
and the corresponding dir tree below it: Copy theinclude
subdirectory of the S340 SoftDevice under thiss340_nrf52_6.1.1_API
subdirectory:.../s340_nrf52_6.1.1_API └── include ├── ant_error.h ├── ant_interface.h ├── ant_parameters.h ├── ble.h ├── ble_err.h ├── ble_gap.h ├── ble_gatt.h ├── ble_gattc.h ├── ble_gatts.h ├── ble_hci.h ├── ble_l2cap.h ├── ble_ranges.h ├── ble_types.h ├── nrf52 │ └── nrf_mbr.h ├── nrf_error.h ├── nrf_error_sdm.h ├── nrf_error_soc.h ├── nrf_nvic.h ├── nrf_sd_def.h ├── nrf_sdm.h ├── nrf_soc.h └── nrf_svc.h
-
-
Go to
bootloader/feather_nrf52840_express
. You will findfeather_nrf52840_express_bootloader-0.3.0_s140_6.1.1.zip
andfeather_nrf52840_express_bootloader-0.3.0_s140_6.1.1.hex
here. Now copy the corresponding files or s340 asfeather_nrf52840_express_bootloader-0.3.0_s340_6.1.1.hex
andfeather_nrf52840_express_bootloader-0.3.0_s340_6.1.1.zip
from where you have built the modified bootloader with S340 (see page S340 SoftDevice & Adafruit nRF52840 Express Feather about how to build it). That is, the directorybootloader/feather_nrf52840_express
should look like this.../feather_nrf52840_express ├── feather_nrf52840_express_bootloader-0.2.1_s140_6.1.1.zip ├── feather_nrf52840_express_bootloader-0.2.1_s140_6.1.1.hex ├── feather_nrf52840_express_bootloader-0.3.0_s340_6.1.1.hex └── feather_nrf52840_express_bootloader-0.3.0_s340_6.1.1.zip
Now you should be ready to rock. Restart PlatformIO IDE and select Adafruit Bluefruit Feather nRF52840 Express S340
as your board type 🙂