BleLab spojení je kalendář

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

GATT: proč potvrzení stojí celý interval

Nad linkovou vrstvou sedí GATT — model, ve kterém má zařízení služby, služby mají charakteristiky a charakteristiky mají hodnoty. Je to jednoduché a naprosto zásadní pro výkon, protože každá operace má jinou cenu v intervalech.

notifikace30 ms · 200 op/szápis bez odpovědi30 ms · 200 op/szápis s odpovědí60 ms · 17 op/sindikace60 ms · 17 op/sčtení60 ms · 17 op/sjeden intervalPotvrzované operace stojí dva intervaly, a rychlejší PHY na tom nezmění nic.
Pět operací, jedna osa. Modrá čárkovaná je jeden interval. Všimni si, že rychlejší PHY zkrátí paket, ale ne ten sloupec — čeká se na příští schůzku, ne na přenos.
operacepaketůčeká na odpověď?cena
notifikace1ne1 interval
zápis bez odpovědi1ne1 interval
indikace2ano2 intervaly
zápis s odpovědí2ano2 intervaly
čtení2ano2 intervaly

Ta dvojka je horší, než vypadá

Potvrzovaná operace nemůže poslat další, dokud nedorazí odpověď — a ta přijde nejdřív v příští schůzce. Při intervalu 30 ms to znamená 16 operací za sekundu, ať je PHY jakkoli rychlé. Nepotvrzovaná notifikace se pošle šestkrát za schůzku, tedy dvěstěkrát za sekundu.

Dvanáctinásobný rozdíl mezi „read“ a „notify“, a nemá to nic společného s rychlostí rádia. Aplikace, která čte hodnotu v cyklu (polling), je proto vždycky mnohonásobně pomalejší než ta, která si nechá posílat notifikace — a to je nejčastější výkonnostní chyba v BLE aplikacích vůbec.

Návrhové pravidlo

  1. Data od periferie → notifikace. Nikdy nečíst v cyklu.
  2. Povel k periferii → zápis bez odpovědi, pokud aplikace umí ztrátu ošetřit sama (a v robotice by měla — viz RoboLinkLab).
  3. Zápis s odpovědí jen tam, kde na potvrzení opravdu záleží: konfigurace, kalibrace, příkazy, které se nesmí ztratit.
  4. Indikaci skoro nikdy. Je to notifikace s potvrzením, tedy dvojnásobná cena za jistotu, kterou většinou zajistí aplikační protokol líp.

Souvislost, kterou je snadné přehlédnout: tohle je táž past jako v NetLabu — spolehlivost na nižší vrstvě stojí latenci a při krátkých zprávách se nevyplácí. BLE dává na výběr obojí a výchozí volba v mnoha knihovnách je ta drahá.