11.3. Rádio a linková vrstva¶
Spodní dvě vrstvy zásobníku BLE jsou z pohledu Pythonu téměř zcela automatické – rádiový čip a vrstvy, které nad ním MicroPython provozuje, zařizují vše od výběru kanálu po opětovné odeslání ztraceného paketu. Tři z voleb, které činí, se přesto projevují až do uživatelského API: výkon, dosah a propustnost.
11.3.1. Rádio¶
BLE používá stejné pásmo 2,4 GHz Industrial-Scientific-Medical (ISM) jako Wi-Fi, mikrovlnné trouby a většina ostatních krátkodosahových bezdrátových zařízení. Pásmo je rozděleno na 40 kanálů širokých 2 MHz.
Tři ze 40 kanálů jsou vyhrazeny pro inzerci – krátká vysílání, která oznamují přítomnost zařízení komukoli naslouchajícímu. Jsou rozmístěny napříč pásmem tak, aby posluchač mohl všechny tři rychle proletět a aby rušení na kterémkoli jednom pravděpodobně neodřízlo zařízení od vysílání úplně.
Třicet sedm jsou datové kanály. Jakmile se dvě zařízení připojí, vyměňují si na nich pakety a přeskakují mezi nimi podle pseudonáhodné sekvence, na které se obě strany při navázání spojení dohodnou. Adaptivní přeskakování frekvencí umožňuje kterékoli straně označit kanál jako špatný (silné rušení Wi-Fi, mikrovlnka, sousední síť BLE), takže ho sekvence přeskočí.
40 kanálů BLE v pásmu 2,4 GHz. Tři jsou pro inzerci, zbytek nese provoz na otevřeném spojení.¶
Rádio vysílá krátké pakety – nejvýše pár milisekund dlouhé – a mezi nimi spí. Tento spánek je to, co dělá technologii nízkoenergetickou. Typický peripheral BLE stráví výrazně méně než jedno procento svého času skutečným vysíláním; zbytek je rádio vypnuté mezi naplánovanými událostmi.
11.3.2. Linková vrstva¶
Linková vrstva je nejmenší jednotka BLE, která komunikuje se svým protějškem na jiném zařízení. Zajišťuje čtyři úkoly.
Rámcování paketů. Každý paket nese krátkou hlavičku (přístupová adresa kanálu, délka paketu, řídicí bity), užitečné zatížení a CRC. Přijímač kontroluje CRC a zahazuje cokoli poškozeného.
Adresování. Každé zařízení BLE má 48bitovou adresu zařízení, která jej identifikuje na rádiu. Některé jsou veřejné – hardwarový identifikátor přidělený výrobcem, navždy dohledatelný. Některé jsou náhodné – generované na zařízení, periodicky obměňované a volitelně šifrované, aby odposlouchávač nemohl spojit dvě vysílání se stejným fyzickým hardwarem. Adresy se znovu objevují v Vysílání (advertising) a skenování.
Plánování spojení. Jakmile se dvě zařízení připojí, linková vrstva plánuje periodické rádiové události na přeskakovací sekvenci – vzdálené od sebe o pevný connection interval – a do každé z nich nabalí jakákoli data, která jsou zařazena ve frontě z vyšší vrstvy GATT. Obě strany se mezi událostmi vracejí ke spánku. Connection interval je páka, kterou si aplikace může vyžádat (viz Připojení).
Spolehlivost. Každý paket na spojení je druhou stranou potvrzen. Linková vrstva opětovně odesílá cokoli, na co nedostala odpověď, takže vyšší vrstvy vidí uspořádaný, bezeztrátový proud bajtů. Na rozdíl od UDP – odešli paket a doufej v nejlepší na straně sítí nemá BLE v běžném provozu samostatný nespolehlivý režim – každý paket na otevřeném spojení se opakuje, dokud nedorazí nebo dokud není spojení prohlášeno za ztracené.
Linková vrstva je také místem, kde běží šifrování, jakmile se dvojice zařízení dohodne na klíči během párování (viz Párování a vázání (bonding)). Každý paket na šifrovaném spojení je dešifrován na přijímači dříve, než ho vyšší vrstvy vůbec uvidí.
11.3.4. Co z toho všeho Python vidí¶
Téměř nic. API bluetooth a aioble neposkytují kanály, přeskakovací sekvence, CRC paketů ani časovače opětovného odeslání; to vše je zařizováno uvnitř portu BLE a rádia. Části, které se projeví, jsou ty, které poskytuje vyjednávání při navázání spojení – connection interval, MTU, typ adresy.