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 một 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 nhiều so với SPI.

Silicon Labs cũng đã cung cấp một dự án mẫu cho chương trình máy chủ, đó là mẫuZ3Gatewayhost. Mẫu chạy trên một hệ thống giống như 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 RTO, nhưng thật không may, không có mẫu máy chủ dựa trên RTO nào trong thời điểm hiện tại. 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 RTO.

Đ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 NCP và SPI dựa trên UART, 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 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 để mang dữ liệu EZSP một cách đáng tin cậy trên UART, đó làTROGiao thức, viết tắt choMá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à tro có thể được minh họa bằng sơ đồ sau:

1

Định dạng dữ liệu của EZSP và giao thức tro 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 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 dữ liệu | Phần 4.3 của UG101 |

| 3 | Thêm Byte điều khiển | CHAP2 và CHAP3 của UG101 |

| 4 | Tính CRC | Phần 2.3 của UG101 |

| 5 | nhồi byte | Phần 4.2 của UG101 |

| 6 | Thêm cờ cuối | Phần 2.4 của UG101 |

2.1. Điền vào khung EZSP

Định dạng khung EZSP được minh họa trong Chap 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ó 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ó một yêu cầu bắt buộc là máy chủ và NCPPHẢ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 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 phía máy chủ, giao tiếp phải bị hủy bỏ.

Yêu cầu ngầm đằ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ư bên dưới:

5

Các giải thích của trường tham số và định dạng của phản hồi phiên bản có thể được tìm thấy trong chap 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
Torchiotbootcamp
链接 Https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 ,

2.2. Ngẫu nhiên 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 là độc quyền-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à một dữ liệu byte một và nên được thêm vào đầu khung. Định dạng được minh họa bằng bảng dưới đây:

6

Hoàn toàn, có 6 loại byte kiểm soát. Ba đầu tiên được sử dụng cho các khung chung với dữ liệu EZSP, bao gồm dữ liệu, ACK và NAK. Ba lần cuối cùng được sử dụng mà không có dữ liệu EZSP phổ biến, bao gồm RST, RSTACK và lỗi.

Định dạng của RST, RSTack và lỗi được mô tả trong Phần 3.1 đến 3.3.

2.4. Tính CRC

CRC 16 bit được tính toán trên byte từ byte điều khiển cho đến khi kết thúc dữ liệu. CRCCCCITT tiêu chuẩn (g (x) = x16 + x12 + x5 + 1) được khởi tạo thành 0xffff. Byte có ý nghĩa nhất đi trước byte ít có ý nghĩa nhất (chế độ Big-Endian).

2.5. Byte nhồi

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. 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 phương pháp điều trị đặc biệt sẽ được thực hiện cho dữ liệu. - Chèn byte thoát 0x7d trước byte dành riêng - đảo ngược bit5 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ờ cuối

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

3. Quá trình khử khung

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

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


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