Giới thiệu về Zigbee EZSP UART

Tác giả:TorchIoTBootCamp
Liên kết:https://zhuanlan.zhihu.com/p/339700391
Từ: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. Phổ biến nhất, 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à mẫuMáy chủ Z3Gateway. Mẫu chạy trên hệ thống giống Unix. Một số khách hàng có thể muốn mẫu máy chủ có thể chạy trên RTOS, nhưng thật không may, hiện tại không có mẫu máy chủ dựa trên RTOS. Người dùng cần phát triển chương trình máy chủ của riêng họ dựa trên RTOS.

Điều quan trọng là phải hiểu giao thức cổng UART trước khi phát triển chương trình máy chủ tùy chỉnh. Đố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ảoUG101UG115.

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 EZSP và giao thức ASH có thể được minh họa bằng sơ đồ sau:

2

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

2. Khung

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

3

Trong biểu đồ này, dữ liệu có nghĩa là khung EZSP. Nhìn chung, các quy trình đóng khung là: |Không|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|Nhồi 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 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 nâng cấp. Khi định dạng thay đổi, chúng tôi sẽ cung cấp cho nó một số phiên bản mới. Số phiên bản EZSP mới nhất là 8 khi bài viết này được viết (EmberZnet 6.8).

Vì định dạng khung EZSP có thể khác nhau giữa các phiên bản khác nhau nên có yêu cầu bắt buộc là máy chủ và NCPPHẢIlàm việc với cùng phiên bản EZSP. Nếu không, chúng không thể giao tiếp như mong đợi.

Để đạt được đ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 lấy lại phiên bản EZSP của NCP trước 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 máy chủ, 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 có thểKHÔNG BAO GIỜ THAY ĐỔI. Định dạng lệnh phiên bản EZSP như sau:

5

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 lưu trữ. Khi bài viết này được viết, đó 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

Quá trình ngẫu nhiên hóa chi tiết được mô tả trong phần 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 là loại trừ-OR khung EZSP và một chuỗi giả ngẫu nhiên.

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

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

2.3. Thêm Byte Điều khiển

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

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 chung 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 chung, bao gồm RST, RSTACK và ERROR.

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

2.4. Tính toán CRC

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

2.5. Nhồi byte

Như đã mô tả trong phần 4.2 của UG101, có một số giá trị byte được dành riêng được sử dụ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, một xử lý đặc biệt sẽ được thực hiện với dữ liệu. – Chèn byte thoát 0x7D vào trước byte được dành riêng – Đảo ngược bit5 của byte được 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. Sau đó, dữ liệu có thể được gửi đến cổng UART.

3. Quá trình phá bỏ khuôn khổ

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ã dữ liệu.

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


Thời gian đăng: 08-02-2022
Trò chuyện trực tuyến trên WhatsApp!