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 máy chủ+NCP cho thiết kế cổng Zigbee. Trong kiến ​​trúc này, máy chủ có thể giao tiếp với NCP thông qua giao diện UART hoặc SPI. Thông thường nhất, UART được sử dụng vì nó đơn giản hơn SPI nhiều.

Silicon Labs cũng đã cung cấp một dự án mẫu cho chương trình chủ trì, đây là dự án mẫuZ3GatewayMáy chủ. Mẫu chạy trên hệ thống giống Unix. Một số khách hàng có thể muốn một 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 mình 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 để liên lạc với NCP.EZSPlà viết tắt củaGiao thức nối tiếp EmberZnet, và nó được định nghĩa trongUG100. Đối với NCP dựa trên UART, giao thức lớp thấp hơn được triển khai để mang dữ liệu EZSP một cách đáng tin cậy qua UART, đó là giao thứcTROgiao 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 giao thức EZSP và 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 quy 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. Đóng 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. Nói chung, các quy trình đóng khung là: |Không|Bước|Tham khảo|

|:-|:-|:-|

|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 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

Hãy chú ý rằng định dạng này có thể thay đổi khi nâng cấp SDK. Khi định dạng thay đổi, chúng tôi sẽ cung cấp cho nó số phiên bản mới. Số phiên bản EZSP mới nhất là 8 khi viết bài này (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ó một yêu cầu bắt buộc là máy chủ và NCP phảiPHẢIlàm việc với cùng một phiên bản EZSP. Nếu không, họ 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 truy xuất 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 phía máy chủ thì việc giao tiếp phải bị hủy bỏ.

Yêu cầu tiềm ẩn đằ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 giống như dưới đây:

5

Bạn có thể tìm thấy phần giải thích về trường tham số và định dạng của phản hồi phiên bản 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ủ. Khi bài viết này được viết, 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

Quá trình ngẫu nhiên chi tiết được mô tả trong phần 4.3 của UG101. Toàn bộ khung EZSP sẽ được chọn ngẫu nhiên. Việc ngẫu nhiên hóa là loại trừ HOẶC khung EZSP và 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 cái đầu tiên được sử dụng cho các khung chung với dữ liệu EZSP, bao gồm DATA, ACK và NAK. Ba cá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 CRC

CRC 16 bit được tính theo byte từ byte điều khiển cho đến hết dữ liệu. CRCCCITT tiêu 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ư được mô tả trong phần 4.2 của UG101, có một số giá trị byte dành riêng được sử dụng cho mục đích đặc biệt. Những 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ự trữ – Đảo ngược bit5 của byte dự trữ đó

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 hủy khung

Khi nhận 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ã.

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


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