11.2. BLE stack

เช่นเดียวกับระบบเครือข่าย, Bluetooth Low Energy ถูกสร้างเป็น stack ของชั้น โดยแต่ละชั้นแก้ปัญหาเดียวและเปิดเผย abstraction ที่สะอาดให้ชั้นด้านบน ชื่อด้านล่างมาจากข้อกำหนด Bluetooth Core โดยตรงและปรากฏใน API ของ aioble และ bluetooth

A vertical stack of five labelled boxes. From bottom to top: Physical (radio), Link Layer, GAP, GATT, Application. An arrow on the right points up the stack labelled "what we build". An arrow on the left points down the stack labelled "what is provided".

Bluetooth Low Energy stack แต่ละชั้นส่ง abstraction ที่สะอาดขึ้นไปยังชั้นถัดไป ซึ่งเป็นรูปแบบเดียวกับที่ networking stack ใช้

Physical layer. ย้าย bits ระหว่างสองอุปกรณ์ผ่านวิทยุ 2.4 GHz การเลือกช่อง, การมอดูเลต, กำลังส่ง งานของกล้องคือการเปิดพลังงาน; ซิลิคอนจัดการส่วนที่เหลือ

Link layer. ย้าย packets ระหว่างสองอุปกรณ์ที่ตกลงจะสื่อสารกัน เพิ่มที่อยู่อุปกรณ์เพื่อให้แต่ละ packet มุ่งเป้าไปยัง neighbour หนึ่งราย จัดกำหนดการ radio event ที่เป็นระยะซึ่งประกอบกันเป็นการเชื่อมต่อ และจัดการการส่งซ้ำของ packet ใด ๆ ที่ผู้รับไม่ได้รับทราบ

Generic Access Profile (GAP). ชั้นการค้นหาและการเชื่อมต่อ กำหนดสี่ role -- broadcaster, observer, peripheral, central -- และโปรโตคอล advertising / scanning ที่ให้สองอุปกรณ์หากันได้ในตอนแรก รวมถึงกระบวนการเปิดและปิดการเชื่อมต่อระหว่างอุปกรณ์ นี่คือที่อยู่ addresses, advertising payloads, connection parameters และการจับคู่อาศัยอยู่

Generic Attribute Profile (GATT). ชั้นข้อมูล ตั้งอยู่บนการเชื่อมต่อ GAP ที่เปิดอยู่และเปิดเผยฐานข้อมูล key/value ขนาดเล็ก: ฝ่ายหนึ่งโฮสต์ต้นไม้ของค่าที่มีชื่อที่เรียกว่า characteristics, อีกฝ่ายอ่าน, เขียน หรือ subscribe กับพวกมัน นี่คือที่ bytes ของแอปพลิเคชันจริง ๆ ไหล

Application. อะไรก็ตามที่กล้องและ peer ตกลงกันว่า bytes หมายความว่าอะไร Bluetooth SIG เผยแพร่ profiles มาตรฐาน -- heart rate, battery level, environmental sensing -- ที่กำหนด characteristics ที่ใช้กันทั่วไปเพื่อให้อุปกรณ์ที่ไม่เกี่ยวข้องสามารถทำงานร่วมกันได้ แต่แอปพลิเคชันใด ๆ ก็สามารถกำหนดของตัวเองได้

11.2.1. วิธีที่ชั้นต่าง ๆ ซ้อนกันในขณะ runtime

รูปแบบตรงกับ networking stack:

  • bytes ของแอปพลิเคชันเข้าสู่ characteristic value

  • GATT ห่อด้วย header ระบุว่า bytes เป็นของ characteristic ใด

  • GAP รักษาการเชื่อมต่อที่เปิดอยู่เพื่อให้ GATT มีที่ส่ง

  • link layer ห่อทั้งหมดใน packet ที่ระบุที่อยู่ไปยัง device address ของ peer และจัดกำหนดการ radio event เพื่อส่ง

  • physical layer เปลี่ยน packet เป็นชุดวิทยุ 2.4 GHz สั้น ๆ

physical layer และ link layer เกือบมองไม่เห็นจาก Python -- ซิลิคอนและ เฟิร์มแวร์วิทยุจัดการพวกมัน จาก GAP ขึ้นไป โค้ด Python ของกล้องมีบทบาทมากขึ้น

11.2.2. สองชั้นที่ API ที่ผู้ใช้เห็นข้ามอย่างเงียบ ๆ

ข้อกำหนด Bluetooth ระบุชั้นเพิ่มเติมสองชั้นที่อยู่ระหว่าง link layer และ GAP/GATT: Host Controller Interface (HCI) -- โปรโตคอลที่ host CPU ใช้ขับเคลื่อนชิปวิทยุแยกต่างหาก -- และ L2CAP -- ตัวมัลติเพล็กซ์ที่แยกการเชื่อมต่อ link-layer หนึ่งออกเป็นหลาย logical channel

ทั้งสองไม่ปรากฏใน API ของ aioble แต่ก็ไม่หายไป HCI อยู่ภายใน BLE port และมองไม่เห็นเว้นแต่จะมีการสร้าง MicroPython แบบกำหนดเองอยู่ และ L2CAP คือ carrier ที่ GATT ทำงานอยู่บนนั้น แอปพลิเคชันที่ต้องการ byte stream ดิบสามารถอ้างสิทธิ์ L2CAP channel ของตัวเองได้ (ช่องสัญญาณ L2CAP)