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. Umumnya, UART digunakan karena jauh lebih sederhana daripada SPI.

Silicon Labs juga telah menyediakan contoh proyek untuk program tuan rumah, yaitu contohTuan Rumah Gerbang Z3. Sampel tersebut 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 disesuaikan. Untuk NCP berbasis UART dan NCP berbasis SPI, host menggunakan protokol EZSP untuk berkomunikasi dengan NCP.Bahasa Indonesia: EZSPadalah kependekan dariProtokol Serial EmberZnet, dan itu didefinisikan dalamUG100Untuk NCP berbasis UART, protokol lapisan bawah diimplementasikan untuk membawa data EZSP dengan andal melalui UART, yaituABUprotokol, kependekan dariHost Serial AsinkronUntuk informasi lebih lanjut tentang ASH, silakan lihatUG101DanUG115.

Hubungan antara EZSP dan ASH dapat diilustrasikan oleh diagram berikut:

1

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

2

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 secara umum dapat diilustrasikan pada diagram berikut:

3

Dalam bagan ini, data berarti kerangka EZSP. Secara umum, proses pembuatan kerangka adalah: |No|Step|Reference|

:-|:-|:-|

|1|Isi Bingkai EZSP|UG100|

|2|Pengacakan Data|Bagian 4.3 dari UG101|

|3|Tambahkan Control Byte|Bab 2 dan Bab 3 dari UG101|

|4|Hitung CRC|Bagian 2.3 dari UG101|

|5|Byte Stuffing|Bagian 4.2 dari UG101|

|6|Menambahkan Bendera Akhir|Bagian 2.4 dari UG101|

2.1. Mengisi Frame EZSP

Format bingkai EZSP diilustrasikan dalam Bab 3 UG100.

4

Perhatikan bahwa format ini dapat berubah saat SDK dimutakhirkan. Saat format berubah, kami akan memberinya 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 itu, 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:

5

Penjelasan tentang bidang parameter dan format respons versi dapat ditemukan di Bab 4 UG100. Bidang 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 terperinci dijelaskan di bagian 4.3 dari UG101. Seluruh frame EZSP akan diacak. Pengacakan dilakukan dengan cara mengeksklusifkan-ATAU frame EZSP dan urutan pseudo-acak.

Berikut ini adalah algoritma untuk menghasilkan sekuens pseudo-acak.

  • bilangan acak0 = 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. Menambahkan Byte Kontrol

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

6

Secara keseluruhan, 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 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

Seperti yang dijelaskan dalam bagian 4.2 dari UG101, ada beberapa nilai byte yang dicadangkan yang digunakan untuk tujuan khusus. Nilai-nilai ini dapat ditemukan dalam tabel berikut:

7

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 itu

Berikut adalah beberapa contoh algoritma ini:

8

2.6. Tambahkan Bendera Akhir

Langkah terakhir adalah menambahkan end flag 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
Obrolan Daring WhatsApp!