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:
Download the bootloader from github at: GitHub - adafruit/Adafruit_nRF52_Bootloader: USB-enabled bootloaders for the nRF52 BLE SoC chips
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.
Build the bootloader, specifying the attached file which defines the specific pins for the Nano:
make BOARD=arduino_nano_33_ble all combinehex
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
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.
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)