This post is a work in progress (WIP). The result of this experiment is a success. I have flashed my SparkFun nRF52840 mini, and I’m able to run the bicycle combined speed & cadence sensor example.
Before we begin, a big hats off to Charles, who brought support for the SparkFun board I have to the Adafruit nRF52 bootloader. Cheers Charles! I owe you a beer :) – GitHub profile, blog
Important software versions:
nRF SDK: nRF5_SDK_15.3.0_59ac345 ARM GCC: 8.2.1 s340: s340_nrf52_6.1.1 board: SparkFun Pro nRF52840 mini
Rough outline:
1. Checkout charlesportwoodii‘s PR
2. Copy over src/linker/s140_v6.ld to src/linker/s340_v6.ld – there are zero differences between these two files
3. Patch your main.c from the checked out source to initialise the soft device with the ANT_LICENSE_KEY
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff –git a/src/main.c b/src/main.c | |
index 8ac1dba..2e43f49 100644 | |
— a/src/main.c | |
+++ b/src/main.c | |
@@ -301,7 +301,7 @@ static uint32_t softdev_init(bool init_softdevice) | |
.accuracy = NRF_CLOCK_LF_ACCURACY_250_PPM | |
}; | |
– APP_ERROR_CHECK( sd_softdevice_enable(&clock_cfg, app_error_fault_handler) ); | |
+ APP_ERROR_CHECK( sd_softdevice_enable(&clock_cfg, app_error_fault_handler, ANT_LICENSE_KEY) ); | |
sd_nvic_EnableIRQ(SD_EVT_IRQn); | |
/*————- Configure BLE params ————-*/ |
4. Patch the Makefile to use the s340 soft device files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff –git a/Makefile b/Makefile | |
index 6dbaf98..4acd319 100644 | |
— a/Makefile | |
+++ b/Makefile | |
@@ -104,7 +104,7 @@ ifneq ($(IS_52832),) | |
SD_NAME = s132 | |
DFU_DEV_REV = 0xADAF | |
else | |
-SD_NAME = s140 | |
+SD_NAME = s340 | |
DFU_DEV_REV = 52840 | |
endif | |
@@ -275,7 +275,7 @@ CFLAGS += -DNRF52832_XXAA | |
CFLAGS += -DS132 | |
else | |
CFLAGS += -DNRF52840_XXAA | |
-CFLAGS += -DS140 | |
+CFLAGS += -DS340 | |
endif | |
@@ -314,7 +314,7 @@ ASMFLAGS += -DNRF52 | |
ASMFLAGS += -DS132 | |
else | |
ASMFLAGS += -DNRF52840_XXAA | |
-ASMFLAGS += -DS140 | |
+ASMFLAGS += -DS340 | |
endif | |
C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES)) |
5. Place the contents of the s340 archive (sign up for the evaluation licence from thisisant.com, wait for 1 business day, and then download the s340 soft device)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ tree lib/softdevice/s340_nrf52_6.1.1/ | |
lib/softdevice/s340_nrf52_6.1.1/ | |
├── s340_nrf52_6.1.1_API | |
│ └── include (all header files must be under here) | |
└── s340_nrf52_6.1.1_softdevice.hex |
6. Flash your nRF52840 device (double reset to enter the DFU mode)
$ make BOARD=sparkfun_pro_nrf52840_mini SERIAL=/dev/tty.usbmodem14301 dfu-flash
7. Verify
When you enter DFU mode after the above command completes, the contents of INFO_UF2.TXT must look something like the contents here:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
UF2 Bootloader 0.2.10-4-g79fe6cc-dirty lib/nrfx (v1.1.0-1-g096e770) lib/tinyusb (legacy-755-g55874813) s340 6.1.1 | |
Model: SparkFun Pro nRF52840 Mini | |
Board-ID: SparkFun-Pro-nRF52840-Mini | |
Bootloader: s340 6.1.1 | |
Date: Jul 12 2019 |
Very important – update your app’s linker script:
Since your board now runs the s340 soft device, update the FLASH and RAM values in your app’s linker script:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# diff diff ~/developer/em/nRF5_SDK_15.3.0_59ac345/examples/ant/ant_plus/ant_bsc/bsc_tx/pca10040/s212/armgcc/ant_bsc_tx_gcc_nrf52.ld ~/developer/em/bia/src/ant_bsc_tx_gcc_nrf52.ld | |
8,9c8,9 | |
< FLASH (rx) : ORIGIN = 0x12000, LENGTH = 0x6e000 | |
< RAM (rwx) : ORIGIN = 0x20000b80, LENGTH = 0xf480 | |
— | |
> FLASH (rx) : ORIGIN = 0x00031000, LENGTH = 0x000F4000-0x00031000 | |
> RAM (rwx) : ORIGIN = 0x20002000, LENGTH = 0xf480 |
The new values are not black magic. They’re documented here: https://devzone.nordicsemi.com/nordic/short-range-guides/b/getting-started/posts/adjustment-of-ram-and-flash-memory
Resources:
- RAM and FLASH addresses: https://devzone.nordicsemi.com/nordic/short-range-guides/b/getting-started/posts/adjustment-of-ram-and-flash-memory
- MBR and boot loader info from Nordic: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsds_s132%2FSDS%2Fs1xx%2Fmbr_bootloader%2Fmbr_bootloader.html&cp=3_4_1_0_11
- Reading boot loader settings: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fug_nrfutil%2FUG%2Fnrfutil%2Fnrfutil_settings_generate_display.html&cp=6_5_6
- Usage of MBR params: https://devzone.nordicsemi.com/f/nordic-q-a/22329/mbr-params-page
- Segger J-Link Mini: https://www.adafruit.com/product/3571
Random notes below, don’t follow any of it, or execute any commands from here on out. You’ve been warned.
FLASH and RAM for s340 6.1.1:
S340- 6.1.1
Min RAM start: 0x20002000
Flash start: 0x31000
Generate boot loader settings:
(nrfutil) h2:nrfutil jude$ nrfutil settings generate –family NRF52840 –softdevice ../nRF5_SDK_15.3.0_59ac345/components/softdevice/s112/hex/s112_nrf52_6.1.1_softdevice.hex –bootloader-version 1 –bl-settings-version 1 a.hex
$ git status
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
h2:Adafruit_nRF52_Bootloader jude$ git status | |
On branch master | |
Your branch is up to date with 'origin/master'. | |
Changes not staged for commit: | |
(use "git add <file>…" to update what will be committed) | |
(use "git checkout — <file>…" to discard changes in working directory) | |
modified: Makefile | |
modified: src/main.c | |
Untracked files: | |
(use "git add <file>…" to include in what will be committed) | |
lib/softdevice/s340_nrf52_6.1.1/ | |
src/linker/s340_v6.ld | |
no changes added to commit (use "git add" and/or "git commit -a") | |
h2:Adafruit_nRF52_Bootloader jude$ |