Pengarang: Torchiotbootcamp
Pautan: https: //zhuanlan.zhihu.com/p/339700391
Dari: Quora
1. Pengenalan
Silicon Labs telah menawarkan penyelesaian tuan rumah+NCP untuk reka bentuk ZigBee Gateway. Dalam seni bina ini, tuan rumah boleh berkomunikasi dengan NCP melalui antara muka UART atau SPI. Paling biasa, UART digunakan kerana ia lebih mudah daripada SPI.
Silicon Labs juga menyediakan projek sampel untuk program tuan rumah, yang merupakan sampelZ3GatewayHost
. Sampel berjalan pada sistem seperti Unix. Sesetengah pelanggan mungkin mahukan sampel tuan rumah yang boleh dijalankan pada RTOS, tetapi malangnya, tidak ada sampel tuan rumah berasaskan RTOS buat masa ini. Pengguna perlu membangunkan program tuan rumah mereka sendiri berdasarkan RTOS.
Penting untuk memahami protokol Gateway UART sebelum membangunkan program tuan rumah yang disesuaikan. Bagi kedua -dua NCP berasaskan UART dan NCP berasaskan SPI, tuan rumah menggunakan protokol EZSP untuk berkomunikasi dengan NCP.Ezsppendek untukProtokol Serial Emberznet, dan ia ditakrifkan dalamUG100. Untuk NCP berasaskan UART, protokol lapisan yang lebih rendah dilaksanakan untuk membawa data EZSP dengan pasti melalui UART, itulahAbuProtokol, pendek untukTuan rumah bersiri asynchronous. Untuk maklumat lanjut mengenai Ash, sila rujukUG101danUG115.
Hubungan antara EZSP dan Ash boleh digambarkan oleh rajah berikut:
Format data EZSP dan protokol Ash boleh digambarkan oleh rajah berikut:
Di halaman ini, kami akan memperkenalkan proses membingkai data UART dan beberapa bingkai utama yang sering digunakan di Zigbee Gateway.
2. Bingkai
Proses bingkai umum boleh digambarkan oleh carta berikut:
Dalam carta ini, data bermaksud bingkai EZSP. Secara umum, proses pembingkaian adalah: | Tidak | Langkah | Rujukan |
|:-|:-|:-|
| 1 | Isi bingkai EZSP | UG100 |
| 2 | Rawak Data | Seksyen 4.3 UG101 |
| 3 | Tambah Byte Kawalan | CHAP2 dan CHAP3 UG101 |
| 4 | Kirakan CRC | Seksyen 2.3 UG101 |
| 5 | byte pemadat | Seksyen 4.2 UG101 |
| 6 | Tambah bendera akhir | Bahagian 2.4 UG101 |
2.1. Isi bingkai EZSP
Format bingkai EZSP digambarkan dalam bab 3 UG100.
Perhatikan bahawa format ini mungkin berubah apabila naik taraf SDK. Apabila format berubah, kami akan memberikan nombor versi baru. Nombor versi EZSP terkini ialah 8 apabila artikel ini ditulis (Emberznet 6.8).
Oleh kerana format bingkai EZSP mungkin berbeza antara versi yang berbeza, terdapat keperluan wajib bahawa tuan rumah dan NCPMestiBekerja dengan versi EZSP yang sama. Jika tidak, mereka tidak dapat berkomunikasi seperti yang diharapkan.
Untuk mencapai itu, arahan pertama antara tuan rumah dan NCP mestilah arahan versi. Dalam erti kata lain, tuan rumah mesti mengambil semula versi EZSP NCP sebelum komunikasi lain. Jika versi EZSP berbeza dengan versi EZSP sisi tuan rumah, komunikasi mesti dibatalkan.
Keperluan tersirat di sebalik ini ialah format perintah versi bolehTidak pernah berubah. Format arahan versi EZSP seperti di bawah:
链接: https: //zhuanlan.zhihu.com/p/339700391
来源: 知乎
著作权归作者所有。商业转载请联系作者获得授权, 非商业转载请注明出处。
2.2. Rawak data
Proses rawak terperinci diterangkan dalam Bahagian 4.3 UG101. Seluruh bingkai EZSP akan rawak. Rawak adalah untuk eksklusif-atau bingkai EZSP dan urutan pseudo-rawak.
Berikut adalah algoritma yang menjana urutan pseudo-rawak.
- Rand0 = 0 × 42
- jika bit 0 randi adalah 0, randi+1 = randi >> 1
- jika bit 0 dari randi adalah 1, randi+1 = (randi >> 1) ^ 0xb8
2.3. Tambah byte kawalan
Byte kawalan adalah satu data byte, dan harus ditambah ke kepala bingkai. Format ini digambarkan dengan jadual di bawah:
Sebenarnya, terdapat 6 jenis bait kawalan. Tiga pertama digunakan untuk bingkai biasa dengan data EZSP, termasuk data, ACK dan NAK. Tiga yang terakhir digunakan tanpa data EZSP biasa, termasuk RST, RSTACK dan Ralat.
Format RST, RSTACK dan Ralat diterangkan dalam Bahagian 3.1 hingga 3.3.
2.4. Kirakan CRC
CRC 16-bit dikira pada bait dari byte kawalan hingga akhir data. CRCCCITT standard (g (x) = x16 + x12 + x5 + 1) diasaskan kepada 0xFFFF. Byte yang paling penting mendahului byte paling tidak signifikan (mod besar-endian).
2.5. Pemadat byte
Seperti yang diterangkan dalam Seksyen 4.2 UG101, terdapat beberapa nilai byte terpelihara yang digunakan untuk tujuan khas. Nilai -nilai ini boleh didapati dalam jadual berikut:
Apabila nilai -nilai ini muncul dalam bingkai, rawatan khas akan dilakukan pada data. - Masukkan byte melarikan diri 0x7d di hadapan bait terpelihara - membalikkan bit5 byte yang disediakan
Berikut adalah beberapa contoh algoritma ini:
2.6. Tambah bendera akhir
Langkah terakhir adalah untuk menambah bendera akhir 0x7e ke hujung bingkai. Selepas itu, data boleh dihantar ke port UART.
3. Proses de-framing
Apabila data diterima dari UART, kita hanya perlu melakukan langkah -langkah terbalik untuk menyahkodkannya.
4. Rujukan
Masa Post: Feb-08-2022