11.3. Radioul și stratul de legătură¶
Cele două straturi inferioare ale stivei BLE sunt aproape în întregime automate din perspectiva Python – siliciul radio și straturile pe care MicroPython rulează deasupra lui se ocupă de tot, de la alegerea unui canal până la retransmiterea unui pachet pierdut. Trei dintre alegerile pe care le fac se reflectă totuși în API-ul vizibil utilizatorului: puterea, raza de acțiune și debitul.
11.3.1. Radioul¶
BLE folosește aceeași bandă de 2,4 GHz Industrial-Scientific-Medical (ISM) ca Wi-Fi-ul, cuptoarele cu microunde și majoritatea celorlalte tehnologii wireless de rază scurtă. Banda este împărțită în 40 de canale late de 2 MHz.
Trei dintre cele 40 de canale sunt rezervate pentru anunțuri – difuzări scurte care anunță prezența unui dispozitiv oricui ascultă. Sunt distanțate de-a lungul benzii, astfel încât un ascultător să poată baleia rapid toate cele trei și astfel încât interferența pe oricare dintre ele să nu scoată dispozitivul complet din eter.
Treizeci și șapte sunt canale de date. Odată ce două dispozitive se conectează, ele schimbă pachete pe acestea, sărind între ele după o secvență pseudo-aleatorie pe care cele două părți o convin la momentul conexiunii. Saltul adaptiv de frecvență permite oricărei părți să marcheze un canal ca fiind defectuos (interferență Wi-Fi puternică, cuptor cu microunde, rețea BLE vecină), astfel încât secvența să-l ocolească.
Cele 40 de canale BLE pe banda de 2,4 GHz. Trei sunt pentru anunțuri, restul transportă trafic pe o conexiune deschisă.¶
Radioul transmite pachete scurte – cel mult de câteva milisecunde – și doarme între ele. Acel somn este ceea ce face tehnologia să fie cu consum redus. Un peripheral BLE tipic petrece mult sub un procent din timpul său efectiv transmițând; restul este radioul oprit între evenimentele programate.
11.3.2. Stratul de legătură¶
Stratul de legătură este cea mai mică unitate a BLE care comunică cu omologul său de pe alt dispozitiv. Acesta gestionează patru sarcini.
Încadrarea pachetelor. Fiecare pachet poartă un antet scurt (adresa de acces la canal, lungimea pachetului, biți de control), o încărcătură utilă și un CRC. Receptorul verifică CRC-ul și elimină orice este corupt.
Adresarea. Fiecare dispozitiv BLE are o adresă de dispozitiv de 48 de biți care îl identifică pe radio. Unele sunt publice – un identificator hardware pe care producătorul l-a atribuit, trasabil pentru totdeauna. Unele sunt aleatorii – generate pe dispozitiv, rotite periodic și opțional criptate astfel încât un interceptor să nu poată lega două transmisii de același hardware fizic. Adresele revin din nou în Difuzare și scanare.
Programarea conexiunii. Odată ce două dispozitive se conectează, stratul de legătură programează evenimente radio periodice pe secvența de salt – la distanță de un interval de conexiune fix – și împachetează în fiecare dintre ele orice date sunt puse în coadă de stratul GATT de deasupra. Ambele părți revin la somn între evenimente. Intervalul de conexiune este un parametru pe care aplicația îl poate solicita (vezi Conexiuni).
Fiabilitatea. Fiecare pachet pe o conexiune este confirmat de cealaltă parte. Stratul de legătură retransmite orice nu a primit un răspuns, astfel încât straturile de deasupra văd un flux de octeți ordonat și fără pierderi. Spre deosebire de UDP – trimite un pachet și speră la ce e mai bun de pe partea de rețelistică, BLE nu are un mod nefiabil separat în utilizarea normală – fiecare pachet de pe o conexiune deschisă este reîncercat până ajunge sau până când legătura este declarată pierdută.
Stratul de legătură este de asemenea locul în care rulează criptarea, odată ce o pereche de dispozitive a convenit asupra unei chei în timpul împerecherii (vezi Asocierea și legarea (pairing și bonding)). Fiecare pachet de pe o legătură criptată este decriptat la receptor înainte ca straturile de deasupra să-l vadă vreodată.
11.3.4. Ce vede Python din toate acestea¶
Aproape nimic. API-urile bluetooth și aioble nu expun canale, secvențe de salt, CRC-uri de pachete sau temporizatoare de retransmitere; toate acestea sunt gestionate în interiorul portului BLE și al radioului. Piesele care se reflectă sunt cele pe care le expune negocierea de la momentul conexiunii – intervalul de conexiune, MTU-ul, tipul de adresă.