Autors:TorchIoTBootCamp
Saite: https://zhuanlan.zhihu.com/p/339700391
No: Quora
1. Ievads
Silicon Labs ir piedāvājis resursdatora+NCP risinājumu Zigbee vārteju projektēšanai. Šajā arhitektūrā resursdators var sazināties ar NCP, izmantojot UART vai SPI saskarni. Visbiežāk tiek izmantots UART, jo tas ir daudz vienkāršāks nekā SPI.
Silicon Labs ir arī nodrošinājis parauga projektu resursdatora programmai, kas ir paraugsZ3GatewayHost
Paraugs darbojas Unix līdzīgā sistēmā. Daži klienti var vēlēties resursdatora paraugu, kas var darboties RTOS, taču diemžēl pagaidām nav pieejams uz RTOS balstīts resursdatora paraugs. Lietotājiem ir jāizstrādā sava resursdatora programma, kuras pamatā ir RTOS.
Pirms pielāgotas resursdatora programmas izstrādes ir svarīgi izprast UART vārtejas protokolu. Gan UART balstītā NCP, gan SPI balstītā NCP resursdators saziņai ar NCP izmanto EZSP protokolu.EZSPir saīsinājums noEmberZnet seriālais protokols, un tas ir definētsUG100UART bāzes NCP tiek ieviests zemāka slāņa protokols, lai droši pārsūtītu EZSP datus caur UART, tas irPelniprotokols, saīsinājums noAsinhronais seriālais resursdatorsLai iegūtu sīkāku informāciju par ASH, lūdzu, skatietUG101unUG115.
EZSP un ASH savstarpējo saistību var ilustrēt ar šādu diagrammu:
EZSP un ASH protokola datu formātu var ilustrēt ar šādu diagrammu:
Šajā lapā mēs iepazīstināsim ar UART datu kadrēšanas procesu un dažiem atslēgu kadriem, kas bieži tiek izmantoti Zigbee vārtejā.
2. Ierāmēšana
Vispārējo ierāmēšanas procesu var ilustrēt ar šādu diagrammu:
Šajā diagrammā dati apzīmē EZSP kadru. Kopumā kadrēšanas procesi ir šādi: |Nr.|Solis|Atsauce|
|:-|:-|:-|
|1|Aizpildiet EZSP rāmi|UG100|
|2|Datu nejaušināšana|UG101 4.3. sadaļa|
|3|Pievienojiet UG101 vadības baitu|2. un 3. nodaļu|
|4|Aprēķiniet CRC|UG101 2.3. sadaļa|
|5|Baitu pildīšana|UG101 4.2. sadaļa|
|6|Pievienot beigu karodziņu|UG101 2.4. sadaļa|
2.1. Aizpildiet EZSP rāmi
EZSP kadra formāts ir attēlots UG100 3. nodaļā.
Lūdzu, ņemiet vērā, ka šis formāts var mainīties, jauninot SDK. Kad formāts mainīsies, mēs tam piešķirsim jaunu versijas numuru. Šī raksta rakstīšanas laikā jaunākā EZSP versijas numurs ir 8 (EmberZnet 6.8).
Tā kā EZSP kadra formāts dažādās versijās var atšķirties, pastāv obligāta prasība, lai resursdators un NCPOBLIGĀTIdarbojas ar to pašu EZSP versiju. Pretējā gadījumā tie nevar sazināties, kā paredzēts.
Lai to panāktu, pirmajai komandai starp resursdatoru un NCP ir jābūt versijas komandai. Citiem vārdiem sakot, resursdatoram pirms jebkādas citas saziņas ir jāiegūst NCP EZSP versija. Ja EZSP versija atšķiras no resursdatora puses EZSP versijas, saziņa ir jāpārtrauc.
Netiešā prasība, kas ir šīs prasības pamatā, ir tāda, lai versijas komandas formāts varētu būtNEKAD NEMAINIESEZSP versijas komandas formāts ir šāds:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注愘凂
2.2. Datu nejaušināšana
Detalizēts nejaušināšanas process ir aprakstīts UG101 4.3. sadaļā. Viss EZSP kadrs tiks nejaušināts. Nejaušināšana notiek, izslēdzot VAI EZSP kadru un pseidonejaušu secību.
Zemāk ir parādīts pseido-nejaušas secības ģenerēšanas algoritms.
- rand0 = 0 × 42
- ja randi 0. bits ir 0, tad randi+1 = randi >> 1
- Ja randi 0. bits ir 1, tad randi+1 = (randi >> 1) ^ 0xB8
2.3. Pievienojiet vadības baitu
Vadības baits ir viena baita dati, un tas jāpievieno kadra sākumam. Formāts ir ilustrēts tabulā zemāk:
Kopumā ir 6 vadības baitu veidi. Pirmie trīs tiek izmantoti kopīgiem kadriem ar EZSP datiem, tostarp DATA, ACK un NAK. Pēdējie trīs tiek izmantoti bez kopīgiem EZSP datiem, tostarp RST, RSTACK un ERROR.
RST, RSTACK un ERROR formāts ir aprakstīts 3.1.–3.3. sadaļā.
2.4. Aprēķiniet CRC
16 bitu CRC tiek aprēķināts baitiem no vadības baita līdz datu beigām. Standarta CRCCCITT (g(x) = x16 + x12 + x5 + 1) tiek inicializēts ar 0xFFFF. Nozīmīgākais baits atrodas pirms mazāk nozīmīgā baita (big-endian režīms).
2.5. Baitu pildīšana
Kā aprakstīts UG101 4.2. sadaļā, īpašiem mērķiem tiek izmantotas dažas rezervētas baitu vērtības. Šīs vērtības var atrast šajā tabulā:
Kad šīs vērtības parādās kadrā, datiem tiks piemērota īpaša apstrāde. – Ievietojiet atsoļa baitu 0x7D rezervētā baita priekšā. – Apgrieziet šī rezervētā baita 5. bitu.
Zemāk ir daži šī algoritma piemēri:
2.6. Pievienojiet beigu karodziņu
Pēdējais solis ir pievienot kadra beigām beigu karodziņu 0x7E. Pēc tam datus var nosūtīt uz UART portu.
3. Atbrīvošanas process
Kad dati tiek saņemti no UART, mums tikai jāveic apgrieztās darbības, lai tos atšifrētu.
4. Atsauces
Publicēšanas laiks: 2022. gada 8. februāris