Tentang Zigbee EZSP UART

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. Yang paling umum digunakan adalah UART karena jauh lebih sederhana daripada SPI.

Silicon Labs juga telah menyediakan proyek contoh untuk program host, yaitu contoh tersebut.Z3GatewayHostContoh program ini berjalan pada sistem mirip Unix. Beberapa pelanggan mungkin menginginkan contoh program host yang dapat berjalan pada RTOS, tetapi sayangnya, saat ini belum ada contoh program host berbasis RTOS. Pengguna perlu mengembangkan program host mereka sendiri berdasarkan RTOS.

Penting untuk memahami protokol gateway UART sebelum mengembangkan program host kustom. Baik untuk NCP berbasis UART maupun NCP berbasis SPI, host menggunakan protokol EZSP untuk berkomunikasi dengan NCP.EZSPmerupakan singkatan dariProtokol Serial EmberZnet, dan hal itu didefinisikan dalamUG100Untuk NCP berbasis UART, protokol lapisan bawah diimplementasikan untuk membawa data EZSP secara andal melalui UART, yaitu...ABUprotokol, singkatan dariHost Serial AsinkronUntuk informasi lebih lanjut mengenai ASH, silakan merujuk keUG101DanUG115.

Hubungan antara EZSP dan ASH dapat diilustrasikan dengan diagram berikut:

1

Format data EZSP dan protokol ASH dapat diilustrasikan dengan diagram berikut:

2

Pada halaman ini, kami akan memperkenalkan proses pembuatan frame data UART dan beberapa frame kunci yang sering digunakan pada gateway Zigbee.

2. Pembingkaian

Proses pembingkaian secara umum dapat diilustrasikan dengan bagan berikut:

3

Dalam bagan ini, data tersebut mewakili kerangka 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 UG101|

|4|Menghitung CRC|Bagian 2.3 dari UG101|

|5|Penyisipan 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.

4

Harap perhatikan bahwa format ini dapat berubah saat SDK diperbarui. Ketika format berubah, kami akan memberikan nomor versi baru. Nomor versi EZSP terbaru adalah 8 saat artikel ini ditulis (EmberZnet 6.8).

Karena format frame EZSP mungkin berbeda antara versi yang berbeda, ada persyaratan wajib bahwa host dan NCPHARUSGunakan 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 adalah seperti di bawah ini:

5

Penjelasan mengenai kolom parameter dan format respons versi dapat ditemukan di Bab 4 UG100. Kolom parameter adalah versi EZSP dari program host. Saat artikel ini ditulis, versinya adalah 8.
7
Contohnya:TorchIoTBootCamp
Alamat:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有.

2.2. Pengacakan Data

Proses pengacakan secara detail dijelaskan pada bagian 4.3 UG101. Seluruh kerangka EZSP akan diacak. Pengacakan dilakukan dengan melakukan operasi XOR eksklusif antara kerangka EZSP dan urutan pseudo-acak.

Berikut adalah algoritma untuk menghasilkan urutan pseudo-acak.

  • rand0 = 0×42
  • Jika bit 0 dari randi adalah 0, maka randi+1 = randi >> 1
  • Jika bit 0 dari randi adalah 1, maka randi+1 = (randi >> 1) ^ 0xB8

2.3. Tambahkan Byte Kontrol

Byte kontrol adalah data satu byte, dan harus ditambahkan ke bagian awal frame. Formatnya diilustrasikan dengan tabel di bawah ini:

6

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 pada bagian 3.1 hingga 3.3.

2.4. Hitung CRC

CRC 16-bit dihitung pada byte dari byte kontrol hingga akhir data. CRCCCITT standar (g(x) = x16 + x12 + x5 + 1) diinisialisasi ke 0xFFFF. Byte yang paling signifikan mendahului byte yang paling tidak signifikan (mode big-endian).

2.5. Pengisian Byte

Sebagaimana dijelaskan pada bagian 4.2 UG101, terdapat beberapa nilai byte yang dicadangkan untuk tujuan khusus. Nilai-nilai ini dapat ditemukan pada tabel berikut:

7

Ketika nilai-nilai ini muncul dalam frame, perlakuan khusus akan dilakukan pada data tersebut. – Sisipkan byte escape 0x7D di depan byte yang dicadangkan – Balikkan bit5 dari byte yang dicadangkan tersebut

Berikut beberapa contoh algoritma ini:

8

2.6. Tambahkan Bendera Akhir

Langkah terakhir adalah menambahkan flag akhir 0x7E ke akhir frame. Setelah itu, data dapat dikirim ke port UART.

3. Proses De-framing

Saat data diterima dari UART, kita hanya perlu melakukan langkah-langkah kebalikannya untuk mendekodekannya.

4. Referensi


Waktu posting: 08 Februari 2022
Obrolan Online WhatsApp!