저자:TorchIoTBootCamp
링크: https://zhuanlan.zhihu.com/p/339700391
출처: Quora
1. 서론
실리콘랩스는 지그비 게이트웨이 설계를 위한 호스트+NCP 솔루션을 제공했습니다. 이 아키텍처에서 호스트는 UART 또는 SPI 인터페이스를 통해 NCP와 통신할 수 있습니다. SPI보다 훨씬 간단하기 때문에 UART가 가장 일반적으로 사용됩니다.
Silicon Labs는 또한 호스트 프로그램에 대한 샘플 프로젝트도 제공했습니다.Z3게이트웨이호스트
샘플은 유닉스 계열 시스템에서 실행됩니다. 일부 고객은 RTOS에서 실행 가능한 호스트 샘플을 원할 수 있지만, 아쉽게도 현재 RTOS 기반 호스트 샘플은 제공되지 않습니다. 사용자는 RTOS 기반 호스트 프로그램을 직접 개발해야 합니다.
맞춤형 호스트 프로그램을 개발하기 전에 UART 게이트웨이 프로토콜을 이해하는 것이 중요합니다. UART 기반 NCP와 SPI 기반 NCP 모두 호스트는 EZSP 프로토콜을 사용하여 NCP와 통신합니다.이지스피의 약자입니다EmberZnet 직렬 프로토콜, 그리고 그것은 정의되어 있습니다UG100UART 기반 NCP의 경우, UART를 통해 EZSP 데이터를 안정적으로 전송하기 위해 하위 계층 프로토콜이 구현됩니다.금연 건강 증진 협회프로토콜, 약어비동기 직렬 호스트ASH에 대한 자세한 내용은 다음을 참조하세요.UG101그리고UG115.
EZSP와 ASH의 관계는 다음 다이어그램으로 설명할 수 있습니다.
EZSP와 ASH 프로토콜의 데이터 형식은 다음 다이어그램으로 설명할 수 있습니다.
이 페이지에서는 Zigbee 게이트웨이에서 자주 사용되는 UART 데이터와 몇 가지 주요 프레임을 프레이밍하는 과정을 소개합니다.
2. 프레이밍
일반적인 프레이밍 과정은 다음 차트를 통해 설명할 수 있습니다.
이 차트에서 데이터는 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장에 설명되어 있습니다.
SDK 업그레이드 시 이 형식이 변경될 수 있으니 주의하세요. 형식이 변경되면 새로운 버전 번호가 부여됩니다. 이 글 작성 시점의 최신 EZSP 버전은 8입니다(EmberZnet 6.8).
EZSP 프레임 형식은 버전마다 다를 수 있으므로 호스트와 NCP가 필수적으로 요구됩니다.해야 하다동일한 EZSP 버전으로 작업해야 합니다. 그렇지 않으면 예상대로 통신할 수 없습니다.
이를 위해 호스트와 NCP 간의 첫 번째 명령은 버전 명령이어야 합니다. 즉, 호스트는 다른 통신을 시작하기 전에 NCP의 EZSP 버전을 가져와야 합니다. EZSP 버전이 호스트 측의 EZSP 버전과 다르면 통신을 중단해야 합니다.
이것의 암묵적 요구 사항은 버전 명령의 형식이 다음과 같다는 것입니다.절대 바꾸지 마세요EZSP 버전의 명령 형식은 다음과 같습니다.
链接:https://zhuanlan.zhihu.com/p/339700391
来源:지乎
著작작权归작품작자所有。商业转载请联系작작자获得授权,不商业转载请注明处。
2.2. 데이터 무작위화
자세한 무작위화 과정은 UG101의 4.3절에 설명되어 있습니다. EZSP 프레임 전체가 무작위화됩니다. 무작위화는 EZSP 프레임과 의사난수 시퀀스를 배타적 논리합(exclusive-OR)하는 것입니다.
아래는 의사난수 시퀀스를 생성하는 알고리즘입니다.
- 랜드0 = 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일