نویسنده:TorchIoTBootCamp
لینک:https://zhuanlan.zhihu.com/p/339700391
از:کورا
۱. مقدمه
Silicon Labs یک راهکار host+NCP برای طراحی گیتوی Zigbee ارائه داده است. در این معماری، میزبان میتواند از طریق رابط UART یا SPI با NCP ارتباط برقرار کند. معمولاً از UART استفاده میشود زیرا بسیار سادهتر از SPI است.
سیلیکون لبز همچنین یک پروژه نمونه برای برنامه میزبان ارائه داده است که نمونه ...میزبان Z3Gateway
این نمونه روی یک سیستم شبه یونیکس اجرا میشود. برخی از مشتریان ممکن است یک نمونه میزبان بخواهند که بتواند روی یک RTOS اجرا شود، اما متأسفانه در حال حاضر هیچ نمونه میزبان مبتنی بر RTOS وجود ندارد. کاربران باید برنامه میزبان خود را بر اساس RTOS توسعه دهند.
قبل از توسعه یک برنامه میزبان سفارشی، درک پروتکل دروازه UART مهم است. برای هر دو NCP مبتنی بر UART و NCP مبتنی بر SPI، میزبان از پروتکل EZSP برای ارتباط با NCP استفاده میکند.ایزیاسپیکوتاه است برایپروتکل سریال EmberZnetو در آن تعریف شده استUG100برای NCP مبتنی بر UART، یک پروتکل لایه پایینتر پیادهسازی شده است تا دادههای EZSP را به طور قابل اعتمادی از طریق UART حمل کند، که ...خاکسترپروتکل، مخفف عبارتمیزبان سریال ناهمزمانبرای جزئیات بیشتر در مورد ASH، لطفاً بهUG101وUG115.
رابطه بین EZSP و ASH را میتوان با نمودار زیر نشان داد:
قالب داده EZSP و پروتکل ASH را میتوان با نمودار زیر نشان داد:
در این صفحه، فرآیند فریمبندی دادههای UART و برخی از فریمهای کلیدی که اغلب در گیتوی Zigbee استفاده میشوند را معرفی خواهیم کرد.
۲. قاببندی
فرآیند کلی قاببندی را میتوان با نمودار زیر نشان داد:
در این نمودار، منظور از دادهها، فریم EZSP است. به طور کلی، فرآیندهای فریمبندی عبارتند از: |بدون|مرحله|مرجع|
|:-|:-|:-|
|1|پر کردن قاب EZSP|UG100|
|2|تصادفیسازی دادهها|بخش 4.3 از UG101|
|۳|اضافه کردن بایت کنترل|فصل ۲ و فصل ۳ از UG101|
|۴|محاسبه CRC|بخش ۲.۳ از UG101|
|5|پر کردن بایتها|بخش 4.2 از UG101|
|۶|افزودن پرچم پایان|بخش ۲.۴ از UG101|
۲.۱. قاب EZSP را پر کنید
قالب فریم EZSP در فصل 3 از UG100 نشان داده شده است.
توجه داشته باشید که این فرمت ممکن است هنگام ارتقاء SDK تغییر کند. وقتی فرمت تغییر کند، شماره نسخه جدیدی به آن اختصاص میدهیم. آخرین شماره نسخه EZSP در زمان نگارش این مقاله ۸ است (EmberZnet 6.8).
از آنجایی که فرمت فریم EZSP ممکن است بین نسخههای مختلف متفاوت باشد، یک الزام اجباری وجود دارد که میزبان و NCPبایدبا همان نسخه EZSP کار کنند. در غیر این صورت، آنها نمیتوانند آنطور که انتظار میرود ارتباط برقرار کنند.
برای دستیابی به این هدف، اولین دستور بین میزبان و NCP باید دستور نسخه باشد. به عبارت دیگر، میزبان باید قبل از هرگونه ارتباط دیگری، نسخه EZSP مربوط به NCP را بازیابی کند. اگر نسخه EZSP با نسخه EZSP طرف میزبان متفاوت باشد، ارتباط باید قطع شود.
الزام ضمنی پشت این امر این است که قالب دستور version میتواندهرگز تغییر نکنفرمت دستور نسخه EZSP به صورت زیر است:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明
۲.۲ تصادفیسازی دادهها
فرآیند تصادفیسازی دقیق در بخش ۴.۳ از UG101 شرح داده شده است. کل فریم EZSP تصادفیسازی خواهد شد. تصادفیسازی به صورت انحصاری-یا فریم EZSP و یک توالی شبهتصادفی است.
الگوریتم تولید دنباله شبه تصادفی در زیر آمده است.
- rand0 = 0×42
- اگر بیت ۰ از randi برابر با ۰ باشد، randi+۱ = randi >> ۱
- اگر بیت ۰ از randi برابر با ۱ باشد، randi+1 = (randi >> 1) ^ 0xB8
۲.۳. اضافه کردن بایت کنترل
بایت کنترل یک داده یک بایتی است و باید به ابتدای فریم اضافه شود. فرمت آن در جدول زیر نشان داده شده است:
در مجموع، 6 نوع بایت کنترلی وجود دارد. سه نوع اول برای فریمهای مشترک با دادههای EZSP، شامل DATA، ACK و NAK استفاده میشوند. سه نوع آخر بدون دادههای EZSP مشترک، شامل RST، RSTACK و ERROR، استفاده میشوند.
قالب RST، RSTACK و ERROR در بخشهای ۳.۱ تا ۳.۳ شرح داده شده است.
۲.۴ محاسبه CRC
یک CRC شانزده بیتی روی بایتهای از بایت کنترل تا انتهای دادهها محاسبه میشود. CRCCCITT استاندارد (g(x) = x16 + x12 + x5 + 1) با 0xFFFF مقداردهی اولیه میشود. بایت با بیشترین ارزش، قبل از بایت کمارزشتر (حالت big-endian) قرار میگیرد.
۲.۵. پر کردن بایتها
همانطور که در بخش ۴.۲ از UG101 توضیح داده شده است، برخی از مقادیر بایت رزرو شده برای اهداف خاص استفاده میشوند. این مقادیر را میتوانید در جدول زیر بیابید:
وقتی این مقادیر در فریم ظاهر میشوند، عملیات خاصی روی دادهها انجام خواهد شد. – بایت escape 0x7D را قبل از بایت رزرو شده قرار دهید. – بیت ۵ آن بایت رزرو شده را معکوس کنید.
در زیر چند نمونه از این الگوریتم آمده است:
۲.۶. پرچم پایان را اضافه کنید
مرحله آخر اضافه کردن پرچم پایان 0x7E به انتهای فریم است. پس از آن، دادهها میتوانند به پورت UART ارسال شوند.
۳. فرآیند چارچوبزدایی
وقتی داده از UART دریافت میشود، برای رمزگشایی آن فقط باید مراحل معکوس را انجام دهیم.
۴. منابع
زمان ارسال: فوریه-08-2022