11.3. Radio dan lapisan tautan¶
Dua lapisan terbawah dari tumpukan BLE hampir sepenuhnya otomatis dari perspektif Python -- silikon radio dan lapisan yang dijalankan MicroPython di atasnya menangani segalanya mulai dari memilih saluran hingga mentransmisikan ulang paket yang hilang. Tiga pilihan yang mereka buat masih terlihat pada API yang menghadap pengguna: daya, jangkauan, dan throughput.
11.3.1. Radio¶
BLE menggunakan pita Industrial-Scientific-Medical (ISM) 2,4 GHz yang sama seperti Wi-Fi, oven microwave, dan sebagian besar nirkabel jarak pendek lainnya. Pita ini dibagi menjadi 40 saluran dengan lebar 2 MHz.
Tiga dari 40 saluran dicadangkan untuk periklanan -- siaran singkat yang mengumumkan kehadiran perangkat kepada siapa pun yang mendengarkan. Ketiganya tersebar di seluruh pita sehingga pendengar dapat menyapu ketiganya dengan cepat dan sehingga interferensi pada salah satunya kecil kemungkinannya untuk mengeluarkan perangkat dari udara sepenuhnya.
Tiga puluh tujuh adalah saluran data. Setelah dua perangkat terhubung, mereka bertukar paket pada saluran-saluran ini, berpindah di antara mereka pada urutan pseudo-acak yang disepakati kedua sisi saat waktu koneksi. Adaptive frequency hopping memungkinkan salah satu sisi menandai sebuah saluran sebagai buruk (interferensi Wi-Fi berat, microwave, jaringan BLE tetangga) sehingga urutan melewatinya.
40 saluran BLE pada pita 2,4 GHz. Tiga untuk periklanan, sisanya membawa lalu lintas pada koneksi terbuka.¶
Radio memancarkan paket-paket singkat -- paling lama beberapa milidetik -- dan tidur di antaranya. Tidur itulah yang membuat teknologi ini low energy. Peripheral BLE tipikal menghabiskan jauh di bawah satu persen waktunya untuk benar-benar mentransmisi; sisanya adalah radio yang dimatikan di antara peristiwa terjadwal.
11.3.2. Lapisan tautan¶
Lapisan tautan adalah unit terkecil BLE yang berkomunikasi dengan mitranya di perangkat lain. Ini menangani empat tugas.
Pembingkaian paket. Setiap paket membawa header pendek (alamat akses saluran, panjang paket, bit kontrol), payload, dan CRC. Penerima memeriksa CRC dan membuang apa pun yang rusak.
Pengalamatan. Setiap perangkat BLE memiliki alamat perangkat 48-bit yang mengidentifikasinya di radio. Beberapa bersifat public -- pengidentifikasi perangkat keras yang ditetapkan produsen, dapat dilacak selamanya. Beberapa bersifat random -- dihasilkan di perangkat, dirotasi secara berkala, dan secara opsional dienkripsi sehingga penyadap tidak dapat menghubungkan dua transmisi ke perangkat keras fisik yang sama. Alamat muncul lagi di Periklanan dan Pemindaian.
Penjadwalan koneksi. Setelah dua perangkat terhubung, lapisan tautan menjadwalkan peristiwa radio berkala pada urutan hopping -- terpisah interval koneksi yang tetap -- dan mengemas data apa pun yang antre dari lapisan GATT di atasnya ke dalam masing-masing. Kedua sisi kembali tidur di antara peristiwa. Interval koneksi adalah kenop yang dapat diminta aplikasi (lihat Koneksi).
Keandalan. Setiap paket pada sebuah koneksi diakui oleh sisi lainnya. Lapisan tautan mentransmisikan ulang apa pun yang tidak mendapat respons, sehingga lapisan di atasnya melihat aliran byte yang terurut dan tanpa kehilangan. Tidak seperti UDP -- kirim paket, harap yang terbaik di sisi jaringan, BLE tidak memiliki mode tidak andal yang terpisah dalam penggunaan normal -- setiap paket pada koneksi terbuka dicoba ulang hingga tiba atau tautan dinyatakan hilang.
Lapisan tautan juga adalah tempat enkripsi berjalan setelah sepasang perangkat menyepakati kunci selama pemasangan (lihat Pairing dan bonding). Setiap paket pada tautan terenkripsi didekripsi di penerima sebelum lapisan di atasnya melihatnya.
11.3.4. Apa yang dilihat Python dari semua ini¶
Hampir tidak ada. API bluetooth dan aioble tidak mengekspos saluran, urutan hopping, CRC paket, atau timer transmisi ulang; semuanya ditangani di dalam port BLE dan radio. Bagian yang memang terlihat adalah yang diekspos oleh negosiasi waktu koneksi -- interval koneksi, MTU, tipe alamat.