Szerző:TorchIoTBootCamp
Link: https://zhuanlan.zhihu.com/p/339700391
Feladó: Quora
1. Bevezetés
A Silicon Labs egy host+NCP megoldást kínált Zigbee átjáró tervezéséhez. Ebben az architektúrában a host 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 gazdaprogramhoz, amely a mintaZ3GatewayHost
A példa egy Unix-szerű rendszeren fut. Egyes ügyfelek olyan hosztmintát szeretnének, amely RTOS-on is futtatható, de sajnos egyelőre nincs RTOS alapú hosztminta. A felhasználóknak kell fejleszteniük a saját RTOS alapú hosztprogramjukat.
Fontos megérteni az UART átjáró protokollt, mielőtt egyedi hoszt programot fejlesztenénk. Mind az UART alapú NCP, mind az SPI alapú NCP esetén a hoszt az EZSP protokollt használja az NCP-vel való kommunikációhoz.EZSPrövidítéseEmberZnet soros protokoll, és ez a következőben van definiálva:UG100Az UART alapú NCP esetében egy alsóbb rétegű protokollt valósítanak meg az EZSP adatok UART-on keresztüli megbízható átvitelére, ez aHAMUprotokoll, rövidenAszinkron soros állomásAz ASH-ról további részletekért kérjük, lásd:UG101ésUG115.
Az EZSP és az ASH közötti kapcsolatot a következő ábra szemlélteti:
Az EZSP és az ASH protokoll adatformátumát a következő ábra szemlélteti:
Ezen az oldalon bemutatjuk az UART adatok keretezésének folyamatát, valamint 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ő ábra szemlélteti:
Ebben a táblázatban az adat az EZSP keretet jelenti. Általánosságban a keretezési folyamatok a következők: |Szám|Lépés|Referencia|
|:-|:-|:-|:-|
|1|Töltsd meg az EZSP keretet|UG100|
|2|Adatrandomizálás|UG101 4.3. szakasza|
|3|Adja hozzá az UG101 vezérlőbájtját|2. és 3. fejezetét|
|4|Számítsa ki a CRC-t|Az UG101 2.3. szakasza|
|5|Bájttömés|UG101 4.2. szakasza|
|6|Add hozzá a zárójelzőt|UG101 2.4. szakasza|
2.1. Töltse ki az EZSP keretet
Az EZSP keretformátumot az UG100 3. fejezete szemlélteti.
Felhívjuk a figyelmet arra, hogy ez a formátum megváltozhat az SDK frissítése során. Amikor a formátum megváltozik, új verziószámot adunk neki. A legújabb EZSP verziószám a cikk írásakor a 8-as (EmberZnet 6.8).
Mivel az EZSP keretformátuma eltérő lehet a különböző verziók között, kötelező követelmény, hogy a gazdagép és az NCP is...KELLugyanazzal az EZSP verzióval működnek. Különben nem tudnak a várt módon kommunikálni.
Ennek eléréséhez az első parancsnak a gazdagép és az NCP között a verzióparancsnak kell lennie. Más szóval, 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 EZSP verziójától, a kommunikációt meg kell szakítani.
Az emögött implicit követelmény az, hogy a verzióparancs formátumaSOHA NE VÁLTOZZAz EZSP verzió parancsformátuma az alábbi:
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注愘凂
2.2. Adatok véletlenszerűsítése
A részletes véletlenszerűsítési folyamatot az UG101 4.3. szakasza ismerteti. A teljes EZSP keret véletlenszerűsítésre kerül. A véletlenszerűsítés az EZSP keret és egy pszeudo-véletlenszerű sorozat kizárásos VAGY műveletét jelenti.
Az alábbiakban a pszeudo-véletlenszerű sorozat generálásának algoritmusa látható.
- rand0 = 0 × 42
- Ha a randi 0. bitje 0, akkor randi+1 = randi >> 1
- Ha a randi 0. bitje 1, akkor randi+1 = (randi >> 1) ^ 0xB8
2.3. Vezérlőbájt hozzáadása
A vezérlőbájt egy egybájtos adat, és a keret fejlécéhez kell hozzáadni. A formátumot az alábbi táblázat szemlélteti:
Összesen 6 féle vezérlőbájt létezik. Az első hármat a közös EZSP adatokat tartalmazó keretekhez használjuk, beleértve a DATA, ACK és NAK bájtokat. Az utolsó hármat a közös EZSP adatok nélküli keretekhez használjuk, beleértve az RST, RSTACK és ERROR bájtokat.
Az RST, RSTACK és ERROR formátumát a 3.1–3.3. szakaszok ismertetik.
2.4. Számítsa ki a CRC-t
Egy 16 bites CRC-t a vezérlőbájttól az adat végéig számítanak ki. A szabványos CRCCCITT (g(x) = x16 + x12 + x5 + 1) inicializálása 0xFFFF-re történik. A legjelentősebb bájt megelőzi a legkevésbé jelentős bájtot (big-endian mód).
2.5. Bájttömés
Amint az UG101 4.2. szakaszában leírtuk, vannak olyan foglalt bájtértékek, amelyeket speciális célokra használnak. Ezek az értékek a következő táblázatban találhatók:
Amikor ezek az értékek megjelennek a keretben, az adatok speciális kezelést kapnak. – A foglalt bájt elé beillesztjük a 0x7D escape bájtot. – A foglalt bájt 5. bitjét megfordítjuk.
Az alábbiakban néhány példa látható erre az algoritmusra:
2.6. A zárójelző hozzáadása
Az utolsó lépés a 0x7E zárójelző hozzáadása a keret végéhez. Ezután az adatok elküldhetők az UART portra.
3. Keretezésmentesítési folyamat
Amikor adatokat kapunk az UART-tól, csak fordított lépéseket kell végrehajtanunk a dekódoláshoz.
4. Hivatkozások
Közzététel ideje: 2022. február 8.