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
4. Patch the Makefile to use the s340 soft device 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)
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:
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:
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