Using Adafruit nRF52 Bootloader with Nano33BLE

Posting this response as a new thread to make it easier for others to locate.

Note: Using the Adafruit nRF52 Bootloader requires a J-Link or similar device to perform the initial load of the bootloader.

In order to replace the Arduino bootloader with the Adafruit nRF52 Bootloader (which includes DFU over USB and OTA), I performed the following steps:

  1. Download the bootloader from github at: GitHub - adafruit/Adafruit_nRF52_Bootloader: USB-enabled bootloaders for the nRF52 BLE SoC chips

  2. Add the attached folder/file to the src/boards directory. This folder/file contains the Nano board info for the bootloader. Note: Feel free to modify this file as it is only a starting point - I assigned A6 and A7 as button pins to allow me to perform resets via these pins as well as double-presses of the actual reset button on the Nano.

  3. Build the bootloader, specifying the attached file which defines the specific pins for the Nano: make BOARD=arduino_nano_33_ble all combinehex

  4. Connect your nano to your J-Link or similar device. The pins are on the bottom and the pin assignments are defined here on page 2: https://content.arduino.cc/assets/Pinout-NANOble_latest.pdf

  5. Load the SoftDevice (if you are using one): make BOARD=arduino_nano_33_ble sd . Note: The current version of the bootloader supports version 6.1.1 of the S140 soft device. It does not yet support 7.0.1.

  6. Load the actual bootloader to the Nano: make BOARD=arduino_nano_33_ble flash

Once you’ve done the above, if you have the USB plugged into your pc, you should see the Nano appear as a hard drive.

To upload the application, simply copy it to the device, but make sure it’s in UF2 format first. The instructions for this are also on the Github page, but it’s as simple as running something like uf2conv.py firmware.bin -c -b 0x26000 -f 0xADA52840. The 0x26000 value is the offset from the soft device. It is specific to the version of the softdevice you are using and 0x26000 is the size of version 6.1.1 of the S140 SoftDevice.

I hope that helps! This bootloader offers far more functionality for a production-level product. It is especially helpful when you use the native NRF5 SDK.

arduino_nano_33_ble.zip (2.08 KB)

Thanks for this. Super helpful :D

Thanks a lot ! I needed this post to evaluate circuitpython on the Nano 33 BLE board.

I quickly designed a fixture in freecad to temporarily connect to the debug pins at the bottom of the board. Fixture could be modified to use pogo pins but I managed to make everything work with straight header pins.

The other end is connected to a well known J-link clone ala Burn bootloader Arduino nano 33 BLE | Djynet.
With that I’m able to load the adafruit bootloader that you described above to the Nano BLE successfully.

Thing is posted here Arduino Nano 33 BLE - Debug Port Pin Fixture by Lutino - Thingiverse

nano33ble_swd_pin_connect.png

Hi,

i used: https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases with arduino_nano_33_ble_bootloader-0.3.2_s140_6.1.1.hex

Idea was to use Arduino Nanao BLE with Bluefruit lib.

Within Plattform io it works only if i declare board as Adafruit nrf52480 feather

It works but pinmap is different.

Doeas someone have experience using nrf52 Boatfloader with plattform io ?

Thanks in advance.

Marc