À propositu di Zigbee EZSP UART

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 campioneZ3GatewayHostL'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:

1

U furmatu di dati di l'EZSP è di u protocolu ASH pò esse illustratu da u diagrama seguente:

2

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:

3

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.

4

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:

5

E spiegazioni di u campu di parametru è u furmatu di a risposta di versione si ponu truvà in u Capitulu 4 di UG100. U campu di parametru hè a versione EZSP di u prugramma ospitante. Quandu questu articulu hè scrittu, hè 8.
7
作者:TorchIoTBootCamp
链接: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:

6

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:

7

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:

8

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
Chat in linea WhatsApp!