11.3. الراديو وطبقة الرابط¶
الطبقتان السفليتان من حزمة BLE تلقائيتان بالكامل تقريبًا من منظور Python -- إذ تتولى رقاقة الراديو والطبقات التي يعمل فوقها MicroPython كل شيء من اختيار قناة إلى إعادة إرسال حزمة مفقودة. ومع ذلك، تظهر ثلاثة من الاختيارات التي تتخذها في الواجهة البرمجية الموجهة للمستخدم: الطاقة والمدى والإنتاجية.
11.3.1. الراديو¶
يستخدم BLE نطاق 2.4 جيجاهرتز الصناعي-العلمي-الطبي (ISM) نفسه الذي يستخدمه Wi-Fi وأفران الميكروويف ومعظم الأجهزة اللاسلكية الأخرى قصيرة المدى. ويُقسَّم النطاق إلى 40 قناة بعرض 2 ميجاهرتز لكل منها.
ثلاث من القنوات الأربعين محجوزة لـ الإعلان -- وهي بثوث قصيرة تعلن عن حضور جهاز لأي مستمع. وهي موزَّعة عبر النطاق بحيث يستطيع المستمع مسح الثلاث جميعًا بسرعة وبحيث يصعب أن يقطع التشويش على أي واحدة منها وصول الجهاز إلى الأثير كليًّا.
سبع وثلاثون هي قنوات بيانات. فبمجرد اتصال جهازين، يتبادلان الحزم على هذه القنوات، قافزين بينها على تسلسل شبه عشوائي يتفق عليه الطرفان وقت الاتصال. ويتيح القفز التكيفي للتردد لأي من الطرفين وسم قناة بأنها سيئة (تشويش Wi-Fi كثيف، ميكروويف، شبكة BLE مجاورة) فيتخطاها التسلسل.
قنوات BLE الأربعون على نطاق 2.4 جيجاهرتز. ثلاث للإعلان، والباقي تحمل حركة المرور على اتصال مفتوح.¶
يُرسِل الراديو حزمًا قصيرة -- بضع مللي ثوانٍ على الأكثر -- وينام بينها. وذلك النوم هو ما يجعل التقنية منخفضة الطاقة. فطرفية BLE نموذجية تقضي ما يقل كثيرًا عن واحد بالمئة من وقتها في الإرسال فعليًّا؛ والباقي هو الراديو مُطفأ بين الأحداث المجدولة.
11.3.2. طبقة الرابط¶
طبقة الرابط هي أصغر وحدة في BLE تتحدث مع نظيرتها على جهاز آخر. وهي تتولى أربع مهام.
تأطير الحزم. تحمل كل حزمة ترويسة قصيرة (عنوان وصول القناة، طول الحزمة، بتات تحكم)، وحمولة، وCRC. ويتحقق المستقبِل من CRC ويُسقط أي شيء تالف.
العنونة. لكل جهاز BLE عنوان جهاز بطول 48-بت يحدده على الراديو. بعضها عام -- مُعرّف عتاد عيّنته الشركة المصنِّعة، قابل للتتبع إلى الأبد. وبعضها عشوائي -- يُولَّد على الجهاز، ويُدوَّر دوريًا، ويُشفَّر اختياريًا بحيث لا يستطيع متنصت ربط إرسالين بالعتاد الفعلي نفسه. وتظهر العناوين مجددًا في الإعلان والمسح.
جدولة الاتصال. بمجرد اتصال جهازين، تجدول طبقة الرابط أحداث راديو دورية على تسلسل القفز -- على بُعد فترة اتصال ثابتة -- وتحزم في كل حدث ما هو مُصطَفّ من بيانات من طبقة GATT الأعلى. ويعود الطرفان إلى النوم بين الأحداث. وفترة الاتصال مقبض يستطيع التطبيق طلبه (انظر الاتصالات).
الموثوقية. يُقَرّ الطرف الآخر استلامَ كل حزمة على الاتصال. وتعيد طبقة الرابط إرسال أي شيء لم يتلقَّ ردًا، فترى الطبقات الأعلى دفق بايتات مرتبًا وخاليًا من الفقد. وخلافًا لـ UDP -- أرسل حزمة وتمنّ الأفضل على جانب الشبكات، لا يملك BLE وضعًا غير موثوق منفصلًا في الاستخدام العادي -- فكل حزمة على اتصال مفتوح يُعاد محاولتها حتى تصل أو يُعلَن فقدان الرابط.
طبقة الرابط هي أيضًا حيث يعمل التشفير بمجرد أن يتفق زوج من الأجهزة على مفتاح أثناء الاقتران (انظر الإقران والربط). فكل حزمة على رابط مشفَّر تُفك تشفيرها عند المستقبِل قبل أن تراها الطبقات الأعلى إطلاقًا.
11.3.4. ما يراه Python من كل هذا¶
لا شيء تقريبًا. فواجهتا bluetooth وaioble لا تكشفان عن القنوات أو تسلسلات القفز أو CRC الحزم أو مؤقتات إعادة الإرسال؛ فكل تلك تُعالَج داخل منفذ BLE والراديو. أما الأجزاء التي تظهر فهي تلك التي يكشفها التفاوض وقت الاتصال -- فترة الاتصال، MTU، نوع العنوان.