Autore: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Da: Quora
1. Introduzione
Silicon Labs hà offrittu una soluzione host + NCP per u disignu di u gateway Zigbee. In questa architettura, l'ospite pò cumunicà cù u NCP per l'interfaccia UART o SPI. U più cumunimenti, UART hè utilizatu perchè hè assai più simplice di SPI.
Silicon Labs hà ancu furnitu un prughjettu di mostra per u prugramma ospitante, chì hè u sampleZ3GatewayHost
. L'esempiu corre nantu à un sistema Unix-like. Certi clienti puderanu vulete una mostra d'ospiti chì pò eseguisce nantu à un RTOS, ma sfurtunatamenti, ùn ci hè micca un campione di host basatu in RTOS per u mumentu. L'utilizatori anu bisognu di sviluppà u so propiu prugramma d'ospiti basatu in RTOS.
Hè impurtante di capisce u protocolu di u gateway UART prima di sviluppà un prugramma d'ospite persunalizatu. Per u NCP basatu in UART è NCP basatu in SPI, l'ospite usa u protokollu EZSP per cumunicà cù u NCP.EZSPhè corta perProtocolu seriale EmberZnet, è hè definitu inUG100. Per u NCP basatu in UART, hè implementatu un protokollu di strata più bassa per trasportà dati EZSP in modu affidabile nantu à UART, questu hè uFRASSEprotocolu, cortu perHost seriale asincronu. Per più dettagli nantu à ASH, fate riferimentu àUG101èUG115.
A relazione trà EZSP è ASH pò esse illustrata da u schema seguente:
U furmatu di dati di l'EZSP è u protokollu ASH pò esse illustratu da u schema seguente:
In questa pagina, presenteremu u prucessu di framing i dati UART è alcuni frames chjave chì sò spessu usati in a porta Zigbee.
2. Inquadramentu
U prucessu di quadru generale pò esse illustratu da u graficu seguente:
In questa carta, i dati significanu u quadru EZSP. In generale, i prucessi di framing sò: |No|Step|Reference|
|:-|:-|:-|
|1|Fill the EZSP Frame|UG100|
|2|Data Randomization|Section 4.3 of UG101|
|3|Aghjunghje u Byte di cuntrollu|Chap2 è Chap3 di UG101|
|4|Calculate u CRC|Seczione 2.3 di UG101|
|5|Byte Stuffing|Seczione 4.2 di UG101|
|6|Aggiungi a Bandiera Finale|Seczione 2.4 di UG101|
2.1. Riempi u Frame EZSP
U furmatu di quadru EZSP hè illustratu in u Chap 3 di UG100.
Prestate attenzione chì stu formatu pò cambià quandu l'aghjurnamenti SDK. Quandu u furmatu cambia, daremu un novu numeru di versione. L'ultimu numaru di versione EZSP hè 8 quandu questu articulu hè scrittu (EmberZnet 6.8).
Siccomu u formatu di quadru EZSP pò esse diversu trà e diverse versioni, ci hè un requisitu obligatoriu chì l'ospite è NCPDEVEtravaglià cù a stessa versione EZSP. Altrimenti, ùn ponu micca cumunicà cum'è previstu.
Per ottene questu, u primu cumandamentu trà l'ospite è u NCP deve esse u cumandamentu di versione. In altri palori, l'ospite deve ritruvà a versione EZSP di u NCP prima di qualsiasi altra cumunicazione. Se a versione EZSP hè sfarente cù a versione EZSP di u latu di l'ospiti, a cumunicazione deve esse abortita.
U requisitu implicitu daretu à questu hè chì u formatu di u cumandamentu di a versione pòMAI CAMBIA. U furmatu di cumandamentu di a versione EZSP hè cum'è quì sottu:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明倂
2.2. Randomization di dati
U prucessu di randomizazione detallatu hè descrittu in a sezione 4.3 di UG101. Tuttu u quadru EZSP serà randomizatu. A randomizazione hè esclusiva-OR u quadru EZSP è una sequenza pseudo-aleatoriu.
Quì sottu hè l'algoritmu di generazione di a sequenza pseudo-aleatoriu.
- rand0 = 0×42
- se u bit 0 di randi hè 0, randi+1 = randi >> 1
- se u bit 0 di randi hè 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Aghjunghjite u Byte di cuntrollu
U byte di cuntrollu hè una data di un byte, è deve esse aghjuntu à u capu di u quadru. U furmatu hè illustratu cù a tabella sottu:
In tuttu, ci sò 6 tipi di byte di cuntrollu. I primi trè sò usati per frames cumuni cù dati EZSP, cumprese DATA, ACK è NAK. L'ultimi trè sò usati senza dati cumuni EZSP, cumprese RST, RSTACK è ERROR.
U formatu di RST, RSTACK è ERROR sò descritti in a sezione 3.1 à 3.3.
2.4. Calculate u CRC
Un CRC 16-bit hè calculatu nantu à byte da u byte di cuntrollu finu à a fine di e dati. U CRCCCITT standard (g(x) = x16 + x12 + x5 + 1) hè inizializatu à 0xFFFF. U byte più significativu precede u byte menu significativu (modu big-endian).
2.5. Byte Stuffing
Cum'è discrittu in a sezione 4.2 di UG101, ci sò qualchi valori di byte riservati utilizati per un scopu speciale. Questi valori ponu esse truvati in a tabella seguente:
Quandu questi valori appariscenu in u quadru, un trattamentu speciale serà fattu à i dati. - Inserite u byte di escape 0x7D davanti à u byte riservatu - Inverte u bit5 di quellu byte riservatu
Eccu alcuni esempi di stu algoritmu:
2.6. Aghjunghjite a Bandiera Finale
U passu finali hè di aghjunghje a bandiera finale 0x7E à a fine di u quadru. Dopu quì, i dati ponu esse mandati à u portu UART.
3. Prucessu De-framing
Quandu i dati sò ricevuti da l'UART, avemu solu bisognu di fà i passi inversi per decodificà.
4. Referenze
Tempu di Postu: Feb-08-2022