May -akda : TorchiotBootCamp
Link : https: //zhuanlan.zhihu.com/p/339700391
Mula sa : Quora
1. Panimula
Nag -alok ang Silicon Labs ng isang host+NCP solution para sa disenyo ng gateway ng Zigbee. Sa arkitektura na ito, ang host ay maaaring makipag -usap sa NCP sa pamamagitan ng UART o SPI interface. Karamihan sa mga karaniwang, ang UART ay ginagamit dahil mas simple ito kaysa sa SPI.
Nagbigay din ang Silicon Labs ng isang sample na proyekto para sa host program, na siyang sampleZ3GATEWAYHOST
. Ang sample ay tumatakbo sa isang sistema na tulad ng UNIX. Ang ilang mga customer ay maaaring nais ng isang sample ng host na maaaring tumakbo sa isang RTO, ngunit sa kasamaang palad, walang sample na batay sa host ng RTOS para sa oras. Ang mga gumagamit ay kailangang bumuo ng kanilang sariling host program batay sa mga RTO.
Mahalagang maunawaan ang protocol ng gateway ng UART bago bumuo ng isang pasadyang programa ng host. Para sa parehong UART batay sa NCP at SPI batay sa NCP, ginagamit ng host ang protocol ng EZSP upang makipag -usap sa NCP.Ezspay maikli para saEmberznet serial protocol, at ito ay tinukoy saUG100. Para sa NCP na batay sa UART, ang isang mas mababang layer protocol ay ipinatupad upang dalhin ang data ng EZSP na maaasahan sa UART, iyon angAshProtocol, maikli para saAsynchronous serial host. Para sa higit pang mga detalye tungkol sa Ash, mangyaring sumangguni saUG101atUG115.
Ang ugnayan sa pagitan ng EZSP at abo ay maaaring mailarawan ng sumusunod na diagram:
Ang format ng data ng EZSP at ang protocol ng ASH ay maaaring mailarawan ng sumusunod na diagram:
Sa pahinang ito, ipakikilala namin ang proseso ng pag -frame ng data ng UART at ilang mga pangunahing frame na madalas na ginagamit sa gateway ng Zigbee.
2. Frameing
Ang pangkalahatang proseso ng pag -frame ay maaaring mailarawan ng sumusunod na tsart:
Sa tsart na ito, ang data ay nangangahulugang ang frame ng EZSP. 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 watawat | Seksyon 2.4 ng UG101 |
2.1. Punan ang frame ng EZSP
Ang format na frame ng EZSP ay inilalarawan sa Chap 3 ng UG100.
Bigyang -pansin na maaaring magbago ang format na ito kapag nag -upgrade ang SDK. Kapag nagbabago ang format, bibigyan namin ito ng isang bagong numero ng bersyon. Ang pinakabagong numero ng bersyon ng EZSP ay 8 kapag nakasulat ang artikulong ito (Emberznet 6.8).
Bilang ang format ng frame ng EZSP ay maaaring naiiba sa pagitan ng iba't ibang mga bersyon, mayroong isang mandatory na kinakailangan na ang host at NCPDapatMakipagtulungan sa parehong bersyon ng EZSP. Kung hindi, hindi sila maaaring makipag -usap tulad ng inaasahan.
Upang makamit iyon, ang unang utos sa pagitan ng host at ng NCP ay dapat na utos ng bersyon. Sa madaling salita, dapat i -retra 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 host side, dapat na ibagsak ang komunikasyon.
Ang implicit na kinakailangan sa likod nito ay ang format ng utos ng bersyon ay maaaringHuwag magbago. Ang format ng utos ng ezsp bersyon ay tulad ng sa ibaba:
链接 : https: //zhuanlan.zhihu.com/p/339700391
来源 : 知乎
著作权归作者所有。商业转载请联系作者获得授权 , 非商业转载请注明出处。
2.2. Data Randomization
Ang detalyadong proseso ng randomization ay inilarawan sa Seksyon 4.3 ng UG101. Ang buong frame ng EZSP ay magiging randomized. Ang randomization ay upang eksklusibo-o ang frame ng EZSP at isang pagkakasunud-sunod ng pseudo-random.
Nasa ibaba ang algorithm ng pagbuo ng pagkakasunud-sunod ng pseudo-random.
- Rand0 = 0 × 42
- Kung bit 0 ng randi ay 0, randi+1 = randi >> 1
- Kung bit 0 ng randi ay 1, randi+1 = (randi >> 1) ^ 0xb8
2.3. Idagdag ang control byte
Ang control byte ay isang data ng byte, at dapat na maidagdag sa ulo ng frame. Ang format ay inilalarawan sa talahanayan sa ibaba:
Ganap, mayroong 6 na uri ng control byte. Ang unang tatlo ay ginagamit para sa mga karaniwang frame na may data ng EZSP, 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 sinimulan sa 0xffff. Ang pinaka makabuluhang byte ay nauna sa hindi bababa sa makabuluhang byte (big-endian mode).
2.5. Byte stuffing
Tulad ng inilarawan sa Seksyon 4.2 ng UG101, mayroong ilang mga nakalaan na mga halaga ng byte na ginamit para sa espesyal na layunin. Ang mga halagang ito ay matatagpuan sa sumusunod na talahanayan:
Kapag lumilitaw ang mga halagang ito sa frame, ang isang espesyal na paggamot ay gagawin sa data. - Ipasok ang Escape Byte 0x7d sa harap ng nakalaan na byte - baligtarin ang bit5 ng nakalaan na byte na iyon
Nasa ibaba ang ilang mga halimbawa ng algorithm na ito:
2.6. Idagdag ang watawat ng dulo
Ang pangwakas na hakbang ay upang idagdag ang end watawat 0x7e sa dulo ng frame. Pagkatapos nito, ang data ay maaaring maipadala sa port ng UART.
3. Proseso ng De-Framing
Kapag natanggap ang data mula sa UART, kailangan lang nating gawin ang mga reverse na hakbang upang mabasa ito.
4. Mga Sanggunian
Oras ng Mag-post: Pebrero-08-2022