11.3. Radio i sloj veze¶
Donja dva sloja BLE stoga gotovo su u potpunosti automatska iz Pythonove perspektive – radio silicij i slojevi koje MicroPython pokreće na njemu obavljaju sve, od odabira kanala do ponovnog slanja izgubljenog paketa. Tri odluke koje donose ipak se probijaju u API vidljiv korisniku: snaga, domet i propusnost.
11.3.1. Radio¶
BLE koristi isti 2,4 GHz Industrijsko-znanstveno-medicinski (ISM) pojas kao Wi-Fi, mikrovalne pećnice i većina drugih bežičnih veza kratkog dometa. Pojas je podijeljen na 40 kanala širine 2 MHz.
Tri od 40 kanala rezervirana su za oglašavanje – kratke emisije koje objavljuju prisutnost uređaja svakome tko sluša. Razmaknuti su preko cijelog pojasa kako bi slušatelj mogao brzo pretražiti sva tri i kako bi smetnje na bilo kojem od njih malo vjerojatno potpuno izbacile uređaj iz etera.
Trideset i sedam su podatkovni kanali. Kada se dva uređaja povežu, razmjenjuju pakete na njima, skačući između njih po pseudonasumičnom slijedu koji obje strane dogovore u trenutku uspostave veze. Prilagodljivo frekvencijsko skakanje omogućuje bilo kojoj strani da označi kanal kao loš (jake Wi-Fi smetnje, mikrovalna pećnica, susjedna BLE mreža) tako da ga slijed preskoči.
40 BLE kanala na 2,4 GHz pojasu. Tri su za oglašavanje, ostatak nosi promet na otvorenoj vezi.¶
Radio odašilje kratke pakete – najviše par milisekundi duge – i spava između njih. Taj san je ono što tehnologiju čini niskoenergetskom. Tipičan BLE peripheral provodi znatno manje od jedan posto svog vremena u stvarnom odašiljanju; ostatak je radio isključen između zakazanih događaja.
11.3.2. Sloj veze¶
Sloj veze najmanja je jedinica BLE-a koja razgovara sa svojim parnjakom na drugom uređaju. Obavlja četiri posla.
Uokvirivanje paketa. Svaki paket nosi kratko zaglavlje (adresa pristupa kanalu, duljina paketa, kontrolni bitovi), korisni teret i CRC. Primatelj provjerava CRC i odbacuje sve oštećeno.
Adresiranje. Svaki BLE uređaj ima 48-bitnu adresu uređaja koja ga identificira na radiju. Neke su javne – hardverski identifikator koji je proizvođač dodijelio, sljediv zauvijek. Neke su nasumične – generirane na uređaju, povremeno rotirane i opcionalno šifrirane tako da prisluškivač ne može povezati dva odašiljanja s istim fizičkim hardverom. Adrese se ponovno spominju u Oglašavanje i skeniranje.
Raspoređivanje veze. Kada se dva uređaja povežu, sloj veze raspoređuje periodične radio događaje na slijedu skakanja – na razmaku fiksnog intervala veze – i pakira u svaki od njih sve podatke koji su u redu čekanja iz GATT sloja iznad. Obje strane vraćaju se na spavanje između događaja. Interval veze je regulator koji aplikacija može zatražiti (vidi Veze).
Pouzdanost. Svaki paket na vezi potvrđuje druga strana. Sloj veze ponovno šalje sve što nije dobilo odgovor, tako da slojevi iznad vide uređeni tok bajtova bez gubitaka. Za razliku od UDP – pošalji paket, nadaj se najboljem na strani umrežavanja, BLE u uobičajenoj upotrebi nema zaseban nepouzdan način rada – svaki paket na otvorenoj vezi ponovno se pokušava poslati dok ne stigne ili dok se veza ne proglasi izgubljenom.
Sloj veze također je mjesto gdje se šifriranje odvija kada se par uređaja dogovorio o ključu tijekom sparivanja (vidi Uparivanje i povezivanje). Svaki paket na šifriranoj vezi dešifrira se na primatelju prije nego što ga slojevi iznad uopće vide.
11.3.4. Što Python vidi od svega ovoga¶
Gotovo ništa. API-ji bluetooth i aioble ne izlažu kanale, slijedove skakanja, CRC-ove paketa ili mjerače vremena ponovnog slanja; sve to obrađuje se unutar BLE porta i radija. Dijelovi koji se probijaju su oni koje izlaže pregovor u trenutku uspostave veze – interval veze, MTU, vrsta adrese.