Zigbee EZSP UART-ի մասին

Հեղինակ: TorchIoTBootCamp
Հղում: https://zhuanlan.zhihu.com/p/339700391
From:Quora

1. Ներածություն

Silicon Labs-ն առաջարկել է host+NCP լուծում Zigbee gateway-ի նախագծման համար: Այս ճարտարապետության մեջ հոսթը կարող է շփվել NCP-ի հետ UART կամ SPI ինտերֆեյսի միջոցով: Ամենից հաճախ UART-ն օգտագործվում է, քանի որ այն շատ ավելի պարզ է, քան SPI-ն:

Silicon Labs-ը տրամադրել է նաև հյուրընկալող ծրագրի օրինակելի նախագիծ, որը հանդիսանում է նմուշըZ3GatewayHost. Նմուշն աշխատում է Unix-ի նման համակարգով: Որոշ հաճախորդներ կարող են ցանկանալ հյուրընկալող նմուշ, որը կարող է աշխատել RTOS-ի վրա, բայց, ցավոք, առայժմ չկա RTOS-ի վրա հիմնված հյուրընկալող նմուշ: Օգտագործողները պետք է մշակեն իրենց սեփական հոսթ ծրագիրը՝ հիմնված RTOS-ի վրա:

Կարևոր է հասկանալ UART gateway արձանագրությունը՝ նախքան հարմարեցված հյուրընկալող ծրագիր մշակելը: Ինչպես UART-ի վրա հիմնված NCP-ի, այնպես էլ SPI-ի վրա հիմնված NCP-ի համար, հոսթն օգտագործում է EZSP արձանագրությունը՝ NCP-ի հետ հաղորդակցվելու համար:EZSPհամար կարճ էEmberZnet սերիական արձանագրություն, և այն սահմանվում էUG100. UART-ի վրա հիմնված NCP-ի համար ներդրվում է ստորին շերտի արձանագրություն՝ EZSP-ի տվյալները հուսալիորեն UART-ով տեղափոխելու համար.Մոխիրարձանագրություն՝ կրճատAsynchronous Serial Host. ASH-ի մասին լրացուցիչ մանրամասների համար խնդրում ենք դիմելUG101ևUG115.

EZSP-ի և ASH-ի միջև կապը կարելի է ցույց տալ հետևյալ գծապատկերով.

1

EZSP-ի և ASH արձանագրության տվյալների ձևաչափը կարելի է պատկերել հետևյալ գծապատկերով.

2

Այս էջում մենք կներկայացնենք UART տվյալների և որոշ առանցքային շրջանակների շրջանակման գործընթացը, որոնք հաճախ օգտագործվում են Zigbee gateway-ում:

2. Շրջանակավորում

Շրջանակի ընդհանուր գործընթացը կարելի է պատկերացնել հետևյալ գծապատկերով.

3

Այս գծապատկերում տվյալները նշանակում են EZSP շրջանակ: Ընդհանուր առմամբ, շրջանակային գործընթացներն են՝ |Ոչ|Քայլ|Հղում|

|:-|:-|:-|

|1|Լրացրեք EZSP Frame|UG100|

|2|Տվյալների պատահականացում|UG101-ի 4.3 բաժին|

|3|Ավելացնել Control Byte|Գլուխ2 և Գլուխ3 UG101|

|4|Հաշվարկել CRC|UG101-ի 2.3 բաժինը|

|5|Բայթ լցոնում|UG101-ի 4.2 բաժին|

|6|Ավելացնել վերջի դրոշը|UG101-ի 2.4-րդ բաժինը|

2.1. Լրացրեք EZSP շրջանակը

EZSP շրջանակի ձևաչափը պատկերված է UG100-ի Գլուխ 3-ում:

4

Ուշադրություն դարձրեք, որ այս ձևաչափը կարող է փոխվել, երբ SDK-ն թարմացվի: Երբ ձևաչափը փոխվի, մենք նրան կտանք նոր տարբերակի համար: EZSP-ի վերջին տարբերակի համարը 8 է, երբ գրված է այս հոդվածը (EmberZnet 6.8):

Քանի որ EZSP շրջանակի ձևաչափը կարող է տարբեր լինել տարբեր տարբերակների միջև, կա պարտադիր պահանջ, որ հյուրընկալողը և NCP-նՊԵՏՔ Էաշխատել նույն EZSP տարբերակով: Հակառակ դեպքում նրանք չեն կարող շփվել այնպես, ինչպես սպասվում էր։

