Giới thiệu về Zigbee EZSP UART

Tác giả: TorchIoTBootCamp
Liên kết: https://zhuanlan.zhihu.com/p/339700391
Nguồn: Quora

1. Giới thiệu

Silicon Labs đã cung cấp giải pháp host+NCP cho thiết kế cổng Zigbee. Trong kiến ​​trúc này, host có thể giao tiếp với NCP thông qua giao diện UART hoặc SPI. Thông thường, UART được sử dụng vì nó đơn giản hơn nhiều so với SPI.

Silicon Labs cũng đã cung cấp một dự án mẫu cho chương trình chủ, đó là dự án mẫu.Z3GatewayHostChương trình mẫu này chạy trên một hệ thống giống Unix. Một số khách hàng có thể muốn một chương trình mẫu chạy trên hệ điều hành thời gian thực (RTOS), nhưng tiếc là hiện tại chưa có chương trình mẫu nào dựa trên RTOS. Người dùng cần tự phát triển chương trình máy chủ của riêng mình dựa trên RTOS.

Việc hiểu rõ giao thức cổng UART trước khi phát triển chương trình máy chủ tùy chỉnh là rất quan trọng. Đối với cả NCP dựa trên UART và NCP dựa trên SPI, máy chủ sử dụng giao thức EZSP để giao tiếp với NCP.EZSPlà viết tắt củaGiao thức nối tiếp EmberZnetvà nó được định nghĩa trongUG100Đối với NCP dựa trên UART, một giao thức lớp thấp hơn được triển khai để truyền dữ liệu EZSP một cách đáng tin cậy qua UART, đó là...TROgiao thức, viết tắt củaMáy chủ nối tiếp không đồng bộĐể biết thêm chi tiết về ASH, vui lòng tham khảo...UG101UG115.

Mối quan hệ giữa EZSP và ASH có thể được minh họa bằng sơ đồ sau:

1

Định dạng dữ liệu của giao thức EZSP và ASH có thể được minh họa bằng sơ đồ sau:

2

Trong trang này, chúng ta sẽ giới thiệu quy trình đóng khung dữ liệu UART và một số khung quan trọng thường được sử dụng trong cổng Zigbee.

2. Khung

Quy trình đóng khung tổng quát có thể được minh họa bằng biểu đồ sau:

3

Trong biểu đồ này, dữ liệu biểu thị khung EZSP. Nhìn chung, các quy trình tạo khung là: |Số|Bước|Tham chiếu|

|:-|:-|:-|

|1|Điền vào khung EZSP|UG100|

|2|Ngẫu nhiên hóa dữ liệu|Mục 4.3 của UG101|

|3|Thêm byte điều khiển|Chương 2 và Chương 3 của UG101|

|4|Tính toán CRC|Mục 2.3 của UG101|

|5|Lấp đầy byte|Mục 4.2 của UG101|

|6|Thêm cờ kết thúc|Mục 2.4 của UG101|

2.1. Điền thông tin vào khung EZSP

Định dạng khung EZSP được minh họa trong Chương 3 của UG100.

4

Xin lưu ý rằng định dạng này có thể thay đổi khi SDK được nâng cấp. Khi định dạng thay đổi, chúng tôi sẽ gán cho nó một số phiên bản mới. Số phiên bản EZSP mới nhất tại thời điểm viết bài này là 8 (EmberZnet 6.8).

Do định dạng khung EZSP có thể khác nhau giữa các phiên bản, nên có một yêu cầu bắt buộc là máy chủ và NCP phải tuân thủ định dạng này.PHẢIChúng phải hoạt động với cùng một phiên bản EZSP. Nếu không, chúng sẽ không thể giao tiếp như mong đợi.

Để thực hiện điều đó, lệnh đầu tiên giữa máy chủ và NCP phải là lệnh phiên bản. Nói cách khác, máy chủ phải truy xuất phiên bản EZSP của NCP trước khi thực hiện bất kỳ giao tiếp nào khác. Nếu phiên bản EZSP khác với phiên bản EZSP của phía máy chủ, quá trình giao tiếp phải bị hủy bỏ.

Yêu cầu ngầm định đằng sau điều này là định dạng của lệnh phiên bản phải có thểĐừng bao giờ thay đổiĐịnh dạng lệnh phiên bản EZSP như sau:

5

Các giải thích về trường tham số và định dạng phản hồi phiên bản có thể được tìm thấy trong Chương 4 của UG100. Trường tham số là phiên bản EZSP của chương trình máy chủ. Tại thời điểm viết bài này, phiên bản đó là 8.
7
Nguồn: TorchIoTBootCamp
链接: https://zhuanlan.zhihu.com/p/339700391
来源: 知乎
Bạn có thể làm điều đó bằng cách sử dụng nó.

2.2. Ngẫu nhiên hóa dữ liệu

Quy trình ngẫu nhiên hóa chi tiết được mô tả trong mục 4.3 của UG101. Toàn bộ khung EZSP sẽ được ngẫu nhiên hóa. Quá trình ngẫu nhiên hóa được thực hiện bằng phép toán XOR giữa khung EZSP và một chuỗi giả ngẫu nhiên.

Dưới đây là thuật toán tạo ra chuỗi giả ngẫu nhiên.

  • rand0 = 0×42
  • Nếu bit 0 của randi là 0, thì randi+1 = randi >> 1
  • Nếu bit 0 của randi là 1, thì randi+1 = (randi >> 1) ^ 0xB8

2.3. Thêm byte điều khiển

Byte điều khiển là một byte dữ liệu và cần được thêm vào đầu khung. Định dạng được minh họa trong bảng bên dưới:

6

Tổng cộng có 6 loại byte điều khiển. Ba loại đầu tiên được sử dụng cho các khung thông thường có dữ liệu EZSP, bao gồm DATA, ACK và NAK. Ba loại cuối cùng được sử dụng mà không có dữ liệu EZSP thông thường, bao gồm RST, RSTACK và ERROR.

Định dạng của RST, RSTACK và ERROR được mô tả trong các mục 3.1 đến 3.3.

2.4. Tính toán CRC

Mã CRC 16 bit được tính toán trên các byte từ byte điều khiển đến cuối dữ liệu. Mã CRCCCITT chuẩn (g(x) = x16 + x12 + x5 + 1) được khởi tạo bằng 0xFFFF. Byte quan trọng nhất đứng trước byte ít quan trọng nhất (chế độ big-endian).

2.5. Chèn Byte

Như đã mô tả trong mục 4.2 của UG101, có một số giá trị byte được dành riêng cho mục đích đặc biệt. Các giá trị này có thể được tìm thấy trong bảng sau:

7

Khi các giá trị này xuất hiện trong khung, dữ liệu sẽ được xử lý đặc biệt. – Chèn byte thoát 0x7D vào trước byte dành riêng – Đảo ngược bit 5 của byte dành riêng đó

Dưới đây là một số ví dụ về thuật toán này:

8

2.6. Thêm cờ kết thúc

Bước cuối cùng là thêm cờ kết thúc 0x7E vào cuối khung dữ liệu. Sau đó, dữ liệu có thể được gửi đến cổng UART.

3. Quá trình gỡ bỏ khuôn mẫu

Khi nhận được dữ liệu từ UART, chúng ta chỉ cần thực hiện các bước ngược lại để giải mã nó.

4. Tài liệu tham khảo


Thời gian đăng bài: 08/02/2022
Trò chuyện trực tuyến qua WhatsApp!