Autor : Torchiotbootcamp
Link : https: //zhuanlan.zhihu.com/p/339700391
De la : Quora
1. Introducere
Silicon Labs a oferit o soluție gazdă+NCP pentru designul Zigbee Gateway. În această arhitectură, gazda poate comunica cu NCP prin interfața UART sau SPI. Cel mai frecvent, UART este utilizat, deoarece este mult mai simplu decât SPI.
Silicon Labs a furnizat, de asemenea, un proiect de probă pentru programul gazdă, care este eșantionulZ3gatewayhost
. Eșantionul rulează pe un sistem asemănător UNIX. Unii clienți pot dori un eșantion de gazdă care să poată rula pe un RTO, dar, din păcate, nu există niciun eșantion de gazdă bazat pe RTOS deocamdată. Utilizatorii trebuie să -și dezvolte propriul program gazdă bazat pe RTO.
Este important să înțelegeți protocolul UART Gateway înainte de a dezvolta un program gazdă personalizat. Atât pentru NCP bazat pe UART, cât și pentru NCP bazat pe SPI, gazda folosește protocolul EZSP pentru a comunica cu NCP.EZSPeste scurt pentruProtocolul serial Emberznet, și este definit înUG100. Pentru NCP bazat pe UART, un protocol cu strat inferior este implementat pentru a transporta în mod fiabil datele EZSP peste UART, acesta esteFRASINProtocol, scurt pentruGazdă în serie asincronă. Pentru mai multe detalii despre cenușă, vă rugăm să consultațiUG101şiUG115.
Relația dintre EZSP și cenușă poate fi ilustrată prin diagrama următoare:
Formatul de date al EZSP și protocolul de cenușă poate fi ilustrat prin următoarea diagramă:
În această pagină, vom introduce procesul de încadrare a datelor UART și a unor cadre cheie care sunt frecvent utilizate în Zigbee Gateway.
2. Frame
Procesul de cadru general poate fi ilustrat prin următoarea diagramă:
În acest grafic, datele înseamnă cadrul EZSP. În general, procesele de încadrare sunt: | Nu | Step | Referință |
|:-|:-|:-|
| 1 | Completați cadrul EZSP | UG100 |
| 2 | Randomizarea datelor | Secțiunea 4.3 din UG101 |
| 3 | Adăugați octetul de control | Chap2 și Chap3 din UG101 |
| 4 | Calculați CRC | Secțiunea 2.3 din UG101 |
| 5 | Byte Humping | Secțiunea 4.2 din UG101 |
| 6 | Adăugați steagul final | Secțiunea 2.4 din UG101 |
2.1. Completați cadrul EZSP
Formatul cadrului EZSP este ilustrat în capitolul 3 din UG100.
Acordați atenție că acest format se poate schimba atunci când actualizările SDK. Când formatul se va schimba, îi vom oferi un nou număr de versiune. Cel mai recent număr de versiune EZSP este 8 când este scris acest articol (Emberznet 6.8).
Deoarece formatul cadrului EZSP poate fi diferit între diferite versiuni, există o cerință obligatorie ca gazda și NCPNECESITATELucrați cu aceeași versiune EZSP. În caz contrar, nu pot comunica așa cum se așteaptă.
Pentru a realiza acest lucru, prima comandă între gazdă și NCP trebuie să fie comanda versiunea. Cu alte cuvinte, gazda trebuie să retragă versiunea EZSP a NCP înainte de orice altă comunicare. Dacă versiunea EZSP este diferită de versiunea EZSP a părții gazdă, comunicarea trebuie să fie avortată.
Cerința implicită din spatele acestui lucru este că formatul comenzii versiunii poateNu schimbați niciodată. Formatul de comandă a versiunii EZSP este ca mai jos:
链接 : https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。
2.2. Randomizarea datelor
Procesul de randomizare detaliat este descris în secțiunea 4.3 din UG101. Întregul cadru EZSP va fi randomizat. Randomizarea este la exclusiv sau cadrul EZSP și o secvență pseudo-aleatorie.
Mai jos este algoritmul de a genera secvența pseudo-aleatorie.
- Rand0 = 0 × 42
- Dacă bitul 0 al Randi este 0, Randi+1 = Randi >> 1
- Dacă bitul 0 al Randi este 1, Randi+1 = (Randi >> 1) ^ 0xb8
2.3. Adăugați octetul de control
Byte -ul de control este un singur date de octeți și ar trebui adăugat la capul cadrului. Formatul este ilustrat cu tabelul de mai jos:
În total, există 6 tipuri de octeți de control. Primele trei sunt utilizate pentru cadre comune cu date EZSP, inclusiv date, ACK și Nak. Ultimele trei sunt utilizate fără date EZSP obișnuite, inclusiv RST, RSTACK și EROARE.
Formatul RST, RSTACK și EROARE sunt descrise în secțiunea 3.1 până la 3.3.
2.4. Calculați CRC
Un CRC pe 16 biți este calculat pe octeți de la octetul de control până la sfârșitul datelor. Crcccitt standard (g (x) = x16 + x12 + x5 + 1) este inițializat la 0xffff. Cel mai semnificativ octet precede cel mai puțin octet (modul mare-endian).
2.5. Byte umplutură
Așa cum este descris în secțiunea 4.2 din UG101, există unele valori de octeți rezervate utilizate în scop special. Aceste valori pot fi găsite în următorul tabel:
Când aceste valori apar în cadru, se va face un tratament special la date. - Introduceți octetul de evacuare 0x7d în fața octetului rezervat - inversați bit5 al octetului rezervat
Mai jos sunt câteva exemple ale acestui algoritm:
2.6. Adăugați steagul final
Ultimul pas este să adăugați steagul final 0x7e la sfârșitul cadrului. După aceea, datele pot fi trimise în portul UART.
3. Procesul de încadrare
Când datele sunt primite de la UART, trebuie doar să facem pașii invers pentru a le decoda.
4. Referințe
Timpul post: februarie-08-2022