آموزش جامع BLE

ساختار پکت BLE و تحلیل بایت‌به‌بایت بسته‌ها

اجزای Preamble، Access Address، Header، Payload و CRC را یاد بگیرید و یک بسته BLE را قدم‌به‌قدم از روی بایت‌ها تحلیل کنید.

فهرست مطالب
عکس واقعی برد mKIT مبتنی بر nRF51822؛ نمونهٔ قدیمی سخت‌افزار BLE، نه nRF52840 یا Sniffer معرفی‌شده در متن.
عکس واقعی برد mKIT مبتنی بر nRF51822؛ نمونهٔ قدیمی سخت‌افزار BLE، نه nRF52840 یا Sniffer معرفی‌شده در متن. عکس: Ordercrazy؛ منبع Wikimedia Commons؛ CC0. محتوای عکس تغییر نکرده است؛ نسخهٔ نمایشی ویکی‌مدیا استفاده شده است. این عکس مستند اجرای آزمایش LCENJ نیست.
مرحله 3 از ۲۰ مسیر تسلط بر BLE

دیدن رشته‌ای از بایت‌ها در Sniffer ابتدا ترسناک است. با شکستن پکت به چند بخش ثابت و سپس تفسیر Header و Payload، همان داده خام به یک پیام قابل فهم تبدیل می‌شود. این مهارت پایه دیباگ همه مراحل بعدی است.

قاب کلی پکت

پکت روی هوا با Preamble آغاز می‌شود تا گیرنده زمان‌بندی بیت را هماهنگ کند. Access Address مشخص می‌کند بسته متعلق به Advertising اولیه یا یک اتصال خاص است. پس از آن PDU شامل Header و Payload می‌آید و CRC خطاهای انتقال را آشکار می‌کند. طول دقیق بعضی بخش‌ها به PHY و نوع PDU وابسته است.

Header چه می‌گوید؟

در کانال Advertising، بیت‌های Header نوع PDU، اطلاعات آدرس و طول Payload را مشخص می‌کنند. در کانال داده، Header موضوعاتی مانند شناسه کانال منطقی، شماره توالی و وجود داده بیشتر را حمل می‌کند. همیشه نوع کانال و نوع PDU را قبل از معنی‌کردن بایت‌های بعدی مشخص کنید.

تحلیل Payload

Payload ممکن است آدرس فرستنده، ساختارهای AD، داده ATT یا کنترل Link Layer باشد. ترتیب بایت در بسیاری از فیلدهای چندبایتی Little Endian است؛ یعنی کم‌ارزش‌ترین بایت زودتر دیده می‌شود. Sniffer خوب فیلدها را باز می‌کند، اما توانایی بررسی دستی برای کشف خطای طول، اندین‌بودن یا UUID ضروری است.

زمان‌بندی و IFS

در تبادل متصل، فاصله پیش‌فرض میان برخی تبادل‌های دو طرف T_IFS برابر ۱۵۰ میکروثانیه است؛ در کنترلرهای جدیدِ دارای قابلیت مذاکرهٔ فاصله، مقدار می‌تواند متفاوت باشد و شماره توالی جلوی تحویل تکراری داده را می‌گیرد. اگر پاسخ به‌موقع نرسد، ارسال می‌تواند در همان Connection Event یا رویداد بعدی تکرار شود. نمودار زمان به شما می‌گوید مشکل از داده است یا از زمان‌بندی رادیو.

مثال ساده تحلیل بایت

در یک Advertising ابتدا نوع PDU و Length را از Header بخوانید. سپس آدرس 6 بایتی را جدا کنید. باقی Payload را به بلوک‌های «Length، Type، Data» بشکنید. مثلاً Type برابر 0x09 نام کامل محلی و Type برابر 0xFF داده سازنده را نشان می‌دهد.

مثال بایت‌به‌بایت: داده تبلیغ یک حسگر محیطی

رشته زیر فقط Advertising Data یک نمونه legacy است؛ Header رادیویی، آدرس دستگاه و CRC داخل این رشته نیستند.

02 01 06 | 03 03 1A 18 | 05 09 4C 43 45 4E
بایت‌هاتفسیر
02 01 06Length=2، نوع Flags=0x01 و مقدار 0x06.
03 03 1A 18Length=3، فهرست کامل UUIDهای ۱۶ بیتی؛ 0x181A سرویس Environmental Sensing با ترتیب Little Endian.
05 09 4C 43 45 4ELength=5، نام کامل محلی با نوع 0x09؛ چهار بایت ASCII برابر LCEN.

Length، بایت Type و Data بعد از خودش را می‌شمارد و خودش را حساب نمی‌کند. مجموع این سه ساختار ۱۳ بایت است. برای تجزیه امن، پیش از خواندن هر ساختار کنترل کنید که Length از داده باقی‌مانده بیشتر نباشد.

فاصله پیش‌فرض بین تبادل‌های مربوط، ۱۵۰ میکروثانیه است؛ قابلیت Frame Space Update در نسخه‌های جدید می‌تواند آن را با پشتیبانی و مذاکره دو طرف تغییر دهد. ارسال مجدد نیز ممکن است در همان Connection Event یا رویداد بعدی رخ دهد؛ آن را همیشه به رویداد بعد محدود نکنید.

پرسش و پاسخ مقاله

سوال فنی خود را مطرح کنید

پرسش‌ها و پاسخ‌ها پس از بررسی مدیر منتشر می‌شوند. نویسنده، پیش‌نویس در انتظار بررسی را می‌بیند.

هنوز پرسش تاییدشده‌ای برای این مقاله ثبت نشده است.