May-akda: TorchIoTBootCamp
Link:https://zhuanlan.zhihu.com/p/339700391
Mula sa:Quora
1. Panimula
Nag-alok ang Silicon Labs ng solusyong host+NCP para sa disenyo ng Zigbee gateway. Sa arkitekturang ito, maaaring makipag-ugnayan ang host sa NCP sa pamamagitan ng UART o SPI interface. Kadalasan, ginagamit ang UART dahil mas simple ito kaysa sa SPI.
Nagbigay din ang Silicon Labs ng isang halimbawang proyekto para sa programang pang-host, na siyang halimbawaZ3GatewayHostAng sample ay tumatakbo sa isang sistemang parang Unix. Ang ilang mga customer ay maaaring gusto ng isang host sample na maaaring tumakbo sa isang RTOS, ngunit sa kasamaang palad, walang RTOS based host sample sa ngayon. Kailangang bumuo ang mga user ng kanilang sariling host program batay sa RTOS.
Mahalagang maunawaan ang UART gateway protocol bago bumuo ng isang customized na host program. Para sa parehong UART based NCP at SPI based NCP, ginagamit ng host ang EZSP protocol upang makipag-ugnayan sa NCP.EZSPay pinaikling para saProtokol ng Serye ng EmberZnet, at ito ay tinukoy saUG100Para sa UART-based NCP, isang lower layer protocol ang ipinapatupad upang mapagkakatiwalaang magdala ng datos ng EZSP sa UART, iyon angABOprotokol, pinaikling bilangAsynchronous na Serial HostPara sa karagdagang detalye tungkol sa ASH, mangyaring sumangguni saUG101atUG115.
Ang ugnayan sa pagitan ng EZSP at ASH ay maaaring ilarawan sa pamamagitan ng sumusunod na dayagram:
Ang format ng datos ng EZSP at ng ASH protocol ay maaaring ilarawan sa pamamagitan ng sumusunod na diagram:
Sa pahinang ito, ipakikilala namin ang proseso ng pag-frame ng datos ng UART at ilang key frame na kadalasang ginagamit sa Zigbee gateway.
2. Pagbalangkas
Ang pangkalahatang proseso ng pagbuo ng balangkas ay maaaring ilarawan sa pamamagitan ng sumusunod na tsart:
Sa tsart na ito, ang datos ay nangangahulugang ang EZSP frame. Sa pangkalahatan, ang mga proseso ng pag-frame ay: |Walang|Hakbang|Sanggunian|
|:-|:-|:-|
|1|Punan ang EZSP Frame|UG100|
|2|Pag-randomize ng Datos|Seksyon 4.3 ng UG101|
|3|Idagdag ang Control Byte|Kabanata 2 at Kabanata 3 ng UG101|
|4|Kalkulahin ang CRC|Seksyon 2.3 ng UG101|
|5|Pagpupuno ng Byte|Seksyon 4.2 ng UG101|
|6|Idagdag ang End Flag|Seksyon 2.4 ng UG101|
2.1. Punan ang EZSP Frame
Ang format ng balangkas ng EZSP ay inilalarawan sa Kabanata 3 ng UG100.
Tandaan na maaaring magbago ang format na ito kapag nag-upgrade ang SDK. Kapag nagbago ang format, bibigyan namin ito ng bagong numero ng bersyon. Ang pinakabagong numero ng bersyon ng EZSP ay 8 noong isinulat ang artikulong ito (EmberZnet 6.8).
Dahil maaaring magkaiba ang format ng frame ng EZSP sa iba't ibang bersyon, mayroong mandatoryong kinakailangan na ang host at NCPDAPATgumagana gamit ang parehong bersyon ng EZSP. Kung hindi, hindi sila makakapag-usap gaya ng inaasahan.
Para makamit iyon, ang unang utos sa pagitan ng host at ng NCP ay dapat na ang utos na bersyon. Sa madaling salita, dapat kunin ng host ang bersyon ng EZSP ng NCP bago ang anumang iba pang komunikasyon. Kung ang bersyon ng EZSP ay naiiba sa bersyon ng EZSP ng panig ng host, dapat ihinto ang komunikasyon.
Ang ipinahihiwatig na kahingian sa likod nito ay ang format ng utos na bersyon ay maaaringHINDI MAGBABAGOAng format ng utos para sa bersyon ng EZSP ay katulad ng nasa ibaba:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Pag-randomize ng Datos
Ang detalyadong proseso ng randomization ay inilarawan sa seksyon 4.3 ng UG101. Ang buong frame ng EZSP ay isasagawa nang random. Ang randomization ay para eksklusibo-O ang frame ng EZSP at isang pseudo-random sequence.
Nasa ibaba ang algorithm ng pagbuo ng pseudo-random sequence.
- rand0 = 0×42
- kung ang bit 0 ng randi ay 0, randi+1 = randi >> 1
- kung ang bit 0 ng randi ay 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Idagdag ang Control Byte
Ang control byte ay isang one-byte na datos, at dapat idagdag sa head ng frame. Ang format ay inilalarawan gamit ang talahanayan sa ibaba:
Sa kabuuan, mayroong 6 na uri ng control byte. Ang unang tatlo ay ginagamit para sa mga karaniwang frame na may datos ng EZSP, kabilang ang DATA, ACK at NAK. Ang huling tatlo ay ginagamit nang walang karaniwang datos ng EZSP, kabilang ang RST, RSTACK at ERROR.
Ang format ng RST, RSTACK at ERROR ay inilalarawan sa seksyon 3.1 hanggang 3.3.
2.4. Kalkulahin ang CRC
Ang isang 16-bit na CRC ay kinakalkula sa mga byte mula sa control byte hanggang sa dulo ng data. Ang karaniwang CRCCCITT (g(x) = x16 + x12 + x5 + 1) ay ini-initialize sa 0xFFFF. Ang most significant byte ay nauuna sa least significant byte (big-endian mode).
2.5. Pagpupuno ng Byte
Gaya ng inilarawan sa seksyon 4.2 ng UG101, may ilang nakareserbang halaga ng byte na ginagamit para sa espesyal na layunin. Ang mga halagang ito ay matatagpuan sa sumusunod na talahanayan:
Kapag lumitaw ang mga halagang ito sa frame, isang espesyal na pagtrato ang gagawin sa data. – Ipasok ang escape byte na 0x7D sa harap ng nakareserbang byte – Baligtarin ang bit5 ng nakareserbang byte na iyon
Nasa ibaba ang ilang halimbawa ng algorithm na ito:
2.6. Idagdag ang End Flag
Ang huling hakbang ay ang pagdaragdag ng end flag na 0x7E sa dulo ng frame. Pagkatapos nito, maaaring ipadala ang data sa UART port.
3. Proseso ng Pag-alis ng Framing
Kapag natanggap ang datos mula sa UART, kailangan lang nating gawin ang mga kabaligtaran na hakbang upang i-decode ito.
4. Mga Sanggunian
Oras ng pag-post: Pebrero-08-2022








