Aŭtoro:TorchIoTBootCamp
Ligilo: https://zhuanlan.zhihu.com/p/339700391
De:Quora
1. Enkonduko
Silicon Labs proponis solvon "host+NCP" por la dezajno de Zigbee-pordegoj. En ĉi tiu arkitekturo, la gastiganto povas komuniki kun la NCP per UART aŭ SPI-interfaco. Plej ofte, UART estas uzata ĉar ĝi estas multe pli simpla ol SPI.
Silicon Labs ankaŭ provizis specimenan projekton por la gastiga programo, kiu estas la specimenoZ3GatewayHost
La ekzemplaro funkcias sur Unikso-simila sistemo. Kelkaj klientoj eble volos ekzemplan gastigan programon, kiu povas funkcii sur RTOS, sed bedaŭrinde, nuntempe ne ekzistas ekzempla gastiga programo bazita sur RTOS. Uzantoj bezonas disvolvi sian propran gastigan programon bazitan sur RTOS.
Gravas kompreni la UART-pordegan protokolon antaŭ ol disvolvi personigitan gastigan programon. Kaj por UART-bazita NCP kaj SPI-bazita NCP, la gastiganto uzas la EZSP-protokolon por komuniki kun la NCP.EZSPestas mallongigo porEmberZnet Seria Protokolo, kaj ĝi estas difinita enUG100Por UART-bazita NCP, pli malalta tavola protokolo estas efektivigita por fidinde porti EZSP-datumojn super UART, tio estas laCINDROprotokolo, mallongigo porNesinkrona Seria GastigantoPor pliaj detaloj pri ASH, bonvolu rilati alUG101kajUG115.
La rilato inter EZSP kaj ASH povas esti ilustrita per la sekva diagramo:
La datenformato de la EZSP kaj la ASH-protokolo povas esti ilustrita per la sekva diagramo:
En ĉi tiu paĝo, ni prezentos la procezon de enkadrigo de la UART-datumoj kaj kelkajn ŝlosilkadrojn, kiuj estas ofte uzataj en Zigbee-enirejo.
2. Enkadrigo
La ĝenerala enkadriga procezo povas esti ilustrita per la jena diagramo:
En ĉi tiu diagramo, la datumoj signifas la EZSP-kadron. Ĝenerale, la enkadrigaj procezoj estas: |Neniu|Paŝo|Referenco|
|:-|:-|:-|
|1|Plenigu la EZSP-kadron|UG100|
|2|Datuma Hazardigo|Sekcio 4.3 de UG101|
|3|Aldonu la Kontrolbajtojn|Ĉapitro 2 kaj Ĉapitro 3 de UG101|
|4|Kalkulu la CRC|Sekcio 2.3 de UG101|
|5|Bajta Plenigo|Sekcio 4.2 de UG101|
|6|Aldonu la Finflagon|Sekcio 2.4 de UG101|
2.1. Plenigu la EZSP-kadron
La EZSP-kadroformato estas ilustrita en ĉapitro 3 de UG100.
Atentu, ke ĉi tiu formato povas ŝanĝiĝi kiam la SDK ĝisdatigiĝas. Kiam la formato ŝanĝiĝos, ni donos al ĝi novan versinumeron. La plej nova EZSP-versinumero estas 8 kiam ĉi tiu artikolo estas verkita (EmberZnet 6.8).
Ĉar la EZSP-kadroformato povas diferenci inter malsamaj versioj, estas deviga postulo, ke la gastiganto kaj NCPDEVASfunkcias kun la sama EZSP-versio. Alie, ili ne povas komuniki kiel atendate.
Por atingi tion, la unua komando inter la gastiganto kaj la NCP devas esti la versio-komando. Alivorte, la gastiganto devas akiri la EZSP-version de la NCP antaŭ iu ajn alia komunikado. Se la EZSP-versio diferencas de la EZSP-versio de la gastiga flanko, la komunikado devas esti interrompita.
La implica postulo malantaŭ ĉi tio estas, ke la formato de la versio-komando povasNENIAM ŜANĜIĜULa formato de la komandversio de EZSP estas kiel sube:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明倂倂
2.2. Hazardigo de Datumoj
La detala hazardiga procezo estas priskribita en sekcio 4.3 de UG101. La tuta EZSP-kadro estos hazardita. La hazardigo estas per ekskluziva-AŬ la EZSP-kadro kaj pseŭdohazarda sekvenco.
Jen la algoritmo por generi la pseŭdohazardan sekvencon.
- rando0 = 0×42
- se bito 0 de randi estas 0, randi+1 = randi >> 1
- se bito 0 de randi estas 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Aldonu la Kontrolan Bajton
La kontrolbajto estas unu-bajta datumo, kaj devus esti aldonita al la komenco de la kadro. La formato estas ilustrita per la suba tabelo:
Entute, ekzistas 6 specoj de kontrolbajtoj. La unuaj tri estas uzataj por komunaj kadroj kun EZSP-datumoj, inkluzive de DATA, ACK kaj NAK. La lastaj tri estas uzataj sen komunaj EZSP-datumoj, inkluzive de RST, RSTACK kaj ERROR.
La formato de RST, RSTACK kaj ERROR estas priskribita en sekcioj 3.1 ĝis 3.3.
2.4. Kalkulu la CRC-on
16-bita CRC estas kalkulata sur bajtoj de la kontrola bajto ĝis la fino de la datumoj. La norma CRCCCITT (g(x) = x16 + x12 + x5 + 1) estas inicialigita al 0xFFFF. La plej signifa bajto antaŭas la malplej signifan bajton (grand-endian reĝimo).
2.5. Bajta Plenigo
Kiel priskribite en sekcio 4.2 de UG101, ekzistas kelkaj rezervitaj bajtaj valoroj uzataj por specialaj celoj. Ĉi tiuj valoroj troveblas en la sekva tabelo:
Kiam ĉi tiuj valoroj aperas en la kadro, speciala traktado estos farita al la datumoj. – Enmetu la eskap-bajton 0x7D antaŭ la rezervita bajto – Inversu la biton 5 de tiu rezervita bajto
Jen kelkaj ekzemploj de ĉi tiu algoritmo:
2.6. Aldonu la Finflagon
La fina paŝo estas aldoni la finflagon 0x7E al la fino de la kadro. Post tio, la datumoj povas esti senditaj al la UART-pordo.
3. Malkadrigo-Procezo
Kiam datumoj estas ricevitaj de la UART, ni nur bezonas fari la inversajn paŝojn por deĉifri ilin.
4. Referencoj
Afiŝtempo: 8-a de februaro 2022