User Tools

Site Tools


s340:platformio_ide_integration_for_the_nrf52840_feather_express_with_s340

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
s340:platformio_ide_integration_for_the_nrf52840_feather_express_with_s340 [2020/03/26 15:40]
orrmany created
s340:platformio_ide_integration_for_the_nrf52840_feather_express_with_s340 [2020/03/29 22:57]
orrmany [Adding S340 support to Plaform IO]
Line 1: Line 1:
 ====== PlatformIO IDE integration for the nRF52840 Feather Express with S340 ====== ====== PlatformIO IDE integration for the nRF52840 Feather Express with S340 ======
  
 +**Note**. this page is building on the assumption that the reader has read content in the pages
 +  * [[arduino:​s340_softdevice_adafruit_nrf52840_feather_express|S340 SoftDevice & Adafruit nRF52840 Express Feather]]...
 +  * ...and [[s340:​arduino_ide_integration_for_the_nrf52840_feather_express_with_s340|Arduino IDE integration for the nRF52840 Feather Express with S340]]
 +
 +===== Introduction =====
 +[[https://​platformio.org|Platform IO]] is a "new generation toolset for embedded C/C++ development"​ built on  [[https://​marketplace.visualstudio.com/​items?​itemName=platformio.platformio-ide|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 [[https://​docs.platformio.org/​en/​latest/​faq.html#​convert-arduino-file-to-c-manually|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 [[https://​github.com/​rtgree01|rtgree01]]'​s PlatformIO adaptation. See also the [[http://​orrmany.hu/​wiki/​doku.php?​id=arduino:​s340_softdevice_adafruit_nrf52840_feather_express#​credits|Credits]] section with the page [[arduino:​s340_softdevice_adafruit_nrf52840_feather_express|S340 SoftDevice & Adafruit nRF52840 Express Feather]]
 +
 +
 +===== Prerequisites =====
 +  - Compile and build the modified bootloader as per [[arduino:​s340_softdevice_adafruit_nrf52840_feather_express|S340 SoftDevice & Adafruit nRF52840 Express Feather]]
 +  - Please read and understand [[s340:​arduino_ide_integration_for_the_nrf52840_feather_express_with_s340|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 [[https://​platformio.org/​install/​ide?​install=vscode|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. {{ :​s340:​annotation_2020-03-29_201803.png?​direct&​300 |}}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/''​. Modify ''​boards.txt''​ just like I did for the Arduino IDE. See sub-step "​1"​ within the section [[s340:​arduino_ide_integration_for_the_nrf52840_feather_express_with_s340#​third_major_stepadd_s340_to_the_bsp|Second major step: replace the bootloader with the modified bootloader]] at the Arduino IDE adaptation page:<​code>​
 +# ----------------------------------
 +# 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
 +</​code>​
 +  - Go to ''​.../​.platformio/​platforms/​nordicnrf52/​boards/''​. Copy ''​adafruit_feather_nrf52840.json''​ and name the copy as ''​adafruit_feather_nrf52840_s340.json''​. Change the following entries:<​code json>
 +    ...
 +    "​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",
 +        </​code>​
 +  - 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 [[s340:​arduino_ide_integration_for_the_nrf52840_feather_express_with_s340#​third_major_stepadd_s340_to_the_bsp|Second major step: replace the bootloader with the modified bootloader]] at the Arduino IDE adaptation page. Modify the FLASH and RAM settings:<​code>​
 +  FLASH (rx)     : ORIGIN = 0x31000, LENGTH = 0xF4000 - 0x31000</​code><​code>​
 +    RAM (rwx) :  ORIGIN = 0x20006000, LENGTH = 0x20040000 - 0x20006000</​code>​
 +  -  Modify ''​.../​.platformio/​packages/​framework-arduinoadafruitnrf52/​platform.txt''​ file because the Adafruit bootloader is now 0.3.0:<​code bash>
 +    # 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}
 +</​code>​
 +  - 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 the ''​include ''​ subdirectory of the S340 SoftDevice under this ''​s340_nrf52_6.1.1_API''​ subdirectory:<​code txt>​.../​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
 +</​code>​
 +  - Go to ''​bootloader/​feather_nrf52840_express''​. You will find ''​feather_nrf52840_express_bootloader-0.3.0_s**1**40_6.1.1.zip''​ and  ''​feather_nrf52840_express_bootloader-0.3.0_s**1**40_6.1.1.hex''​ here. Now copy the corresponding files or s340 as ''​feather_nrf52840_express_bootloader-0.3.0_s**3**40_6.1.1.hex''​ and ''​feather_nrf52840_express_bootloader-0.3.0_s**3**40_6.1.1.zip''​ from where you have built the modified bootloader with S340 (see page [[arduino:​s340_softdevice_adafruit_nrf52840_feather_express|S340 SoftDevice & Adafruit nRF52840 Express Feather]] about how to build it). That is, the directory ''​bootloader/​feather_nrf52840_express''​ should look like this<​code txt>
 +.../​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
 +</​code>​
 +Now you should be ready to rock. Restart PlatformIO IDE and select ''​Adafruit Bluefruit Feather nRF52840 Express w.ANT''​ as your board type :)
s340/platformio_ide_integration_for_the_nrf52840_feather_express_with_s340.txt · Last modified: 2020/05/05 20:24 by orrmany