A Zigbee EZSP UART-ról

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 mintaZ3GatewayHostA 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:

1

Az EZSP és az ASH protokoll adatformátumát a következő ábra szemlélteti:

2

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:

3

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.

4

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:

5

A paramétermező magyarázatát és a verzióválasz formátumát az UG100 4. fejezete tartalmazza. A paramétermező a gazdaprogram EZSP verzióját jelöli. A cikk írásakor ez a 8-as verzió.
7
Például: TorchIoTBootCamp
链接: 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:

6

Ö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:

7

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:

8

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.
Online csevegés WhatsApp-on!