11.3. Radyo ve bağlantı katmanı¶
BLE yığınının en alttaki iki katmanı, Python açısından neredeyse tamamen otomatiktir – radyo silikonu ve MicroPython’un onun üzerinde çalıştırdığı katmanlar, bir kanal seçmekten kaybolan bir paketi yeniden iletmeye kadar her şeyi halleder. Yaptıkları seçimlerden üçü hâlâ kullanıcıya yönelik API’ye yansır: güç, menzil ve iş hacmi.
11.3.1. Radyo¶
BLE, Wi-Fi, mikrodalga fırınlar ve diğer çoğu kısa menzilli kablosuz cihazla aynı 2.4 GHz Endüstriyel-Bilimsel-Tıbbi (ISM) bandını kullanır. Bant, 2 MHz genişliğinde 40 kanala bölünmüştür.
40 kanalın üçü, reklam için ayrılmıştır – bir cihazın varlığını dinleyen herkese duyuran kısa yayınlar. Bunlar, bir dinleyicinin üçünü de hızlıca tarayabilmesi ve herhangi birindeki parazitin cihazı tamamen yayın dışı bırakma olasılığının düşük olması için banda yayılmıştır.
Otuz yedisi veri kanalıdır. İki cihaz bağlandıktan sonra, paketlerini bu kanallar üzerinden, iki tarafın bağlantı sırasında üzerinde anlaştığı sözde rastgele bir dizide kanaldan kanala atlayarak değiş tokuş eder. Uyarlanabilir frekans atlama, her iki tarafın da bir kanalı kötü (yoğun Wi-Fi paraziti, mikrodalga, komşu BLE ağı) olarak işaretlemesine olanak tanır; böylece dizi o kanalı atlar.
2.4 GHz bandındaki 40 BLE kanalı. Üçü reklam içindir, geri kalanı açık bir bağlantıda trafiği taşır.¶
Radyo kısa paketler iletir – en fazla birkaç milisaniye uzunluğunda – ve aralarda uyur. Teknolojiyi düşük enerjili yapan şey bu uykudur. Tipik bir BLE peripheral, zamanının yüzde birinden çok daha azını fiilen iletim yaparak geçirir; geri kalanı, radyonun zamanlanmış olaylar arasında kapatıldığı süredir.
11.3.2. Bağlantı katmanı¶
Bağlantı katmanı, başka bir cihazdaki karşılığıyla konuşan en küçük BLE birimidir. Dört işi üstlenir.
Paket çerçeveleme. Her paket kısa bir başlık (kanal erişim adresi, paket uzunluğu, kontrol bitleri), bir yük ve bir CRC taşır. Alıcı CRC’yi denetler ve bozuk olan her şeyi atar.
Adresleme. Her BLE cihazının, onu radyoda tanımlayan 48 bitlik bir cihaz adresi vardır. Bazıları genel‘dir – üreticinin atadığı, sonsuza dek izlenebilen bir donanım tanımlayıcısı. Bazıları rastgele‘dir – cihazda üretilen, periyodik olarak değiştirilen ve isteğe bağlı olarak şifrelenen; böylece bir gizli dinleyici iki iletimi aynı fiziksel donanıma bağlayamaz. Adresler Reklam yapma ve tarama belgesinde tekrar ele alınır.
Bağlantı zamanlaması. İki cihaz bağlandıktan sonra, bağlantı katmanı atlama dizisi üzerinde periyodik radyo olayları zamanlar – sabit bir bağlantı aralığı ile – ve üstteki GATT katmanından kuyruğa alınmış verileri her birine paketler. Olaylar arasında her iki taraf da tekrar uykuya geçer. Bağlantı aralığı, uygulamanın talep edebileceği bir ayardır (bkz. Bağlantılar).
Güvenilirlik. Bir bağlantıdaki her paket, diğer tarafça onaylanır. Bağlantı katmanı, yanıt almayan her şeyi yeniden iletir; böylece üstteki katmanlar sıralı, kayıpsız bir bayt akışı görür. Ağ iletişimi tarafındaki UDP – bir paket gönder, en iyisini um aksine, BLE normal kullanımda ayrı bir güvenilmez mod içermez – açık bir bağlantıdaki her paket, ulaşana kadar ya da bağlantının koptuğu ilan edilene kadar yeniden denenir.
Bağlantı katmanı, aynı zamanda bir çift cihazın eşleşme sırasında bir anahtar üzerinde anlaşmasının ardından şifrelemenin çalıştığı yerdir (bkz. Eşleştirme ve bağlama). Şifreli bir bağlantıdaki her paket, üstteki katmanlar görmeden önce alıcıda şifresi çözülür.
11.3.4. Python’un tüm bunlardan gördükleri¶
Neredeyse hiçbir şey. bluetooth ve aioble API’leri kanalları, atlama dizilerini, paket CRC’lerini veya yeniden iletim zamanlayıcılarını sunmaz; bunların hepsi BLE portunun ve radyonun içinde halledilir. Gerçekten yansıyan parçalar, bağlantı sırasındaki müzakerenin açığa çıkardığı parçalardır – bağlantı aralığı, MTU, adres türü.