Penulis: 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. UART paling umum digunakan karena jauh lebih sederhana daripada SPI.
Silicon Labs juga telah menyediakan contoh proyek untuk program tuan rumah, yaitu contohTuan Rumah Gerbang Z3
Sampel ini berjalan pada sistem mirip Unix. Beberapa pelanggan mungkin menginginkan sampel host yang dapat berjalan pada RTOS, tetapi sayangnya, belum ada sampel host berbasis RTOS untuk saat ini. Pengguna perlu mengembangkan program host mereka sendiri berdasarkan RTOS.
Penting untuk memahami protokol gateway UART sebelum mengembangkan program host yang dikustomisasi. Baik untuk NCP berbasis UART maupun NCP berbasis SPI, host menggunakan protokol EZSP untuk berkomunikasi dengan NCP.EZSPadalah kependekan dariProtokol Serial EmberZnet, dan didefinisikan dalamUG100Untuk NCP berbasis UART, protokol lapisan bawah diimplementasikan untuk membawa data EZSP secara andal melalui UART, yaituABUprotokol, kependekan dariHost Serial AsinkronUntuk informasi lebih lanjut tentang ASH, silakan merujuk keUG101DanUG115.
Hubungan antara EZSP dan ASH dapat diilustrasikan oleh diagram berikut:
Format data EZSP dan protokol ASH dapat diilustrasikan oleh diagram berikut:
Di halaman ini, kami akan memperkenalkan proses pembingkaian data UART dan beberapa bingkai utama yang sering digunakan dalam gerbang Zigbee.
2. Pembingkaian
Proses penyusunan kerangka umum dapat diilustrasikan melalui bagan berikut:
Dalam bagan ini, data mengacu pada frame EZSP. Secara umum, proses pembingkaiannya adalah: |No|Langkah|Referensi|
|:-|:-|:-|
|1|Isi Bingkai EZSP|UG100|
|2|Pengacakan Data|Bagian 4.3 dari UG101|
|3|Tambahkan Byte Kontrol|Bab 2 dan Bab 3 dari UG101|
|4|Hitung CRC|Bagian 2.3 dari UG101|
|5|Byte Stuffing|Bagian 4.2 dari UG101|
|6|Tambahkan Bendera Akhir|Bagian 2.4 dari UG101|
2.1. Mengisi Bingkai EZSP
Format bingkai EZSP diilustrasikan dalam Bab 3 UG100.
Harap diperhatikan bahwa format ini dapat berubah saat SDK diperbarui. Saat format 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, ada 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 versi EZSP dari NCP sebelum komunikasi lainnya. Jika versi EZSP berbeda dengan versi EZSP di sisi host, komunikasi harus dibatalkan.
Persyaratan implisit di balik ini adalah bahwa format perintah versi dapatJANGAN PERNAH BERUBAHFormat 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 dari UG101. Seluruh frame EZSP akan diacak. Pengacakan dilakukan dengan cara eksklusif-OR antara frame EZSP dan sekuens pseudo-acak.
Berikut ini adalah algoritma pembangkitan sekuens pseudo-acak.
- rand0 = 0×42
- jika bit 0 dari randi adalah 0, randi+1 = randi >> 1
- jika bit 0 dari 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, terdapat 6 jenis byte kontrol. Tiga byte pertama digunakan untuk frame umum dengan data EZSP, termasuk DATA, ACK, dan NAK. Tiga byte terakhir digunakan tanpa data EZSP umum, termasuk RST, RSTACK, dan ERROR.
Format RST, RSTACK dan ERROR dijelaskan dalam bagian 3.1 hingga 3.3.
2.4. Hitung CRC
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. Pengisian Byte
Sebagaimana dijelaskan di bagian 4.2 UG101, terdapat beberapa nilai byte khusus yang digunakan untuk tujuan khusus. Nilai-nilai ini dapat ditemukan dalam tabel berikut:
Ketika nilai-nilai ini muncul dalam bingkai, perlakuan khusus akan dilakukan pada data. – Masukkan byte escape 0x7D di depan byte yang dicadangkan – Balikkan bit5 dari byte yang dicadangkan tersebut
Berikut adalah beberapa contoh algoritma ini:
2.6. Tambahkan Bendera Akhir
Langkah terakhir adalah menambahkan tanda akhir 0x7E di akhir frame. Setelah itu, data dapat dikirim ke port UART.
3. Proses De-framing
Ketika data diterima dari UART, kita hanya perlu melakukan langkah sebaliknya untuk mendekodekannya.
4. Referensi
Waktu posting: 08-Feb-2022