Müəllif:TorchIoTBootCamp
Link:https://zhuanlan.zhihu.com/p/339700391
Kimdən: Quora
1. Giriş
Silicon Labs Zigbee gateway dizaynı üçün host+NCP həllini təklif etdi. Bu arxitekturada ev sahibi UART və ya SPI interfeysi vasitəsilə NCP ilə əlaqə saxlaya bilər. Ən çox SPI-dən daha sadə olduğu üçün UART istifadə olunur.
Silicon Labs həmçinin nümunə olan ev sahibi proqramı üçün nümunə bir layihə təqdim etdiZ3GatewayHost
. Nümunə Unix-ə bənzər sistemdə işləyir. Bəzi müştərilər RTOS-da işləyə bilən host nümunəsi istəyə bilər, lakin təəssüf ki, hazırda RTOS əsaslı host nümunəsi yoxdur. İstifadəçilər RTOS əsasında öz host proqramını inkişaf etdirməlidirlər.
Fərdiləşdirilmiş host proqramını inkişaf etdirməzdən əvvəl UART şlüz protokolunu başa düşmək vacibdir. Həm UART əsaslı NCP, həm də SPI əsaslı NCP üçün ev sahibi NCP ilə əlaqə saxlamaq üçün EZSP protokolundan istifadə edir.EZSPüçün qısadırEmberZnet Serial Protokolu, və o, müəyyən edilmişdirUG100. UART əsaslı NCP üçün EZSP məlumatlarını UART üzərindən etibarlı şəkildə daşımaq üçün aşağı səviyyə protokolu həyata keçirilir, yəniASHprotokol, qısacaAsinxron Serial Host. ASH haqqında ətraflı məlumat üçün müraciət edinUG101vəUG115.
EZSP və ASH arasındakı əlaqə aşağıdakı diaqramla göstərilə bilər:
EZSP və ASH protokolunun məlumat formatı aşağıdakı diaqramla təsvir edilə bilər:
Bu səhifədə biz UART məlumatlarının çərçivəyə salınması prosesini və Zigbee gateway-də tez-tez istifadə olunan bəzi əsas çərçivələri təqdim edəcəyik.
2. Çərçivələmə
Ümumi çərçivələmə prosesi aşağıdakı diaqramla göstərilə bilər:
Bu diaqramda verilənlər EZSP çərçivəsi deməkdir. Ümumiyyətlə, çərçivələmə prosesləri bunlardır: |No|Addım|İstinad|
|:-|:-|:-|
|1|EZSP Çərçivəsini doldurun|UG100|
|2|Məlumatların təsadüfiləşdirilməsi|UG101-in 4.3-cü bölməsi|
|3|UG101-in Nəzarət Baytını|Fəsil 2 və Fəsil 3-ü əlavə edin|
|4|CRC-ni hesablayın|UG101-in 2.3-cü bölməsi|
|5|Bayt doldurulması|UG101-in 4.2-ci bölməsi|
|6|Son Bayraq əlavə et|UG101-in 2.4-cü Bölməsi|
2.1. EZSP çərçivəsini doldurun
EZSP çərçivə formatı UG100-ün 3-cü Fəsilində təsvir edilmişdir.
SDK təkmilləşdirildikdə bu formatın dəyişə biləcəyinə diqqət yetirin. Format dəyişdikdə ona yeni versiya nömrəsi verəcəyik. Bu məqalə yazıldığında ən son EZSP versiya nömrəsi 8-dir (EmberZnet 6.8).
EZSP çərçivə formatı müxtəlif versiyalar arasında fərqli ola bildiyinə görə, host və NCP arasında məcburi bir tələb var.MÜTLƏQeyni EZSP versiyası ilə işləyin. Əks halda, gözlənildiyi kimi ünsiyyət qura bilməzlər.
Buna nail olmaq üçün host və NCP arasındakı ilk əmr versiya əmri olmalıdır. Başqa sözlə, host hər hansı digər ünsiyyətdən əvvəl NCP-nin EZSP versiyasını bərpa etməlidir. EZSP versiyası host tərəfinin EZSP versiyası ilə fərqlidirsə, rabitə dayandırılmalıdır.
Bunun arxasında gizli tələb odur ki, versiya əmrinin formatı ola bilərHEÇ VAXT DƏYİŞMƏYİN. EZSP versiyası əmr formatı aşağıdakı kimidir:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出
2.2. Data Randomization
Ətraflı təsadüfiləşdirmə prosesi UG101-in 4.3-cü bölməsində təsvir edilmişdir. Bütün EZSP çərçivəsi təsadüfi olacaq. Təsadüfi seçim eksklüzivdir - YA EZSP çərçivəsi və psevdo-təsadüfi ardıcıllıq.
Aşağıda psevdo-təsadüfi ardıcıllığın yaradılması alqoritmi verilmişdir.
- rand0 = 0×42
- randinin 0 biti 0 olarsa, randi+1 = randi >> 1
- randinin 0 biti 1 olarsa, randi+1 = (randi >> 1) ^ 0xB8
2.3. Nəzarət Baytını əlavə edin
Nəzarət baytı bir baytlıq məlumatdır və çərçivənin başına əlavə edilməlidir. Format aşağıdakı cədvəllə təsvir edilmişdir:
Ümumilikdə 6 növ nəzarət baytı var. İlk üçü DATA, ACK və NAK daxil olmaqla EZSP məlumatları ilə ümumi çərçivələr üçün istifadə olunur. Son üçü RST, RSTACK və ERROR daxil olmaqla ümumi EZSP məlumatları olmadan istifadə olunur.
RST, RSTACK və ERROR formatı 3.1-3.3 bölmələrində təsvir edilmişdir.
2.4. CRC-ni hesablayın
16 bitlik CRC nəzarət baytından verilənlərin sonuna qədər baytlarda hesablanır. Standart CRCCCITT (g(x) = x16 + x12 + x5 + 1) 0xFFFF olaraq işə salınıb. Ən əhəmiyyətli bayt ən az əhəmiyyətli baytdan (böyük endian rejimi) əvvəldir.
2.5. Bayt Doldurma
UG101-in 4.2-ci bölməsində təsvir olunduğu kimi, xüsusi məqsədlər üçün istifadə edilən bəzi ehtiyat bayt dəyərləri var. Bu dəyərləri aşağıdakı cədvəldə tapmaq olar:
Bu dəyərlər çərçivədə göründükdə, məlumatlara xüsusi müalicə ediləcək. – Escape baytını 0x7D ehtiyat baytın qarşısına daxil edin – Həmin ehtiyat baytın bit5-ini tərsinə çevirin
Aşağıda bu alqoritmin bəzi nümunələri verilmişdir:
2.6. Son Bayraq əlavə edin
Son addım çərçivənin sonuna 0x7E son bayrağı əlavə etməkdir. Bundan sonra məlumatlar UART portuna göndərilə bilər.
3. Çərçivənin çıxarılması prosesi
UART-dan məlumat alındıqda, biz sadəcə onu deşifrə etmək üçün əks addımları yerinə yetirməliyik.
4. İstinadlar
Göndərmə vaxtı: 08 fevral 2022-ci il