Դրան հասնելու համար հյուրընկալողի և NCP-ի միջև առաջին հրամանը պետք է լինի տարբերակի հրամանը: Այլ կերպ ասած, հյուրընկալողը պետք է առբերի NCP-ի EZSP տարբերակը ցանկացած այլ հաղորդակցությունից առաջ: Եթե ​​EZSP տարբերակը տարբերվում է հյուրընկալող կողմի EZSP տարբերակից, կապը պետք է ընդհատվի:

Սրա հիմքում ընկած անուղղակի պահանջն այն է, որ տարբերակի հրամանի ձևաչափը կարող էԵՐԲԵՔ ՉՓՈԽՎԵՔ. EZSP տարբերակի հրամանի ձևաչափը հետևյալն է.

5

Պարամետրերի դաշտի բացատրությունները և տարբերակի պատասխանի ձևաչափը կարելի է գտնել UG100-ի Գլուխ 4-ում: Պարամետրերի դաշտը հյուրընկալող ծրագրի EZSP տարբերակն է: Երբ այս հոդվածը գրված է, դա 8 է:
7
Օրինակ՝ TorchIoTBootCamp
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出

2.2. Տվյալների պատահականացում

Մանրամասն պատահականության գործընթացը նկարագրված է UG101-ի 4.3 բաժնում: EZSP-ի ամբողջ շրջանակը պատահական կլինի: Պատահականացումը բացառապես ԿԱՄ EZSP շրջանակն է և կեղծ պատահական հաջորդականությունը:

Ստորև ներկայացված է կեղծ պատահական հաջորդականության գեներացման ալգորիթմը.

  • ռանդ0 = 0×42
  • եթե randi-ի 0 բիթը 0 է, randi+1 = randi >> 1
  • եթե randi-ի 0 բիթը 1 է, randi+1 = (randi >> 1) ^ 0xB8

2.3. Ավելացնել Control Byte

Վերահսկիչ բայթը մեկ բայթ տվյալ է և պետք է ավելացվի շրջանակի գլխին: Ձևաչափը պատկերված է ստորև բերված աղյուսակով.

6

Ընդհանուր առմամբ, կան 6 տեսակի կառավարման բայթ: Առաջին երեքն օգտագործվում են EZSP տվյալների հետ ընդհանուր շրջանակների համար, ներառյալ DATA, ACK և NAK: Վերջին երեքն օգտագործվում են առանց ընդհանուր EZSP տվյալների, ներառյալ RST, RSTACK և ERROR:

RST, RSTACK և ERROR ձևաչափերը նկարագրված են 3.1-3.3 բաժիններում:

2.4. Հաշվարկել CRC-ն

16-բիթանոց CRC-ը հաշվարկվում է բայթերի վրա՝ հսկիչ բայթից մինչև տվյալների վերջը: Ստանդարտ CRCCCITT (g(x) = x16 + x12 + x5 + 1) սկզբնավորվում է 0xFFFF: Առավել նշանակալից բայթը նախորդում է ամենաքիչ նշանակալից բայթին (big-endian ռեժիմ):

2.5. Բայթ լցոնում

Ինչպես նկարագրված է UG101-ի 4.2 բաժնում, կան որոշ վերապահված բայթ արժեքներ, որոնք օգտագործվում են հատուկ նպատակների համար: Այս արժեքները կարելի է գտնել հետևյալ աղյուսակում.

7

Երբ այս արժեքները հայտնվում են շրջանակում, հատուկ վերաբերմունք կկատարվի տվյալների նկատմամբ: – Տեղադրեք փախուստի բայթը 0x7D վերապահված բայթի դիմաց – Հակադարձեք այդ վերապահված բայթի բիթ 5-ը

Ստորև բերված են այս ալգորիթմի մի քանի օրինակ.

8

2.6. Ավելացրեք վերջի դրոշը

Վերջնական քայլը շրջանակի վերջում 0x7E դրոշակ ավելացնելն է: Դրանից հետո տվյալները կարող են ուղարկվել UART նավահանգիստ:

3. Շրջանակազերծման գործընթաց

Երբ տվյալները ստացվում են UART-ից, մենք պարզապես պետք է անենք հակառակ քայլերը՝ դրանք վերծանելու համար:

4. Հղումներ


Հրապարակման ժամանակը՝ Փետրվար-08-2022
WhatsApp առցանց զրույց!