Հեղինակ: 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-ի միջև կապը կարելի է ցույց տալ հետևյալ գծապատկերով.
EZSP-ի և ASH արձանագրության տվյալների ձևաչափը կարելի է պատկերել հետևյալ գծապատկերով.
Այս էջում մենք կներկայացնենք UART տվյալների և որոշ առանցքային շրջանակների շրջանակման գործընթացը, որոնք հաճախ օգտագործվում են Zigbee gateway-ում:
2. Շրջանակավորում
Շրջանակի ընդհանուր գործընթացը կարելի է պատկերացնել հետևյալ գծապատկերով.
Այս գծապատկերում տվյալները նշանակում են 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-ում:
Ուշադրություն դարձրեք, որ այս ձևաչափը կարող է փոխվել, երբ SDK-ն թարմացվի: Երբ ձևաչափը փոխվի, մենք նրան կտանք նոր տարբերակի համար: EZSP-ի վերջին տարբերակի համարը 8 է, երբ գրված է այս հոդվածը (EmberZnet 6.8):
Քանի որ EZSP շրջանակի ձևաչափը կարող է տարբեր լինել տարբեր տարբերակների միջև, կա պարտադիր պահանջ, որ հյուրընկալողը և NCP-նՊԵՏՔ Էաշխատել նույն EZSP տարբերակով: Հակառակ դեպքում նրանք չեն կարող շփվել այնպես, ինչպես սպասվում էր։
Դրան հասնելու համար հյուրընկալողի և NCP-ի միջև առաջին հրամանը պետք է լինի տարբերակի հրամանը: Այլ կերպ ասած, հյուրընկալողը պետք է առբերի NCP-ի EZSP տարբերակը ցանկացած այլ հաղորդակցությունից առաջ: Եթե EZSP տարբերակը տարբերվում է հյուրընկալող կողմի EZSP տարբերակից, կապը պետք է ընդհատվի:
Սրա հիմքում ընկած անուղղակի պահանջն այն է, որ տարբերակի հրամանի ձևաչափը կարող էԵՐԲԵՔ ՉՓՈԽՎԵՔ. EZSP տարբերակի հրամանի ձևաչափը հետևյալն է.
链接: 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 տեսակի կառավարման բայթ: Առաջին երեքն օգտագործվում են 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 բաժնում, կան որոշ վերապահված բայթ արժեքներ, որոնք օգտագործվում են հատուկ նպատակների համար: Այս արժեքները կարելի է գտնել հետևյալ աղյուսակում.
Երբ այս արժեքները հայտնվում են շրջանակում, հատուկ վերաբերմունք կկատարվի տվյալների նկատմամբ: – Տեղադրեք փախուստի բայթը 0x7D վերապահված բայթի դիմաց – Հակադարձեք այդ վերապահված բայթի բիթ 5-ը
Ստորև բերված են այս ալգորիթմի մի քանի օրինակ.
2.6. Ավելացրեք վերջի դրոշը
Վերջնական քայլը շրջանակի վերջում 0x7E դրոշակ ավելացնելն է: Դրանից հետո տվյալները կարող են ուղարկվել UART նավահանգիստ:
3. Շրջանակազերծման գործընթաց
Երբ տվյալները ստացվում են UART-ից, մենք պարզապես պետք է անենք հակառակ քայլերը՝ դրանք վերծանելու համար:
4. Հղումներ
Հրապարակման ժամանակը՝ Փետրվար-08-2022