Přeskočit na hlavní obsah

Nastavení firmwaru

Tento návod popisuje, jak si na svém počítači připravit repozitář firmwaru STICKER, sestavit binární soubory, nahrát image debug (ten zapíná interaktivní konzoli shellu) a otevřít konzoli. Odtud začíná práce popsaná v části Přístup pro vývojáře.

Firmware v2.0.0

Firmware zařízení STICKER je postavený na Zephyr RTOS. Návod popisuje přípravu vývojového prostředí (workspace), kompilaci image release, debug a provisioning, nahrání přes SWD a bezpečnostní model. Firmware v2.0.0 se sestavuje proti forku projektu Zephyr od HARDWARIO a po každém west update potřebuje aplikovat patch (viz krok 2).


Bezpečnostní model a architektura firmwaru​

Zařízení STICKER používá plochý aplikační image linkovaný přímo od začátku flash paměti:

  • Žádný vzdálený bootloader ani FUOTA: Zařízení neobsahuje MCUboot ani oddíl DFU. Firmware nelze aktualizovat bezdrátově (FUOTA) ani přes NFC. Původní příkaz enter_dfu byl záměrně odstraněn.
  • Žádná vzdálená útočná plocha: Image firmwaru nelze přes LoRaWAN ani NFC vyměnit, vrátit na starší verzi ani jinak upravit.
  • Pouze fyzický přístup přes SWD: Přeprogramování nebo aktualizace firmwaru v terénu vyžaduje vždy fyzický přístup k programovacím ploškám SWD a sondu SEGGER J-Link (make flash).

Co budete potřebovat​

  • Zařízení STICKER s fyzickým přístupem k SWD.
  • Ladicí sonda SEGGER J-Link (připojení SWD) pro nahrání firmwaru a výstup konzole RTT.
  • Hostitelský systém: Linux nebo macOS s nástroji Python 3, Git a CMake.
    • Uživatelé NixOS / Nix: V kořeni repozitáře je soubor shell.nix, který přes nix-shell automaticky připraví toolchain ARM, J-Link a prostředí Pythonu.

Příprava vývojového prostředí na počítači​

Repozitář firmwaru je na github.com/hardwario/sticker-firmware a spravuje se nástrojem West (metanástroj projektu Zephyr).

1. Vytvoření workspace a virtuálního prostředí​

mkdir sticker && cd sticker
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install west

2. Stažení firmwaru a modulů Zephyr SDK​

west init -m https://github.com/hardwario/sticker-firmware.git
west update
west patch apply
west zephyr-export
west packages pip --install

Manifest (west.yml) připíná fork projektu Zephyr od HARDWARIO, hardwario/sticker-zephyr, na pevnou revizi. west patch apply aplikuje patche STICKER na moduly spravované nástrojem West (stack LoRaWAN loramac-node). Spusťte ho znovu po každém west update; bez patche odmítne sestavení s LoRaWAN konfiguraci dokončit.

3. Instalace doplňujících závislostí​

pip install rttt
pip install protobuf grpcio-tools
west sdk install

Sestavení a nahrání firmwaru​

Všechny příkazy pro kompilaci a nahrání firmwaru se spouštějí z adresáře app ve workspace firmwaru:

cd sticker/app

Cíle sestavení​

PříkazPopis
makeSestaví produkční image release; konzole shellu je kvůli maximální úspoře energie vypnutá.
make debugSestaví image debug se zapnutou interaktivní konzolí shellu.
make flashNahraje zkompilovaný binární soubor do zařízení přes J-Link SWD.
make cleanSmaže výstupy sestavení a cache CMake.
make rtttSpustí interaktivní terminálovou konzoli RTT.

Zdrojový kód naformátujete pomocí clang-format příkazem make format spuštěným z kořene repozitáře (ne z adresáře app).

Sestavení a nahrání image debug:

make debug
make flash

Varianty sestavení​

ReleaseDebugProvisioning
Příkaz pro sestavení (v app)makemake debugwest build -p always -b sticker -- -DEXTRA_CONF_FILE="debug.conf;provisioning.conf"
Shell a konzole RTTneanoano
Výpis logužádnývarování a chybyžádný
Senzoryvšechnybez 1-Wire, akcelerometru, PIR a bzučákuvšechny
Regiony LoRaWANEU868, US915, AU915, AS923EU868EU868
Rádio P2Panonene
Historie senzorůkruhový buffer 32 KB ve flashkruhový buffer 992 B v RAM, při startu se vyprázdníminimální buffer v RAM
Řízení spotřebyzapnutévypnuté (automatické uspání po 2 h)vypnuté (automatické uspání po 2 h)
  • Release je produkční image: bez konzole, se všemi senzory a regiony, s rádiem P2P a historií ve flash paměti.
  • Debug (debug.conf) přidává shell a log přes RTT a dělá jim místo tím, že vynechá některé senzory, rádio P2P a jiné regiony než EU868. Senzor pro testování na stole zapnete na příkazové řádce, například west build -p always -b sticker -- -DEXTRA_CONF_FILE=debug.conf -DCONFIG_W1=y. Image debug je blízko limitu flash paměti; pokud se sestavení s dalším podsystémem nevejde, přidejte -DCONFIG_SHELL_HELP=n.
  • Provisioning (debug.conf + provisioning.conf) je image pro výrobní linku: se všemi senzory a se shellem pro zápis identity, klíčů a konfigurace, bez výpisu logu. Potom se bez mazání nahraje image release, který nastartuje se zapsanými hodnotami. Během zprovoznění nastavte config radio-mode lorawan a settings save, aby se image release při prvním startu připojil k síti. Oba image sestavte ze stejného commitu, aby se shodovalo rozvržení nastavení.

Každé vydání s tagem na GitHubu obsahuje tři image, hio-sticker-<version>-release.hex, hio-sticker-<version>-debug.hex a hio-sticker-<version>-provisioning.hex, a soubor SHA256SUMS pro kontrolu stažených souborů (sha256sum -c SHA256SUMS).

Chraňte úložiště NVS a klíče zařízení

Příkaz make flash spustí standardní west flash, který přepíše jen aplikační oddíl flash paměti. Nikdy nespouštějte úplné smazání čipu (west flash --erase ani J-Link mass erase), protože to vymaže nevolatilní úložiště (NVS) se sériovým číslem, secret key, claim tokenem a přístupovými údaji LoRaWAN.


Otevření konzole​

Jakmile je nahraný image debug a připojená sonda J-Link, spusťte terminál RTT z adresáře app:

make rttt

Otevře se interaktivní příkazový řádek shellu, ve kterém můžete spouštět příkazy config, alarm, sensor, history, clock, settings a ats.

Automatické uspání konzole

V sestavení debug zůstává MCU aktivní, aby konzole RTT pohotově reagovala, a to zvyšuje odběr z baterie. Pokud na konzoli po dobu CONFIG_APP_DEBUG_AUTOSUSPEND_S (výchozí: 2 hodiny) neprobíhá žádná aktivita, zařízení přejde do hlubokého spánku. Konzoli znovu zpřístupníte resetem MCU nebo odpojením a připojením napájení. Produkčních sestavení release se to netýká; mezi intervaly měření přecházejí do hlubokého spánku okamžitě.