Pengarang:TorchIoTBootCamp
Tautan:https://zhuanlan.zhihu.com/p/339700391
Dari:Quora
1. Pendahuluan
Silicon Labs telah menawarkan solusi host+NCP untuk desain gateway Zigbee. Dalam arsitektur ini, host dapat berkomunikasi dengan NCP melalui antarmuka UART atau SPI. Paling umum, UART digunakan karena lebih sederhana daripada SPI.
Silicon Labs juga telah menyediakan contoh proyek untuk program host, yaitu sampelZ3GatewayHost
. Sampel berjalan pada sistem mirip Unix. Beberapa pelanggan mungkin menginginkan sampel host yang dapat berjalan pada RTOS, namun sayangnya, saat ini belum ada sampel host berbasis RTOS. Pengguna perlu mengembangkan program host mereka sendiri berdasarkan RTOS.
Penting untuk memahami protokol gateway UART sebelum mengembangkan program host yang disesuaikan. Untuk NCP berbasis UART dan NCP berbasis SPI, host menggunakan protokol EZSP untuk berkomunikasi dengan NCP.EZSPadalah kependekan dariProtokol Serial EmberZnet, dan itu didefinisikan dalamUG100. Untuk NCP berbasis UART, protokol lapisan bawah diimplementasikan untuk membawa data EZSP secara andal melalui UART, itulahABUprotokol, kependekan dariHost Serial Asinkron. Untuk rincian lebih lanjut tentang ASH, silakan merujuk keUG101DanUG115.
Hubungan antara EZSP dan ASH dapat diilustrasikan dengan diagram berikut:
Format data protokol EZSP dan ASH dapat diilustrasikan dengan diagram berikut:
Di halaman ini, kami akan memperkenalkan proses pembingkaian data UART dan beberapa bingkai kunci yang sering digunakan di gateway Zigbee.
2. Pembingkaian
Proses penyusunan kerangka secara umum dapat diilustrasikan dengan bagan berikut:
Dalam bagan ini, data berarti bingkai EZSP. Secara umum proses framingnya adalah: |Tidak|Langkah|Referensi|
|:-|:-|:-|
|1|Isi Bingkai EZSP|UG100|
|2|Pengacakan Data|Bagian 4.3 dari UG101|
|3|Tambahkan Byte Kontrol|Bab2 dan Bab3 dari UG101|
|4|Hitung CRC|Bagian 2.3 UG101|
|5|Pengisian Byte|Bagian 4.2 dari UG101|
|6|Tambahkan Bendera Akhir|Bagian 2.4 dari UG101|
2.1. Isi Bingkai EZSP
Format bingkai EZSP diilustrasikan dalam Bab 3 UG100.
Perhatikan bahwa format ini dapat berubah ketika SDK ditingkatkan. Jika formatnya berubah, kami akan memberikan nomor versi baru. Nomor versi EZSP terbaru adalah 8 saat artikel ini ditulis (EmberZnet 6.8).
Karena format bingkai EZSP mungkin berbeda antara versi yang berbeda, terdapat persyaratan wajib bahwa host dan NCPHARUSbekerja dengan versi EZSP yang sama. Jika tidak, mereka tidak dapat berkomunikasi seperti yang diharapkan.
Untuk mencapai hal tersebut, perintah pertama antara host dan NCP harus berupa perintah versi. Dengan kata lain, host harus mengambil NCP versi EZSP sebelum komunikasi lainnya. Jika versi EZSP berbeda dengan versi EZSP di sisi host, komunikasi harus dibatalkan.
Persyaratan tersirat di balik ini adalah format perintah versi bisaJANGAN PERNAH BERUBAH. Format perintah versi EZSP seperti di bawah ini:
Alamat:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有.
2.2. Pengacakan Data
Proses pengacakan terperinci dijelaskan di bagian 4.3 UG101. Seluruh frame EZSP akan diacak. Pengacakannya adalah eksklusif-OR frame EZSP dan urutan pseudo-acak.
Di bawah ini adalah algoritma untuk menghasilkan barisan pseudo-acak.
- nilai acak0 = 0×42
- jika bit 0 randi adalah 0, randi+1 = randi >> 1
- jika bit 0 randi adalah 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Tambahkan Byte Kontrol
Byte kontrol adalah data satu byte, dan harus ditambahkan ke kepala frame. Formatnya diilustrasikan dengan tabel di bawah ini:
Secara total, ada 6 jenis byte kontrol. Tiga yang pertama digunakan untuk frame umum dengan data EZSP, termasuk DATA, ACK dan NAK. Tiga yang terakhir digunakan tanpa data EZSP umum, termasuk RST, RSTACK, dan ERROR.
Format RST, RSTACK dan ERROR dijelaskan di bagian 3.1 hingga 3.3.
2.4. Hitung CRCnya
CRC 16-bit dihitung berdasarkan byte dari byte kontrol hingga akhir data. CRCCCITT standar (g(x) = x16 + x12 + x5 + 1) diinisialisasi ke 0xFFFF. Byte paling signifikan mendahului byte paling tidak signifikan (mode big-endian).
2.5. Isian Byte
Seperti dijelaskan di bagian 4.2 UG101, ada beberapa nilai byte cadangan yang digunakan untuk tujuan khusus. Nilai-nilai tersebut dapat dilihat pada tabel berikut:
Ketika nilai-nilai ini muncul dalam bingkai, perlakuan khusus akan dilakukan terhadap data. – Masukkan escape byte 0x7D di depan byte yang dicadangkan – Membalikkan bit5 dari byte yang dicadangkan tersebut
Di bawah ini adalah beberapa contoh algoritma ini:
2.6. Tambahkan Bendera Akhir
Langkah terakhir adalah menambahkan flag akhir 0x7E di akhir frame. Setelah itu data dapat dikirim ke port UART.
3. Proses Penghapusan Pembingkaian
Ketika data diterima dari UART, kita hanya perlu melakukan langkah sebaliknya untuk memecahkan kodenya.
4. Referensi
Waktu posting: 08 Februari 2022