Autori: TorchIoTBootCamp
Link:https://zhuanlan.zhihu.com/p/339700391
Nga:Quora
1. Hyrje
Silicon Labs ka ofruar një zgjidhje host+NCP për dizajnin e portës Zigbee. Në këtë arkitekturë, hosti mund të komunikojë me NCP përmes ndërfaqes UART ose SPI. Më së shpeshti, UART përdoret pasi është shumë më i thjeshtë se SPI.
Silicon Labs ka ofruar gjithashtu një projekt shembull për programin pritës, i cili është shembulliZ3GatewayHost
. Mostra funksionon në një sistem të ngjashëm me Unix. Disa klientë mund të dëshirojnë një mostër pritës që mund të funksionojë në një RTOS, por për fat të keq, nuk ka asnjë mostër të hostit të bazuar në RTOS për momentin. Përdoruesit duhet të zhvillojnë programin e tyre pritës të bazuar në RTOS.
Është e rëndësishme të kuptoni protokollin e portës UART përpara se të zhvilloni një program pritës të personalizuar. Si për NCP me bazë UART ashtu edhe për NCP të bazuar në SPI, hosti përdor protokollin EZSP për të komunikuar me NCP.EZSPështë shkurt përProtokolli Serial EmberZnet, dhe është përcaktuar nëUG100. Për NCP të bazuar në UART, zbatohet një protokoll i shtresës së ulët për të bartur të dhënat EZSP në mënyrë të besueshme mbi UART, kjo ështëHIRIprotokoll, shkurt përPritësi serial asinkron. Për më shumë detaje rreth ASH, ju lutemi referojuniUG101dheUG115.
Lidhja midis EZSP dhe ASH mund të ilustrohet nga diagrami i mëposhtëm:
Formati i të dhënave të EZSP dhe protokollit ASH mund të ilustrohet nga diagrami i mëposhtëm:
Në këtë faqe, ne do të prezantojmë procesin e inkuadrimit të të dhënave UART dhe disa korniza kyçe që përdoren shpesh në portën Zigbee.
2. Inkuadrim
Procesi i përgjithshëm i kornizës mund të ilustrohet nga grafiku i mëposhtëm:
Në këtë grafik, të dhënat nënkuptojnë kornizën EZSP. Në përgjithësi, proceset e inkuadrimit janë: |Jo|Hapi|Referenca|
|:-|:-|:-|
|1|Plotësoni kornizën EZSP|UG100|
|2|Randomizimi i të dhënave|Seksioni 4.3 i UG101|
|3|Shto Bajtin e Kontrollit|Kapitullin2 dhe Kapitullin3 të UG101|
|4|Llogaritni CRC|Seksioni 2.3 i UG101|
|5|Bajti Mbushje|Seksioni 4.2 i UG101|
|6|Shto flamurin fundor|Seksionin 2.4 të UG101|
2.1. Plotësoni kornizën EZSP
Formati i kornizës EZSP është ilustruar në Kapitullin 3 të UG100.
Kushtojini vëmendje që ky format mund të ndryshojë kur SDK-ja përmirësohet. Kur të ndryshojë formati, ne do t'i japim një numër të ri versioni. Numri më i fundit i versionit EZSP është 8 kur shkruhet ky artikull (EmberZnet 6.8).
Meqenëse formati i kornizës EZSP mund të jetë i ndryshëm midis versioneve të ndryshme, ekziston një kërkesë e detyrueshme që hosti dhe NCPDUHETpunoni me të njëjtin version EZSP. Përndryshe, ata nuk mund të komunikojnë siç pritej.
Për ta arritur këtë, komanda e parë midis hostit dhe NCP duhet të jetë komanda e versionit. Me fjalë të tjera, hosti duhet të marrë versionin EZSP të NCP përpara çdo komunikimi tjetër. Nëse versioni EZSP është i ndryshëm me versionin EZSP të anës së hostit, komunikimi duhet të ndërpritet.
Kërkesa e nënkuptuar pas kësaj është që formati i komandës version mundMOS NDRYSHO KURRË. Formati i komandave të versionit EZSP është si më poshtë:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有
2.2. Randomizimi i të dhënave
Procesi i detajuar i rastësisë përshkruhet në seksionin 4.3 të UG101. E gjithë korniza EZSP do të randomizohet. Rastësia është ekskluzive - OSE kuadri EZSP dhe një sekuencë pseudo-rastësore.
Më poshtë është algoritmi i gjenerimit të sekuencës pseudo të rastësishme.
- rand0 = 0×42
- nëse biti 0 i randi është 0, randi+1 = randi >> 1
- nëse biti 0 i randi është 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Shtoni bajtin e kontrollit
Bajti i kontrollit është një e dhënë një bajt dhe duhet të shtohet në kokën e kornizës. Formati është ilustruar me tabelën e mëposhtme:
Në total, ekzistojnë 6 lloje të bajteve të kontrollit. Tre të parat përdoren për korniza të zakonshme me të dhëna EZSP, duke përfshirë DATA, ACK dhe NAK. Tre të fundit përdoren pa të dhëna të zakonshme EZSP, duke përfshirë RST, RSTACK dhe ERROR.
Formati i RST, RSTACK dhe ERROR përshkruhen në seksionet 3.1 deri në 3.3.
2.4. Llogaritni CRC
Një CRC 16-bitësh llogaritet në bajt nga bajt i kontrollit deri në fund të të dhënave. Standardi CRCCCITT (g(x) = x16 + x12 + x5 + 1) është inicializuar në 0xFFFF. Bajti më domethënës i paraprin bajtit më pak të rëndësishëm (modaliteti i madh-endian).
2.5. Mbushje me byte
Siç përshkruhet në seksionin 4.2 të UG101, ka disa vlera të rezervuara të bajtit të përdorura për qëllime të veçanta. Këto vlera mund të gjenden në tabelën e mëposhtme:
Kur këto vlera shfaqen në kornizë, do t'i bëhet një trajtim i veçantë të dhënave. – Fusni bajtin e ikjes 0x7D përpara bajtit të rezervuar – Kthejeni bitin 5 të atij bajtit të rezervuar
Më poshtë janë disa shembuj të këtij algoritmi:
2.6. Shto Flamurin Fund
Hapi i fundit është të shtoni flamurin fundor 0x7E në fund të kornizës. Pas kësaj, të dhënat mund të dërgohen në portin UART.
3. Procesi i de-inkuadrimit
Kur të dhënat merren nga UART, ne vetëm duhet të bëjmë hapat e kundërt për ta deshifruar atë.
4. Referencat
Koha e postimit: Shkurt-08-2022