First of all, lets flash Adafruit’s NRF52 bootloader for easier future flashing
My J-Link was “Broken. No longer used” - or so the JLink tools said (AKA bought from e-bay). So I had to go to openocd).
Connect the J-Link (or any SWD capable debugger supported by openocd - even an FT232 breakout will do) to the target - I have a Bluefruit by Adafruit.
pip3 install --user intelhex
cd Adafruit_nRF52_Bootloader
git clone https://github.com/adafruit/Adafruit_nRF52_Bootloader
git submodule update --init
make BOARD=feather_nrf52832 all
FIRMWARE=lib/softdevice/s132_nrf52_6.1.1/s132_nrf52_6.1.1_softdevice.hex
sudo openocd -f board/nordic_nrf52_dk.cfg -c init -c “reset init” -c halt -c “nrf5 mass_erase” -c “program $FIRMWARE verify” -c reset -c exit
FIRMWARE=_build/build-feather_nrf52832/feather_nrf52832_bootloader-0.3.2-28-g79a6a0c-nosd.hex
sudo openocd -f board/nordic_nrf52_dk.cfg -c init -c “reset init” -c halt -c “program $FIRMWARE verify” -c reset -c exi
💡**NOTE**: `nrf5` command was missing from my package manager’s `openocd` and I needed to install the git version!
Now the bootloader should be flash and we’re able to flash over serial from now on! Lets flash micropython (I advise not flashing master but a stable tag)
git clone https://github.com/micropython/micropython
cd micropython/ports/nrf
./drivers/bluetooth/download_ble_stack.sh
make BOARD=feather52 SD=s132 FROZEN_MPY_DIR=freeze all
pip install --user adafruit-nrfutil
adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build-feather52-s132/firmware.hex firmware.zip
adafruit-nrfutil dfu serial --package firmware.zip -p /dev/ttyUSB0 -b 115200
Done!
dzervas nrf> miniterm.py --raw /dev/ttyUSB0 115200
--- Miniterm on /dev/ttyUSB0 115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
MicroPython v1.12-dirty on 2020-04-23; Bluefruit nRF52 Feather with NRF52832
Type "help()" for more information.
>>>
If you want to play with other kind of firmware (Rust/C/whatever) and you have to flash ELF or hex
files, here is a little helper (put it on your .bashrc
or .zshrc
):
function adafruit-nrfutil-hex() {
port=${1}
file=${2}
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <port> <hex_file>"
return 1
fi
if [ "$(file "${file}" | cut -d' ' -f 2)" = "ELF" ]; then
echo "[+] Converting ELF file to hex"
objcopy -O ihex "${file}" "${file}.hex"
file="${file}.hex"
fi
echo "[+] Generating package"
adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application "${file}" "${file}.zip"
echo "[+] Flashing package over UART"
adafruit-nrfutil --verbose dfu serial --package "${file}.zip" --port "${port}" --baudrate 115200 --singlebank --touch 1200
}