Penulis: TorchIoTBootCamp
Pranala: https://zhuanlan.zhihu.com/p/339700391
Saka:Quora
1. Pambuka
Silicon Labs wis nawakake solusi host+NCP kanggo desain gateway Zigbee. Ing arsitektur iki, host bisa komunikasi karo NCP liwat antarmuka UART utawa SPI. Umumé, UART digunakake amarga luwih prasaja tinimbang SPI.
Silicon Labs uga nyedhiyakake conto proyek kanggo program host, yaiku contoZ3GatewayHostSampel iki mlaku ing sistem kaya Unix. Sawetara pelanggan bisa uga pengin sampel host sing bisa mlaku ing RTOS, nanging sayangé, durung ana sampel host berbasis RTOS kanggo sementara. Pangguna kudu ngembangake program host dhewe adhedhasar RTOS.
Penting kanggo mangerteni protokol gateway UART sadurunge ngembangake program host sing disesuaikan. Kanggo NCP berbasis UART lan NCP berbasis SPI, host nggunakake protokol EZSP kanggo komunikasi karo NCP.EZSPcekakan sakaProtokol Serial EmberZnet, lan ditetepake ingUG100Kanggo NCP berbasis UART, protokol lapisan ngisor diimplementasikake kanggo nggawa data EZSP kanthi andal liwat UART, yaikuABUprotokol, cekakan sakaHost Serial AsinkronKanggo katrangan luwih lengkap babagan ASH, delengenUG101lanUG115.
Hubungan antarane EZSP lan ASH bisa digambarake nganggo diagram ing ngisor iki:
Format data EZSP lan protokol ASH bisa digambarake nganggo diagram ing ngisor iki:
Ing kaca iki, kita bakal ngenalake proses framing data UART lan sawetara key frame sing kerep digunakake ing Zigbee gateway.
2. Rangka
Proses framing umum bisa digambarake nganggo grafik ing ngisor iki:
Ing grafik iki, data kasebut tegese pigura EZSP. Umumé, proses framing yaiku: |Ora Ana|Langkah|Referensi|
|:-|:-|:-|
|1|Isi Rangka EZSP|UG100|
|2|Pengacakan Data|Bagian 4.3 saka UG101|
|3|Tambahake Byte Kontrol|Bab 2 lan Bab 3 saka UG101|
|4|Hitung CRC|Bagian 2.3 saka UG101|
|5|Pangisian Byte|Bagian 4.2 saka UG101|
|6|Tambahake Gendéra Pungkasan|Bagian 2.4 saka UG101|
2.1. Isi Kerangka EZSP
Format pigura EZSP digambarake ing Bab 3 saka UG100.
Elinga yen format iki bisa uga owah nalika SDK diupgrade. Nalika format kasebut owah, kita bakal menehi nomer versi anyar. Nomer versi EZSP paling anyar yaiku 8 nalika artikel iki ditulis (EmberZnet 6.8).
Amarga format pigura EZSP bisa uga beda-beda antarane versi sing beda-beda, ana syarat wajib yen host lan NCPKUDUbisa digunakake karo versi EZSP sing padha. Yen ora, dheweke ora bisa komunikasi kaya sing dikarepake.
Kanggo nggayuh kuwi, prentah pisanan antarane host lan NCP kudu dadi prentah versi. Kanthi tembung liya, host kudu njupuk versi EZSP saka NCP sadurunge komunikasi liyane. Yen versi EZSP beda karo versi EZSP saka sisih host, komunikasi kasebut kudu dibatalake.
Syarat implisit ing mburi iki yaiku format printah versi bisaORA ANA OWAH-OWAHANFormat printah versi EZSP kaya ing ngisor iki:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Pengacakan Data
Proses randomisasi sing rinci diterangake ing bagean 4.3 saka UG101. Kabeh pigura EZSP bakal diacak. Randomisasi iki kanggo ngeksklusifake-UTAWA pigura EZSP lan urutan pseudo-acak.
Ing ngisor iki algoritma kanggo ngasilake urutan pseudo-acak.
- rand0 = 0×42
- yen bit 0 saka randi iku 0, randi+1 = randi >> 1
- yen bit 0 saka randi iku 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Tambahake Byte Kontrol
Byte kontrol kuwi data siji byte, lan kudu ditambahake ing sirah pigura. Format kasebut digambarake nganggo tabel ing ngisor iki:
Sakabèhé, ana 6 jinis byte kontrol. Telu sing pertama digunakaké kanggo frame umum nganggo data EZSP, kalebu DATA, ACK lan NAK. Telu sing terakhir digunakaké tanpa data EZSP umum, kalebu RST, RSTACK lan ERROR.
Format RST, RSTACK lan ERROR diterangake ing bagean 3.1 nganti 3.3.
2.4. Ngitung CRC
CRC 16-bit diitung nganggo byte saka byte kontrol nganti pungkasan data. CRCCCITT standar (g(x) = x16 + x12 + x5 + 1) diinisialisasi dadi 0xFFFF. Byte paling signifikan ndhisiki byte paling ora signifikan (mode big-endian).
2.5. Isian Byte
Kaya sing diterangake ing bagean 4.2 saka UG101, ana sawetara nilai byte sing wis dipesen sing digunakake kanggo tujuan khusus. Nilai-nilai kasebut bisa ditemokake ing tabel ing ngisor iki:
Nalika nilai-nilai iki katon ing pigura, bakal ana perawatan khusus kanggo data kasebut. – Lebokake byte escape 0x7D ing ngarep byte sing wis dipesen – Walik bit5 saka byte sing wis dipesen kasebut
Ing ngisor iki sawetara conto algoritma iki:
2.6. Tambahake Bendera Pungkasan
Langkah pungkasan yaiku nambahake flag pungkasan 0x7E ing pungkasan pigura. Sawise iku, data bisa dikirim menyang port UART.
3. Proses De-framing
Nalika data ditampa saka UART, kita mung perlu nindakake langkah kosok baline kanggo dekode.
4. Referensi
Wektu kiriman: 08-Feb-2022








