Bootloader pro RAK4630

,

Během výroby Meshtastic solární nabíječky s modulem RAK4630 jsem narazil na problém s nekompatibilním bootloaderem. RAK Wireless osazuje svoje moduly bootloaderem RUI3, ale Meshtastic potřebuje Arduino bootloader.

Text níže je stručný popis, jak vyměnit bootloadery pomocí SWD rozhraní, Raspberry Pi Pico a programu pyOCD. Postup, který text popisuje je ale použitelný pro libovolný procesor s SWD rozhraním (např. oblíbený RP2040 a.k.a. RPi Pico).

Rozhraní SWD je běžné pro procesory ARM. Modul RAK4630 má toto rozhraní na pinech 18 (SWDCLK) a 19 (SWDIO). Na mojí solární nabíječce (Meshtastic Motherboard) jsem pro tento účel připravil (neosazený) konektor J8, který má pinout podle obrázku níže.

SWD pinout na konektoru J8 na Meshtastic Motherboard (solární MPPT nabíječka pro Meshtastic).

Když jsem desku původně připravoval, tak jsem nepředpokládal, že SWD kdy použiju. Konektor J8 jsem do schématu přidal jen tak mimochodem. Všechny předchozí moduly od RAKu s procesorem nRF52840 které jsem používal, měly totiž od výroby Arduino bootloader. Nakonec se toto moje rozhodnutí oplatilo, protože bez SWD bych desku nikdy neoživil.

K programování přes SWD se dá použít libovolný SWD programátor (STLink, J-Link a další). Jeden SWD programátor nabízí i Raspberry Foundation a je založen na jejich procesoru RP2040 – Raspberry Pi Debug Probe. Tento programátor má oficiální firmware debugprobe.

Já sice Debug Probe nemám, ale našel jsem v šuplíku nepoužitou desku Raspberry Pi Pico, která procesor RP2040 používá a pro kterou existuje varianta debugprobe firmware – debugprobe_on_pico. Ten se dá do desky nahrát standardně pomocí BOOTSEL a zkopírováním UF2 binárky do Pico desky.

Poté, co je FW debugprobe nahraný v Pico desce stačí spojit piny následovně:

SWDPi PicoRAK4630Meshtastic Motherboard
SWDCLKGP218J8-2
SWDIOGP319J8-3
GNDGNDGNDJ8-4
Zapojení SWD mezi RPi Pico, RAK4630 a Meshtastic Motherboard.

Teď už zbývá jenom sotware. Na PC s Ubuntu (budeme používat Python, takže vše popsané níže by mělo fungovat i na Mac OS nebo Windows) stačí stáhnout WisCore bootloader pro RAK4631 ve formátu HEX a nainstalovat pyOCD:

$ pip install pyocd

Jakmile je hotovo, můžeme začít programovat (Pi Pico programátor už musí být připojen k PC přes USB). Následující příkaz je nutné spustit z adresáře, kde je uložen HEX soubor s bootloaderem WisCore:

$ pyocd commander -t nRF52840
pyocd> halt
pyocd> erase
pyocd> load WisCore_RAK4631_Board_Bootloader.hex
pyocd> reset

A to je celé. Od této chvíle již není SWD programátor potřeba, pro nahrání Meshtastic FW do RAK4630 stačí dvakrát zmáčknout tlačítko RESET, čímž se nový bootloader aktivuje a na USB sběrnici se ohlásí jako mass storage. Na tento odpojitelný disk pak stačí zkopírovat Meshtastic firmware ve formátu UF2 a je hotovo.

Snad to někomu pomůže, já hledáním strávil víkend.