May-akda:TorchIoTBootCamp
Link:https://zhuanlan.zhihu.com/p/339700391
Mula sa: Quora
1. Panimula
Nag-alok ang Silicon Labs ng host+NCP solution para sa disenyo ng Zigbee gateway. Sa ganitong arkitektura, maaaring makipag-ugnayan ang host sa NCP sa pamamagitan ng interface ng UART o SPI. Kadalasan, ginagamit ang UART dahil mas simple ito kaysa sa SPI.
Nagbigay din ang Silicon Labs ng sample na proyekto para sa host program, na siyang sampleZ3GatewayHost
. Ang sample ay tumatakbo sa isang Unix-like system. Maaaring gusto ng ilang customer ang isang host sample na maaaring tumakbo sa isang RTOS, ngunit sa kasamaang-palad, walang RTOS based host sample sa ngayon. Ang mga gumagamit ay kailangang bumuo ng kanilang sariling host program batay sa RTOS.
Mahalagang maunawaan ang UART gateway protocol bago bumuo ng customized na host program. Para sa parehong UART based NCP at SPI based NCP, ginagamit ng host ang EZSP protocol para makipag-ugnayan sa NCP.EZSPay maikli para saEmberZnet Serial Protocol, at ito ay tinukoy saUG100. Para sa NCP na nakabatay sa UART, ipinapatupad ang isang mas mababang layer na protocol upang mapagkakatiwalaan ang data ng EZSP sa UART, iyon angABOprotocol, maikli para saAsynchronous na Serial Host. Para sa higit pang mga detalye tungkol sa ASH, mangyaring sumangguni saUG101atUG115.
Ang kaugnayan sa pagitan ng EZSP at ASH ay maaaring ilarawan ng sumusunod na diagram:
Ang format ng data ng EZSP at ang ASH protocol ay maaaring ilarawan ng sumusunod na diagram:
Sa page na ito, ipapakilala namin ang proseso ng pag-frame ng data ng UART at ilang key frame na kadalasang ginagamit sa Zigbee gateway.
2. Pag-frame
Ang pangkalahatang proseso ng pag-frame ay maaaring ilarawan ng sumusunod na tsart:
Sa chart na ito, ang data ay nangangahulugan ng EZSP frame. Sa pangkalahatan, ang mga proseso ng pag-frame ay: |Hindi|Hakbang|Sanggunian|
|:-|:-|:-|
|1|Punan ang EZSP Frame|UG100|
|2|Data Randomization|Seksyon 4.3 ng UG101|
|3|Idagdag ang Control Byte|Chap2 at Chap3 ng UG101|
|4|Kalkulahin ang CRC|Seksyon 2.3 ng UG101|
|5|Byte Stuffing|Seksyon 4.2 ng UG101|
|6|Idagdag ang End Flag|Seksyon 2.4 ng UG101|
2.1. Punan ang EZSP Frame
Ang EZSP frame format ay inilalarawan sa Chap 3 ng UG100.
Bigyang-pansin 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 kapag isinulat ang artikulong ito (EmberZnet 6.8).
Dahil maaaring magkaiba ang format ng EZSP frame sa pagitan ng iba't ibang bersyon, mayroong ipinag-uutos na kinakailangan na ang host at NCPDAPATgumana sa parehong bersyon ng EZSP. Kung hindi, hindi sila makakapag-usap gaya ng inaasahan.
Upang makamit iyon, ang unang utos sa pagitan ng host at ng NCP ay dapat na ang utos ng bersyon. Sa madaling salita, dapat kunin ng host ang EZSP na bersyon ng NCP bago ang anumang iba pang komunikasyon. Kung ang bersyon ng EZSP ay naiiba sa bersyon ng EZSP ng panig ng host, dapat na ihinto ang komunikasyon.
Ang implicit na kinakailangan sa likod nito ay ang format ng version command ay maaariHINDI MAGBABAGO. Ang format ng command na bersyon ng EZSP ay tulad sa ibaba:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.2. Randomization ng Data
Ang detalyadong proseso ng randomization ay inilarawan sa seksyon 4.3 ng UG101. Ang buong frame ng EZSP ay magiging randomized. Ang randomization ay sa eksklusibo-O ang EZSP frame at isang pseudo-random na pagkakasunud-sunod.
Nasa ibaba ang algorithm ng pagbuo ng pseudo-random na 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 data, at dapat idagdag sa head ng frame. Ang format ay inilalarawan sa talahanayan sa ibaba:
Sa kabuuan, mayroong 6 na uri ng control byte. Ang unang tatlo ay ginagamit para sa mga karaniwang frame na may EZSP data, kabilang ang DATA, ACK at NAK. Ang huling tatlo ay ginagamit nang walang karaniwang data ng EZSP, kabilang ang RST, RSTACK at ERROR.
Ang format ng RST, RSTACK at ERROR ay inilarawan 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 katapusan ng data. Ang karaniwang CRCCCITT (g(x) = x16 + x12 + x5 + 1) ay sinisimulan sa 0xFFFF. Ang pinaka makabuluhang byte ay nauuna sa hindi bababa sa makabuluhang byte (big-endian mode).
2.5. Byte Stuffing
Gaya ng inilarawan sa seksyon 4.2 ng UG101, mayroong ilang nakareserbang byte na halaga 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 paggamot ang gagawin sa data. – Ipasok ang escape byte 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 idagdag ang end flag na 0x7E sa dulo ng frame. Pagkatapos nito, ang data ay maaaring ipadala sa UART port.
3. De-framing na Proseso
Kapag natanggap ang data mula sa UART, kailangan lang nating gawin ang mga reverse na hakbang para ma-decode ito.
4. Mga Sanggunian
Oras ng post: Peb-08-2022