저자: TorchIoTBootCamp
링크: https://zhuanlan.zhihu.com/p/339700391
출처: Quora
1. 서론
Silicon Labs는 Zigbee 게이트웨이 설계를 위한 호스트+NCP 솔루션을 제공합니다. 이 아키텍처에서 호스트는 UART 또는 SPI 인터페이스를 통해 NCP와 통신할 수 있습니다. 일반적으로 UART가 SPI보다 훨씬 간단하기 때문에 많이 사용됩니다.
Silicon Labs는 호스트 프로그램을 위한 샘플 프로젝트도 제공했습니다.Z3게이트웨이호스트이 샘플은 유닉스 계열 시스템에서 실행됩니다. 일부 고객은 RTOS에서 실행되는 호스트 샘플을 원할 수 있지만, 안타깝게도 현재로서는 RTOS 기반 호스트 샘플은 제공되지 않습니다. 사용자는 RTOS 기반의 호스트 프로그램을 직접 개발해야 합니다.
맞춤형 호스트 프로그램을 개발하기 전에 UART 게이트웨이 프로토콜을 이해하는 것이 중요합니다. UART 기반 NCP와 SPI 기반 NCP 모두에서 호스트는 EZSP 프로토콜을 사용하여 NCP와 통신합니다.EZSP줄임말입니다EmberZnet 직렬 프로토콜그리고 그것은 다음과 같이 정의됩니다.UG100UART 기반 NCP의 경우, EZSP 데이터를 UART를 통해 안정적으로 전송하기 위해 하위 계층 프로토콜이 구현됩니다.금연 건강 증진 협회프로토콜, 줄여서비동기 직렬 호스트ASH에 대한 자세한 내용은 다음을 참조하십시오.UG101그리고UG115.
EZSP와 ASH의 관계는 다음 그림으로 나타낼 수 있습니다.
EZSP 및 ASH 프로토콜의 데이터 형식은 다음 다이어그램으로 나타낼 수 있습니다.
이 페이지에서는 UART 데이터 프레임 구성 과정과 Zigbee 게이트웨이에서 자주 사용되는 몇 가지 주요 프레임에 대해 소개합니다.
2. 프레임
일반적인 프레임 제작 과정은 다음 차트를 통해 설명할 수 있습니다.
이 차트에서 데이터는 EZSP 프레임을 의미합니다. 일반적으로 프레임 구성 과정은 다음과 같습니다: |없음|단계|참조|
|:-|:-|:-|
|1|EZSP 프레임을 채우세요|UG100|
|2|데이터 무작위화|UG101 4.3절|
|3|제어 바이트 추가|UG101 2장 및 3장|
|4|CRC 계산|UG101 2.3절|
|5|바이트 스터핑|UG101의 4.2절|
|6|종료 플래그 추가|UG101의 2.4절|
2.1. EZSP 프레임을 채우세요
EZSP 프레임 형식은 UG100의 3장에 설명되어 있습니다.
SDK 업그레이드 시 이 형식이 변경될 수 있으므로 주의하십시오. 형식이 변경되면 새로운 버전 번호를 부여할 예정입니다. 이 글을 작성하는 시점의 최신 EZSP 버전 번호는 8입니다(EmberZnet 6.8).
EZSP 프레임 형식은 버전마다 다를 수 있으므로 호스트와 NCP 간에 반드시 필요한 사항이 있습니다.해야 하다동일한 EZSP 버전을 사용해야 합니다. 그렇지 않으면 예상대로 통신할 수 없습니다.
이를 위해서는 호스트와 NCP 간의 첫 번째 명령은 버전 명령이어야 합니다. 즉, 호스트는 다른 통신을 시작하기 전에 NCP의 EZSP 버전을 가져와야 합니다. 호스트 측의 EZSP 버전과 NCP 측의 EZSP 버전이 다르면 통신을 중단해야 합니다.
이것에 내재된 요구 사항은 버전 명령의 형식이 다음과 같아야 한다는 것입니다.절대 변하지 마세요EZSP 버전 명령어 형식은 다음과 같습니다.
链接:https://zhuanlan.zhihu.com/p/339700391
来源:지乎
著작품权归작품작자所有。商业转载请联系작품작자获得授权,不商业转载请注明处。
2.2. 데이터 무작위화
자세한 무작위화 과정은 UG101의 4.3절에 설명되어 있습니다. 전체 EZSP 프레임이 무작위화됩니다. 무작위화는 EZSP 프레임과 의사 난수 시퀀스를 배타적 논리합(XOR)하는 방식으로 이루어집니다.
다음은 의사난수 시퀀스를 생성하는 알고리즘입니다.
- rand0 = 0×42
- randi의 0번째 비트가 0이면 randi+1 = randi >> 1
- randi의 비트 0이 1이면 randi+1 = (randi >> 1) ^ 0xB8
2.3. 제어 바이트 추가
제어 바이트는 1바이트 데이터이며 프레임의 시작 부분에 추가되어야 합니다. 형식은 아래 표에 나와 있습니다.
제어 바이트는 총 6가지 종류가 있습니다. 처음 세 가지는 DATA, ACK, NAK로 EZSP 데이터가 포함된 공통 프레임에 사용됩니다. 나머지 세 가지는 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절에 설명된 바와 같이, 특수한 목적으로 사용되는 몇 가지 예약된 바이트 값이 있습니다. 이러한 값은 다음 표에서 확인할 수 있습니다.
프레임에 이러한 값이 나타나면 데이터에 특별한 처리가 수행됩니다. – 예약된 바이트 앞에 이스케이프 바이트 0x7D를 삽입합니다. – 예약된 바이트의 5번째 비트를 반전시킵니다.
다음은 이 알고리즘의 몇 가지 예입니다.
2.6. 종료 플래그 추가
마지막 단계는 프레임 끝에 종료 플래그 0x7E를 추가하는 것입니다. 그 후 데이터를 UART 포트로 전송할 수 있습니다.
3. 탈프레임화 과정
UART에서 데이터가 수신되면 역순으로 디코딩하면 됩니다.
4. 참고문헌
게시 시간: 2022년 2월 8일








