Zigbee EZSP UART 소개

저자:TorchIoTBootCamp
링크: https://zhuanlan.zhihu.com/p/339700391
보낸 사람:쿼라

1. 소개

Silicon Labs는 Zigbee 게이트웨이 설계를 위한 호스트+NCP 솔루션을 제공했습니다. 이 아키텍처에서 호스트는 UART 또는 SPI 인터페이스를 통해 NCP와 통신할 수 있습니다. 가장 일반적으로 UART는 SPI보다 훨씬 간단하므로 사용됩니다.

실리콘랩스는 호스트 프로그램을 위한 샘플 프로젝트도 제공했는데, 이는 샘플이다.Z3게이트웨이호스트. 샘플은 Unix 계열 시스템에서 실행됩니다. 일부 고객은 RTOS에서 실행될 수 있는 호스트 샘플을 원할 수 있지만 안타깝게도 현재로서는 RTOS 기반 호스트 샘플이 없습니다. 사용자는 RTOS 기반의 자체 호스트 프로그램을 개발해야 합니다.

맞춤형 호스트 프로그램을 개발하기 전에 UART 게이트웨이 프로토콜을 이해하는 것이 중요합니다. UART 기반 NCP와 SPI 기반 NCP의 경우 호스트는 EZSP 프로토콜을 사용하여 NCP와 통신합니다.EZSP는 짧다EmberZnet 직렬 프로토콜이며, 이는 다음에서 정의됩니다.UG100. UART 기반 NCP의 경우 UART를 통해 EZSP 데이터를 안정적으로 전달하기 위해 하위 계층 프로토콜이 구현됩니다.금연 건강 증진 협회프로토콜, 줄여서비동기 직렬 호스트. ASH에 대한 자세한 내용은 다음을 참조하세요.UG101그리고UG115.

EZSP와 ASH의 관계는 다음 다이어그램으로 설명할 수 있습니다.

1

EZSP 및 ASH 프로토콜의 데이터 형식은 다음 다이어그램으로 설명할 수 있습니다.

2

이번 페이지에서는 UART 데이터를 프레이밍하는 과정과 Zigbee 게이트웨이에서 자주 사용되는 몇 가지 키 프레임을 소개하겠습니다.

2. 프레이밍

일반적인 프레이밍 프로세스는 다음 차트로 설명할 수 있습니다.

3

이 차트에서 데이터는 EZSP 프레임을 의미합니다. 일반적으로 프레이밍 프로세스는 다음과 같습니다. |No|Step|Reference|

|:-|:-|:-|

|1|EZSP 프레임 채우기|UG100|

|2|데이터 무작위화|UG101의 섹션 4.3|

|3|UG101의 제어 바이트|Chap2 및 Chap3 추가|

|4|CRC 계산|UG101의 섹션 2.3|

|5|바이트 스터핑|UG101의 섹션 4.2|

|6|종료 플래그 추가|UG101의 섹션 2.4|

2.1. EZSP 프레임 채우기

EZSP 프레임 형식은 UG100의 3장에 설명되어 있습니다.

4

SDK가 업그레이드되면 이 형식이 변경될 수 있다는 점에 유의하세요. 형식이 변경되면 새 버전 번호가 부여됩니다. 이 글을 작성할 당시 최신 EZSP 버전 번호는 8입니다(EmberZnet 6.8).

EZSP 프레임 형식은 버전마다 다를 수 있으므로 호스트와 NCP에 대한 필수 요구 사항이 있습니다.해야 하다동일한 EZSP 버전으로 작업하십시오. 그렇지 않으면 예상대로 통신할 수 없습니다.

이를 달성하려면 호스트와 NCP 간의 첫 번째 명령은 버전 명령이어야 합니다. 즉, 호스트는 다른 통신을 하기 전에 NCP의 EZSP 버전을 검색해야 합니다. EZSP 버전이 호스트 측의 EZSP 버전과 다를 경우 통신을 중단해야 합니다.

이에 대한 암묵적인 요구 사항은 버전 명령의 형식이 다음과 같이 가능하다는 것입니다.절대로 바꾸지 마세요. EZSP 버전 명령 형식은 다음과 같습니다.

5

매개변수 필드에 대한 설명과 버전 응답 형식은 UG100의 4장에서 확인할 수 있습니다. 매개변수 필드는 호스트 프로그램의 EZSP 버전입니다. 이 글을 쓰고 있는 시점은 8이다.
7
작성자: TorchIoTBootCamp
链接:https://zhuanlan.zhihu.com/p/339700391
来源:지乎
著작품权归작품작자所有。商业转载请联系작품작자获得授权,不商业转载请注明处。

2.2. 데이터 무작위화

자세한 무작위화 과정은 UG101의 섹션 4.3에 설명되어 있습니다. 전체 EZSP 프레임이 무작위로 지정됩니다. 무작위화는 EZSP 프레임과 의사 무작위 시퀀스를 배타적 OR하는 것입니다.

다음은 의사 난수 시퀀스를 생성하는 알고리즘입니다.

  • 랜드0 = 0×42
  • randi의 비트 0이 0이면 randi+1 = randi >> 1
  • randi의 비트 0이 1이면 randi+1 = (randi >> 1) ^ 0xB8

2.3. 제어 바이트 추가

제어 바이트는 1바이트 데이터이며 프레임의 선두에 추가되어야 합니다. 형식은 아래 표에 설명되어 있습니다.

6

총 6가지 종류의 제어 바이트가 있습니다. 처음 3개는 DATA, ACK 및 NAK를 포함하여 EZSP 데이터가 있는 공통 프레임에 사용됩니다. 마지막 3개는 RST, RSTACK 및 ERROR를 포함하여 일반적인 EZSP 데이터 없이 사용됩니다.

RST, RSTACK, ERROR의 형식은 3.1~3.3절에 설명되어 있습니다.

2.4. CRC 계산

16비트 CRC는 제어 바이트부터 데이터 끝까지의 바이트로 계산됩니다. 표준 CRCCCITT(g(x) = x16 + x12 + x5 + 1)는 0xFFFF로 초기화됩니다. 최상위 바이트는 최하위 바이트 앞에 옵니다(빅 엔디안 모드).

2.5. 바이트 스터핑

UG101의 섹션 4.2에 설명된 대로 특수 목적으로 사용되는 일부 예약된 바이트 값이 있습니다. 이러한 값은 다음 표에서 확인할 수 있습니다.

7

이러한 값이 프레임에 나타나면 데이터가 특별하게 처리됩니다. – 예약된 바이트 앞에 이스케이프 바이트 0x7D를 삽입합니다. – 해당 예약된 바이트의 비트 5를 반전합니다.

다음은 이 알고리즘의 몇 가지 예입니다.

8

2.6. 종료 플래그 추가

마지막 단계는 프레임 끝에 종료 플래그 0x7E를 추가하는 것입니다. 그 후 데이터는 UART 포트로 전송될 수 있습니다.

3. 디프레이밍 과정

UART에서 데이터가 수신되면 이를 디코딩하기 위해 반대 단계를 수행하면 됩니다.

4. 참고자료


게시 시간: 2022년 2월 8일
WhatsApp 온라인 채팅!