Autore:TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Da: Quora
1. Introduzione
Silicon Labs hà prupostu una suluzione host+NCP per a cuncepzione di gateway Zigbee. In questa architettura, l'host pò cumunicà cù l'NCP per via di l'interfaccia UART o SPI. Più cumunemente, UART hè adupratu perchè hè assai più simplice chè SPI.
Silicon Labs hà ancu furnitu un prughjettu di mostra per u prugramma ospitante, chì hè u campioneZ3GatewayHost
L'esempiu funziona nantu à un sistema di tipu Unix. Certi clienti puderanu vulè un esempiu d'ospite chì pò esse eseguitu nantu à un RTOS, ma sfurtunatamente, ùn ci hè micca un esempiu d'ospite basatu annantu à RTOS per u mumentu. L'utilizatori anu bisognu di sviluppà u so propiu prugramma d'ospite basatu annantu à RTOS.
Hè impurtante di capisce u protocolu di gateway UART prima di sviluppà un prugramma host persunalizatu. Sia per NCP basatu annantu à UART sia per NCP basatu annantu à SPI, l'host usa u protocolu EZSP per cumunicà cù NCP.EZSPhè abbreviazione diProtocolu seriale EmberZnet, è hè definitu inUG100Per NCP basatu annantu à UART, un protocolu di livellu inferiore hè implementatu per trasmette dati EZSP in modu affidabile annantu à UART, vale à dìCENEREprotocolu, abbreviazione diHost seriale asincronuPer più dettagli nantu à ASH, per piacè riferitevi àUG101èUG115.
A relazione trà EZSP è ASH pò esse illustrata da u diagrama seguente:
U furmatu di dati di l'EZSP è di u protocolu ASH pò esse illustratu da u diagrama seguente:
In questa pagina, presenteremu u prucessu di inquadramentu di i dati UART è alcuni keyframes chì sò spessu usati in u gateway Zigbee.
2. Inquadramentu
U prucessu generale di inquadramentu pò esse illustratu da u graficu seguente:
In questu graficu, i dati significanu u quadru EZSP. In generale, i prucessi di quadru sò: |Innò|Passu|Riferimentu|
|:-|:-|:-|
|1|Riempite u quadru EZSP|UG100|
|2|Randomizazione di i dati|Sezione 4.3 di UG101|
|3|Aghjunghje u Byte di Cuntrollu|Cap.2 è Cap.3 di UG101|
|4|Calculà u CRC|Sezzione 2.3 di UG101|
|5|Byte Stuffing|Sezione 4.2 di UG101|
|6|Aghjunghje a bandera di fine|Sezione 2.4 di UG101|
2.1. Riempite u quadru EZSP
U furmatu di u quadru EZSP hè illustratu in u Capitulu 3 di UG100.
Fate attenzione chì stu furmatu pò cambià quandu u SDK hè aggiornatu. Quandu u furmatu cambia, li daremu un novu numeru di versione. L'ultimu numeru di versione EZSP hè 8 quandu questu articulu hè scrittu (EmberZnet 6.8).
Siccomu u furmatu di u quadru EZSP pò esse differente trà e diverse versioni, ci hè un requisitu ubligatoriu chì l'ospite è l'NCPDEVEtravaglià cù a listessa versione EZSP. Altrimenti, ùn ponu micca cumunicà cum'è previstu.
Per ottene questu, u primu cumandamentu trà l'ospite è l'NCP deve esse u cumandamentu di versione. In altre parolle, l'ospite deve recuperà a versione EZSP di l'NCP prima di qualsiasi altra cumunicazione. Se a versione EZSP hè diversa da a versione EZSP di u latu ospite, a cumunicazione deve esse abortata.
L'esigenza implicita daretu à questu hè chì u furmatu di u cumandamentu di versione pòÙN CAMBIÀ MAIU furmatu di u cumandamentu di a versione EZSP hè cum'è quì sottu:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明倂
2.2. Randomizazione di i dati
U prucessu dettagliatu di randomizazione hè discrittu in a sezione 4.3 di UG101. Tuttu u quadru EZSP serà randomizatu. A randomizazione hè fatta cù un OR esclusivu trà u quadru EZSP è una sequenza pseudo-aleatoria.
Quì sottu hè l'algoritmu di generazione di a sequenza pseudo-aleatoria.
- rand0 = 0×42
- sè u bit 0 di randi hè 0, randi+1 = randi >> 1
- sè u bit 0 di randi hè 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Aghjunghje u Byte di Cuntrollu
U byte di cuntrollu hè una data di un byte, è deve esse aghjuntu à l'intestazione di u quadru. U furmatu hè illustratu cù a tavula quì sottu:
In tutale, ci sò 6 tipi di byte di cuntrollu. I primi trè sò usati per i frames cumuni cù dati EZSP, cumpresi DATA, ACK è NAK. L'ultimi trè sò usati senza dati EZSP cumuni, cumpresi RST, RSTACK è ERROR.
U furmatu di RST, RSTACK è ERROR hè discrittu in e sezzioni 3.1 à 3.3.
2.4. Calcula u CRC
Un CRC di 16 bit hè calculatu annantu à i byte da u byte di cuntrollu finu à a fine di i dati. U CRCCCITT standard (g(x) = x16 + x12 + x5 + 1) hè inizializatu à 0xFFFF. U byte u più significativu precede u byte u menu significativu (modalità big-endian).
2.5. Riempimentu di byte
Cum'è discrittu in a sezione 4.2 di UG101, ci sò certi valori di byte riservati aduprati per scopi particulari. Quessi valori si ponu truvà in a seguente tavula:
Quandu sti valori cumpariscenu in u quadru, un trattamentu particulare serà fattu à i dati. – Inserisce u byte di escape 0x7D davanti à u byte riservatu – Inverte u bit5 di quellu byte riservatu
Quì sottu sò alcuni esempi di questu algoritmu:
2.6. Aghjunghje a bandera di fine
L'ultimu passu hè di aghjunghje a bandera di fine 0x7E à a fine di u quadru. Dopu à quessa, i dati ponu esse mandati à u portu UART.
3. Prucessu di de-framing
Quandu i dati sò ricevuti da l'UART, basta à fà i passi inversi per decifralli.
4. Referenze
Data di publicazione: 8 di ferraghju 2022