Stiskněte "Enter" pro přeskočení obsahu

MeshCore – aktualizace firmware v routeru

0

Při výrobě mého MeshCore routeru s procesorem nRF52 byl aktuální firmware 1.12. V průběhu výroby vznikla verze 1.13, takže jsem ještě pohodlně aktualizoval přes USB. Jenže po instalaci na nějaké vyvýšené místo už nebývá dostupnost repeateru ideální a kvůli každé aktualizaci lézt někde na strom, není zrovna pohodlné…

Důležité odkazy:
Předchozí díl o MeshCore: MeshCore – OpenSource komunikační síť

MeshCore flasher: meshcore.io/flasher
Informace ohledně OTAFIX: github.com/meshcore-dev…
GitHub repozitář OTAFIX bootloaderu: github.com/oltaco/Adafruit…

Většina desek umožňuje tzv. OTA aktualizací – aktualizaci lze provést na dálku. Nejde však o aktualizaci pomocí LoRa sítě, ale např. přes Bluetooth, nebo WiFi. LoRa síť není na velký datový provoz stavěná a přeposlání 0,5 MB dat by ji tak trochu zahltilo…

Jedna zpráva v síti MeshCore může mít velikost okolo 180 bajtů. Přeposlání celého firmware o velikosti cca 0,5 MB by zabralo cca 3000 běžných zpráv.

Verze firmware 1.14 s sebou nese jednu zásadní změnu – vícebajtové identifikátory/prefixy. Původně byl přenos signálu mezi jednotlivými repeatery trasován podle prvního bajtů veřejného klíče. Hodnoty 0x00 až 0xFF umožňují nakódovat pouze 256 kombinací. Pokud je repeaterů více (což v praxi je), musí jich mít více stejný prefix. Po přijmutí zprávy pak v trasování zprávy nelze jednoznačně určit, jaký repeater zprávu přeposlal. Podobně je to v mapě, kde se může zobrazovat komunikace přes repeatery, které třeba ani nejsou aktivní.

Červeně jsou označeny nejednoznačné repeatery – všechny začínají stejným bajtem (0xfa, 0xab a 0x24)

Nevýhoda vícebajtových prefixů je omezení maximálního počtu přeposlání zpráv (skoků). Standardně podporuje MeshCore síť 64 skoků – tedy 64 přeposlání zprávy. V praxi je takový počet skoků více než dostatečný.
Vícebajtové prefixy omezí tento počet na 32 (2B prefix), nebo 16 (4B prefix).

Další nevýhoda je zpětná kompatibilita firmware – routery, které mají firmware starší než v1.4 zprávy s vícebajtovým prefixem „zahodí“ a nepřepošlou dále.

Stav přechodu na vícebajtové prefixy je možné sledovat na webu 2b.meshcore.cz

Příprava na OTA aktualizace desky Seeed Studio Xiao nRF52 WIO

Ve svém repeateru používám asi nejpopulárnější desku pro toto použití a to Seed Studio Xiao s úsporným procesorem nRF52. Před aktualizací je nutné přepnout procesor do DFU módu – vypne se uživatelský program a procesor přejde do režimu bootloaderu, který čeká na přijetí firmware.
Ve webovém flasheru se důrazně doporučuje do procesoru nejdříve nahrát alternativní OTAFIX bootloader, který řeší neúspěšné aktualizace přes Bluetooth.

Před samotnou prací s deskou doporučuji provést zálohy nastavení repeateru. Tedy zálohovat vše co je možné – hlavně privátní klíč. Zajistíme si tak, že zařízení se bude stále tvářit jako předtím. Repeter stačí připojit k počítači, ve webovém flasheru zvolit „Repeater Setup“ a poté tlačítko Export. Do počítače se stáhne JSON soubor s konfigurací, kterou lze v případě potřeby importovat.

Při stahování souborů si ověřte, že máte opravdu zvolenou správnou desku. Nahráním špatného firmware do procesoru si můžete aktualizaci „tak trochu“ zkomplikovat.

Na desce je potřeba po připojení k USB dvakrát krátce stisknout tlačítko reset – je to to miniaturní tlačítko vedle USB portu. Zařízení se připojí v DFU módu – mělo by se hlásit jako standardní USB disk. Na disku by měl být soubor „INFO_UF2.TXT“, pokud je v něm text „Board-ID: nRF52840-SeeedXiaoSense-v1“ (nebo podobný), je nutné do desky nahrát firmware ve verzi Sense. Viz poznámka na GitHubu.

