À propositu di Zigbee EZSP UART

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:

1

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

2

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:

3

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.

4

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:

5

L'esplicazioni di u campu di paràmetru è u formatu di a risposta di a versione ponu esse truvati in Chap 4 di UG100. U campu di paràmetru hè a versione EZSP di u prugramma òspite. Quandu stu articulu hè scrittu, hè 8.
7
作者:TorchIoTBootCamp
链接: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:

6

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:

7

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:

8

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