Szerző: TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Feladó: Quora
1. Bevezetés
A Silicon Labs host+NCP megoldást kínált a Zigbee átjáró tervezéséhez. Ebben az architektúrában a gazdagép UART vagy SPI interfészen keresztül kommunikálhat az NCP-vel. Leggyakrabban az UART-ot használják, mivel sokkal egyszerűbb, mint az SPI.
A Silicon Labs egy mintaprojektet is biztosított a befogadó programhoz, amely a mintaZ3GatewayHost
. A minta Unix-szerű rendszeren fut. Egyes ügyfelek olyan gazdagépmintát szeretnének, amely RTOS-on futhat, de sajnos egyelőre nincs RTOS-alapú gazdagépminta. A felhasználóknak ki kell fejleszteniük saját gazdaprogramjukat az RTOS alapján.
Fontos, hogy megértsük az UART átjáró protokollt, mielőtt egy testreszabott gazdagép programot fejlesztünk. Mind az UART alapú NCP, mind az SPI alapú NCP esetében a gazdagép az EZSP protokollt használja az NCP-vel való kommunikációhoz.EZSPrövidítéseEmberZnet soros protokoll, és ebben van meghatározvaUG100. Az UART alapú NCP esetében egy alacsonyabb rétegű protokoll van megvalósítva, hogy az EZSP adatokat megbízhatóan továbbítsa UART-on keresztül.HAMUprotokoll, rövidítéseAszinkron soros gazdagép. Az ASH-ról további részletekért lásd:UG101ésUG115.
Az EZSP és az ASH közötti összefüggést a következő diagram szemlélteti:
Az EZSP és az ASH protokoll adatformátumát a következő diagram szemlélteti:
Ezen az oldalon bemutatjuk az UART adatok keretezésének folyamatát és néhány kulcskeretet, amelyeket gyakran használnak a Zigbee átjáróban.
2. Keretezés
Az általános keretezési folyamatot a következő diagram szemlélteti:
Ezen a diagramon az adatok az EZSP keretet jelentik. Általában a keretezési folyamatok a következők: |Nem|Lépés|Referencia|
|:-|:-|:-|
|1|Töltse ki az EZSP keretet|UG100|
|2|Adatok véletlenszerűsítése|Az UG101 4.3. szakasza|
|3|Adja hozzá az UG101| vezérlőbájtját|Chap2 és Chap3|
|4|Számítsa ki a CRC-t|UG101| 2.3. szakasza
|5|Bájtos töltelék|Az UG101 4.2. szakasza|
|6|Adja hozzá a végjelzőt|UG101| 2.4. szakasza
2.1. Töltse ki az EZSP keretet
Az EZSP keretformátumot az UG100 3. fejezete szemlélteti.
Ügyeljen arra, hogy ez a formátum megváltozhat az SDK frissítésekor. Amikor a formátum megváltozik, új verziószámot adunk neki. A cikk írásakor a legújabb EZSP verziószám a 8 (EmberZnet 6.8).
Mivel az EZSP keretformátuma a különböző verziók között eltérő lehet, kötelező követelmény, hogy a gazdagép és az NCPKELLugyanazzal az EZSP verzióval dolgozzon. Ellenkező esetben nem tudnak a várt módon kommunikálni.
Ennek eléréséhez a gazdagép és az NCP közötti első parancsnak a verzió parancsnak kell lennie. Más szavakkal, a gazdagépnek minden más kommunikáció előtt le kell kérnie az NCP EZSP verzióját. Ha az EZSP verzió eltér a gazdagép oldal EZSP verziójától, a kommunikációt meg kell szakítani.
A mögöttes implicit követelmény az, hogy a version parancs formátuma képes legyenSOHA VÁLTOZZ. Az EZSP verzió parancsformátuma a következő:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注愘凂
2.2. Adatok véletlenszerűsítése
A részletes randomizációs folyamatot az UG101 4.3. szakasza írja le. A teljes EZSP keret véletlenszerű lesz. A véletlenszerűsítés az EZSP keret és egy pszeudo-véletlen szekvencia kizárólagos VAGY.
Alább látható az álvéletlen sorozat generálásának algoritmusa.
- rand0 = 0×42
- ha a randi 0. bitje 0, randi+1 = randi >> 1
- ha a randi 0. bitje 1, randi+1 = (randi >> 1) ^ 0xB8
2.3. Adja hozzá a Control Byte-ot
A vezérlő bájt egy bájtos adat, és hozzá kell adni a keret fejéhez. A formátumot az alábbi táblázat szemlélteti:
Összességében 6 féle vezérlő bájt létezik. Az első három az EZSP adatokkal rendelkező közös keretekhez használatos, beleértve a DATA, ACK és NAK-ot. Az utolsó három általános EZSP-adatok nélkül használatos, beleértve az RST-t, az RSTACK-ot és az ERROR-t.
Az RST, RSTACK és ERROR formátumát a 3.1-3.3 szakasz ismerteti.
2.4. Számítsa ki a CRC-t
A 16 bites CRC a vezérlő byte-tól az adatok végéig bájtokra számít. A szabványos CRCCCITT (g(x) = x16 + x12 + x5 + 1) 0xFFFF-re van inicializálva. A legjelentősebb bájt megelőzi a legkevésbé jelentős bájtot (big-endian mód).
2.5. Byte töltelék
Az UG101 4.2. szakaszában leírtak szerint van néhány lefoglalt bájtérték, amelyet speciális célra használnak. Ezek az értékek a következő táblázatban találhatók:
Amikor ezek az értékek megjelennek a keretben, speciális kezelést végeznek az adatokon. – Illessze be a 0x7D escape bájtot a lefoglalt bájt elé – Fordítsa meg a lefoglalt bájt 5. bitjét
Íme néhány példa erre az algoritmusra:
2.6. Adja hozzá a Vége zászlót
Az utolsó lépés a 0x7E végjelző hozzáadása a keret végéhez. Ezt követően az adatok az UART portra küldhetők.
3. Keretbontási folyamat
Amikor adat érkezik az UART-tól, csak a fordított lépéseket kell végrehajtanunk a dekódoláshoz.
4. Hivatkozások
Feladás időpontja: 2022-08-08