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

Both sides previous revision Previous revision
Next revision
Previous revision
s340:platformio_ide_integration_for_the_nrf52840_feather_express_with_s340 [2020/03/26 16:41]
orrmany [Introduction]
s340:platformio_ide_integration_for_the_nrf52840_feather_express_with_s340 [2020/03/29 22:57] (current)
orrmany [Adding S340 support to Plaform IO]
Line 10: Line 10:
 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. ​ 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 to the Adafruit nRF52 Core for the Arduino nRF52840 Express Feather ​within ​Platform IO. +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 S340''​ as your board type :)
s340/platformio_ide_integration_for_the_nrf52840_feather_express_with_s340.1585237312.txt.gz · Last modified: 2020/03/26 16:41 by orrmany