Soubory na disku nRF před aktualizací bootloaderu – verze „Sense“

Na webu flasheru je nutné v pravém dolním rohu stáhnout bootloader. Jedná se o soubory *.uf2. Podle typu desky se stáhne verse s, nebo bez nápisu Sense. Tento soubor se jednoduše vloží do složky na připojeném disku a zařízení se samo restartuje.

Po restartu je již nový bootloader aktivní a je možné přistoupit ke klasické aktualizaci firmware přes USB. Kontrolu lze provést jednoduše přechodem opět do DFU módu a kontrolou souboru „INFO_UF2.TXT“. Na obrázku níže jde vidět, že se obsah souboru po aktualizaci změnil.

Soubory na disku po aktualizaci bootloaderu. Jde vidět i změna data.

Nyní je možné nahrát samotný firmware tlačítkem „Enter DFU Mode“ > „Flash“ a vybráním správného portu. Nahrát je samozřejmě ideální poslední dostupnou verzi. Po aktualizaci by měla být konfigurace zachována. Je to možné ověřit tlačítkem „Configure via USB“ a kontrolou nastavených položek. Případně je možné provést obnovení tlačítkem „import“.

OTA aktualizace přes Bluetooth

Závěrem se dostáváme k tomu nejdůležitějšímu – a tím je samotná aktualizace přes Bluetooth. Není potřeba se fyzicky dostat přímo k repeateru, ale aktualizaci lze provést na vzdálenost několika metrů pomocí mobilu.

V první řadě je potřeba do telefonu nainstalovat aplikaci nRF Device Firmware Update (Android / iOS), nebo nRF Connect (Android / iOS). Pro potřeby aktualizací stačí první z jmenovaných.

  • Aplikaci je potřeba nastavit takto (ozubené kolečko vpravo nahoře)
  • Packet Receipt Notification (PRN): ON
  • Number of packets: 30
  • Reboot time: 0ms
  • Scan timeout: 2000ms
  • Request high MTU: ON pro Android (při chybě „ERROR: Operation Failed“ vypnout)/ Na iOS není dostupné (já jsem musel tuto volbu přepnout zpět na OFF)
  • Disable resume: ON
  • Prepare object delay: 0ms
  • Force scanning: ON
  • Keep bond: OFF
  • External MCU DFU: OFF

Dále do telefonu stáhnout firmware z webFlasheru – tentokrát se jedná o *.zip soubor (verze 1.15 má velikost cca 0,5 MB). V aplikace MeshCore je nutné se připojit k routeru jako administrátor, zvolit konzoli a zadat příkaz start ota. Repeater se přepne do DFU módu ve kterém čeká na přijetí firmwaru – na desce bliká červená a zelená dioda.

V aplikaci nRF DFU nejprve vybereme potřebný *.zip soubor, poté zařízení, které se bude aktualizovat a stiskne se tlačítko Start. Aktualizace trvá cca minutu. Po dokončení se repeater restartuje. Nahraný firmware si můžeme ověřit v administraci pod položkou „Verze“ – já jsem pro kontrolu nejprve nahrál přes počítač verzi 1.14 a poté přes Bluetooth aktualizoval na 1.15.

Tímto je aktualizace u kompletně hotova. Nyní je mohou companiony které používají vícebajtové prefixy komunikovat i přes tento repeater.

Verze firmware 1.14 a novější automaticky přeposílá vícebajtové prefixy, není potřea nic donastavovat. Ale samotný advert repeateru je defaultně nastavený stále na 1B. Toto nastavení je možné změnit ve webovém konfigurátoru v rozšířeném nastavení (položka path hash mode). Chtěl jsem tu ale ještě ukázat možnost ovládánír repeateru přes CLI příkazy pomocí příkazového řádku.

V companionu je nutné se přihlásit k administraci repeateru. Po přihlášení zvolit příkazový řádek – a můžete zadávat příkazy. Pro zjištění stavu některého z nastavení se zadá get a příkaz. Pro nastavení se zadá set a patřičný příkaz s parametrem.
Na obrázku níže je vidět nejdříve dotaz get path.hash.mode, a repeater vrátil 0 (tedy mód 1B). Poté následuje příkaz set path.hash.mode 1, který nastaví 2B adverty. Dále opět dotaz pro kontrolu.

Seznam všech CLI příkazů na github.com/meshcore-dev/MeshCore…

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *