نویسنده : TorchiotBootCamp
پیوند : https: //zhuanlan.zhihu.com/p/339700391
از : Quora
1. مقدمه
Silicon Labs یک راه حل میزبان+NCP برای طراحی دروازه Zigbee ارائه داده است. در این معماری ، میزبان می تواند از طریق رابط UART یا SPI با NCP ارتباط برقرار کند. معمولاً از UART استفاده می شود زیرا بسیار ساده تر از SPI است.
Silicon Labs همچنین یک پروژه نمونه را برای برنامه میزبان ارائه داده است که نمونه آن استz3gatewayhost
بشر نمونه بر روی یک سیستم مانند یونیکس اجرا می شود. برخی از مشتریان ممکن است یک نمونه میزبان بخواهند که می تواند روی RTOS اجرا شود ، اما متأسفانه در حال حاضر هیچ نمونه میزبان مبتنی بر RTO وجود ندارد. کاربران باید برنامه میزبان خود را بر اساس RTO ها تهیه کنند.
درک پروتکل UART Gateway قبل از تهیه یک برنامه میزبان سفارشی مهم است. برای هر دو NCP مبتنی بر UART و NCP مبتنی بر SPI ، میزبان از پروتکل EZSP برای برقراری ارتباط با NCP استفاده می کند.zspکوتاه استپروتکل سریال Emberznet، و در آن تعریف شده استUG100بشر برای NCP مبتنی بر UART ، یک پروتکل لایه پایین تر برای حمل داده های EZSP قابل اعتماد از طریق UART اجرا شده است.خاکسترپروتکل ، کوتاه برایمیزبان سریال ناهمزمانبشر برای اطلاعات بیشتر در مورد خاکستر ، لطفاً بهUG101وتug115.
رابطه EZSP و خاکستر را می توان با نمودار زیر نشان داد:
قالب داده EZSP و پروتکل ASH را می توان با نمودار زیر نشان داد:
در این صفحه ، روند فریم کردن داده های UART و برخی از قاب های کلیدی را که اغلب در دروازه Zigbee استفاده می شود ، معرفی خواهیم کرد.
2
فرآیند فریم سازی عمومی را می توان با نمودار زیر نشان داد:
در این نمودار ، داده ها به معنای قاب EZSP است. به طور کلی ، فرآیندهای قاب بندی عبارتند از: | نه | مرحله | مرجع |
|:-|:-|:-|
| 1 | فریم EZSP را پر کنید | UG100 |
| 2 | تصادفی سازی داده ها | بخش 4.3 UG101 |
| 3 | اضافه کردن بایت کنترل | Chap2 و Chap3 از UG101 |
| 4 | CRC | بخش 2.3 UG101 را محاسبه کنید |
| 5 | چاشنی بایت | بخش 4.2 UG101 |
| 6 | اضافه کردن پرچم پایان | بخش 2.4 UG101 |
2.1 قاب EZSP را پر کنید
قالب فریم EZSP در فصل 3 UG100 نشان داده شده است.
توجه داشته باشید که هنگام ارتقاء SDK ممکن است این قالب تغییر کند. وقتی قالب تغییر می کند ، شماره نسخه جدیدی به آن می دهیم. آخرین شماره نسخه EZSP 8 است که این مقاله نوشته شده است (Emberznet 6.8).
از آنجا که قالب فریم EZSP ممکن است بین نسخه های مختلف متفاوت باشد ، یک نیاز اجباری وجود دارد که میزبان و NCPبایدبا همان نسخه EZSP کار کنید. در غیر این صورت ، آنها نمی توانند همانطور که انتظار می رود ارتباط برقرار کنند.
برای دستیابی به این هدف ، اولین فرمان بین میزبان و NCP باید دستور نسخه باشد. به عبارت دیگر ، میزبان باید قبل از هرگونه ارتباط دیگر ، نسخه EZSP NCP را مجدداً مورد بازیابی قرار دهد. اگر نسخه EZSP با نسخه EZSP طرف میزبان متفاوت باشد ، ارتباطات باید قطع شود.
نیاز ضمنی در پشت این است که قالب دستور نسخه می تواندهرگز تغییر نکنیدبشر فرمت فرمان نسخه EZSP مانند زیر است:
: https: //zhuanlan.zhihu.com/p/339700391
来源 :
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。
2.2 داده های تصادفی
فرآیند تصادفی دقیق در بخش 4.3 UG101 شرح داده شده است. کل قاب EZSP تصادفی خواهد شد. تصادفی سازی به منحصر به فرد یا قاب EZSP و یک دنباله شبه تصادفی است.
در زیر الگوریتم تولید توالی شبه تصادفی است.
- RAND0 = 42 0 0
- اگر بیت 0 از رندی 0 باشد ، رندی+1 = رندی >> 1
- اگر بیت 0 از رندی 1 باشد ، رندی+1 = (رندی >> 1) ^ 0xb8
2.3 بایت کنترل را اضافه کنید
بایت کنترل یک داده بایت است و باید به سر قاب اضافه شود. قالب با جدول زیر نشان داده شده است:
در کل ، 6 نوع بایت کنترل وجود دارد. سه مورد اول برای فریم های مشترک با داده های EZSP ، از جمله داده ها ، ACK و NAK استفاده می شود. سه مورد آخر بدون داده های مشترک EZSP ، از جمله RST ، RSTACK و ERROR استفاده می شود.
قالب RST ، RSTACK و خطا در بخش 3.1 تا 3.3 شرح داده شده است.
2.4 CRC را محاسبه کنید
CRC 16 بیتی روی بایت از بایت کنترل تا پایان داده ها محاسبه می شود. CRCCCITT استاندارد (g (x) = x16 + x12 + x5 + 1) به 0xFFFF آغاز می شود. مهمترین بایت پیش از کمترین بایت (حالت بزرگ اندی) است.
2.5 چاشنی بایت
همانطور که در بخش 4.2 UG101 توضیح داده شده است ، برخی از مقادیر بایت رزرو شده برای اهداف خاص استفاده می شود. این مقادیر را می توان در جدول زیر یافت:
هنگامی که این مقادیر در قاب ظاهر می شوند ، یک درمان ویژه به داده ها انجام می شود. - بایت فرار 0x7d را در مقابل بایت رزرو شده قرار دهید - BIT5 آن بایت رزرو شده را معکوس کنید
در زیر چند نمونه از این الگوریتم آورده شده است:
2.6 پرچم پایان را اضافه کنید
مرحله آخر اضافه کردن پرچم انتهای 0x7E به انتهای قاب است. پس از آن ، داده ها می توانند به بندر UART ارسال شوند.
3 فرآیند دفع فریم
هنگامی که داده ها از UART دریافت می شود ، ما فقط باید مراحل معکوس را برای رمزگشایی آن انجام دهیم.
4. منابع
زمان پست: فوریه -08-2022