Muallif: TorchIoTBootCamp
Havola: https://zhuanlan.zhihu.com/p/339700391
Kimdan: Quora
1. Kirish
Silicon Labs Zigbee shlyuzi dizayni uchun xost+NCP yechimini taklif qildi. Ushbu arxitekturada xost UART yoki SPI interfeysi orqali NCP bilan bog'lanishi mumkin. Ko'pincha, UART ishlatiladi, chunki u SPIga qaraganda ancha sodda.
Silicon Labs, shuningdek, namuna bo'lgan xost dasturi uchun namunaviy loyihani taqdim etdiZ3GatewayHost
. Namuna Unix-ga o'xshash tizimda ishlaydi. Ba'zi mijozlar RTOS-da ishlashi mumkin bo'lgan xost namunasini xohlashlari mumkin, ammo afsuski, hozircha RTOS-ga asoslangan xost namunasi yo'q. Foydalanuvchilar RTOS asosida o'zlarining xost dasturini ishlab chiqishlari kerak.
Moslashtirilgan xost dasturini ishlab chiqishdan oldin UART shlyuzi protokolini tushunish muhimdir. UART-ga asoslangan NCP va SPI-ga asoslangan NCP uchun xost NCP bilan bog'lanish uchun EZSP protokolidan foydalanadi.EZSPuchun qisqaEmberZnet seriyali protokoli, va u bilan belgilanadiUG100. UART asosidagi NCP uchun EZSP ma'lumotlarini UART orqali ishonchli tashish uchun pastki qatlam protokoli amalga oshiriladi.ASHprotokol, qisqartmasiAsinxron seriyali xost. ASH haqida batafsil ma'lumot olish uchun qarangUG101vaUG115.
EZSP va ASH o'rtasidagi munosabatni quyidagi diagramma orqali ko'rsatish mumkin:
EZSP va ASH protokolining ma'lumotlar formatini quyidagi diagrammada tasvirlash mumkin:
Ushbu sahifada biz UART ma'lumotlarini ramkalash jarayoni va Zigbee shlyuzida tez-tez ishlatiladigan ba'zi asosiy ramkalar bilan tanishamiz.
2. Ramkalash
Umumiy ramka yaratish jarayonini quyidagi diagrammada tasvirlash mumkin:
Ushbu diagrammada ma'lumotlar EZSP ramkasini anglatadi. Umuman olganda, ramkalash jarayonlari: |No|Step|Reference|
|:-|:-|:-|
|1|EZSP ramkasini to'ldiring|UG100|
|2|Ma'lumotlarni tasodifiylashtirish|UG101 ning 4.3-bo'limi|
|3|Boshqaruv baytini qo'shing|UG101-ning 2-bobi va 3-bobi
|4|CHKni hisoblang|UG101 ning 2.3-bo'limi|
|5|Bayt to'ldirish|UG101 ning 4.2-bo'limi|
|6|Yakuniy bayroqni qo'shing|UG101ning 2.4-bo'limi|
2.1. EZSP ramkasini to'ldiring
EZSP ramka formati UG100 ning 3-bobida tasvirlangan.
SDK yangilanganda ushbu format o'zgarishi mumkinligiga e'tibor bering. Format o'zgarganda, biz unga yangi versiya raqamini beramiz. Ushbu maqola yozilganda so'nggi EZSP versiya raqami 8 ni tashkil qiladi (EmberZnet 6.8).
EZSP ramka formati turli versiyalarda farq qilishi mumkinligi sababli, xost va NCP uchun majburiy talab mavjud.SHARTbir xil EZSP versiyasi bilan ishlash. Aks holda ular kutilganidek muloqot qila olmaydi.
Bunga erishish uchun xost va NCP o'rtasidagi birinchi buyruq versiya buyrug'i bo'lishi kerak. Boshqacha qilib aytganda, xost boshqa har qanday aloqadan oldin NCP ning EZSP versiyasini olishi kerak. Agar EZSP versiyasi host tomonining EZSP versiyasidan farq qilsa, aloqa uzilishi kerak.
Buning orqasida yashirin talab shundaki, versiya buyrug'ining formati mumkinHECH QACHON O‘ZGARMANG. EZSP versiyasi buyruq formati quyidagi kabi:
mín:https://zhuanlan.zhihu.com/p/339700391
mímí: iiči
lēngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngīngči
2.2. Ma'lumotlarni tasodifiylashtirish
Batafsil randomizatsiya jarayoni UG101 ning 4.3-bo'limida tasvirlangan. Butun EZSP ramkasi tasodifiy bo'ladi. Randomizatsiya eksklyuziv - YOKI EZSP ramkasi va psevdo-tasodifiy ketma-ketlikdir.
Quyida psevdo-tasodifiy ketma-ketlikni yaratish algoritmi keltirilgan.
- rand0 = 0×42
- agar randi ning 0 biti 0 bo'lsa, randi+1 = randi >> 1
- agar randining 0 biti 1 bo'lsa, randi+1 = (randi >> 1) ^ 0xB8
2.3. Boshqarish baytini qo'shing
Boshqaruv bayti bir baytli ma'lumot bo'lib, ramka boshiga qo'shilishi kerak. Format quyidagi jadvalda tasvirlangan:
Hammasi bo'lib 6 turdagi nazorat baytlari mavjud. Birinchi uchtasi DATA, ACK va NAK kabi EZSP ma'lumotlariga ega umumiy ramkalar uchun ishlatiladi. Oxirgi uchtasi RST, RSTACK va ERROR kabi umumiy EZSP ma'lumotlarisiz ishlatiladi.
RST, RSTACK va ERROR formatlari 3.1 dan 3.3 gacha bo'limlarda tasvirlangan.
2.4. CRC ni hisoblang
16-bitli CRC boshqaruv baytidan ma'lumotlarning oxirigacha baytlar bo'yicha hisoblanadi. Standart CRCCCITT (g(x) = x16 + x12 + x5 + 1) 0xFFFF ga ishga tushirilgan. Eng muhim bayt eng kam ahamiyatli baytdan oldin keladi (katta-endian rejimi).
2.5. Bayt to'ldirish
UG101 ning 4.2-bo'limida ta'riflanganidek, maxsus maqsadlarda foydalaniladigan ba'zi zahiralangan bayt qiymatlari mavjud. Ushbu qiymatlarni quyidagi jadvalda topish mumkin:
Ushbu qiymatlar ramkada paydo bo'lganda, ma'lumotlarga maxsus ishlov beriladi. – Zaxiralangan bayt oldiga 0x7D chiqish baytini kiriting – Zaxiralangan baytning 5 bitini teskari o‘zgartiring
Quyida ushbu algoritmga misollar keltirilgan:
2.6. Yakuniy bayroqni qo'shing
Oxirgi qadam freymning oxiriga 0x7E tugatish bayrog'ini qo'shishdir. Shundan so'ng ma'lumotlar UART portiga yuborilishi mumkin.
3. De-framing jarayoni
UART dan ma'lumotlar olinganda, biz uni dekodlash uchun teskari amallarni bajarishimiz kerak.
4. Adabiyotlar
Yuborilgan vaqt: 2022 yil 08-fevral