Հեղինակ՝ TorchIoTBootCamp
Հղում: https://zhuanlan.zhihu.com/p/339700391
Ուղարկող՝ Quora
1. Ներածություն
Silicon Labs-ը Zigbee դարպասների նախագծման համար առաջարկել է host+NCP լուծում: Այս ճարտարապետության դեպքում host-ը կարող է կապ հաստատել NCP-ի հետ UART կամ SPI ինտերֆեյսի միջոցով: Ամենից հաճախ օգտագործվում է UART-ը, քանի որ այն շատ ավելի պարզ է, քան SPI-ն:
Silicon Labs-ը նաև տրամադրել է հյուրընկալող ծրագրի նմուշային նախագիծ, որը նմուշայինն էZ3GatewayHost
Նմուշը աշխատում է Unix-անման համակարգում: Որոշ հաճախորդներ կարող են ցանկանալ հոսթի նմուշ, որը կարող է աշխատել RTOS-ի վրա, բայց, ցավոք, առայժմ RTOS-ի վրա հիմնված հոսթի նմուշ չկա: Օգտատերերը պետք է մշակեն իրենց սեփական հոսթի ծրագիրը՝ հիմնված RTOS-ի վրա:
Կարևոր է հասկանալ UART դարպասի արձանագրությունը՝ նախքան անհատականացված հոսթինգային ծրագիր մշակելը: Ինչպես UART-ի վրա հիմնված NCP-ի, այնպես էլ SPI-ի վրա հիմնված NCP-ի դեպքում հոսթինգն օգտագործում է EZSP արձանագրությունը՝ NCP-ի հետ կապվելու համար:EZSPկրճատ էEmberZnet սերիական արձանագրություն, և այն սահմանվում էUG100UART-ի վրա հիմնված NCP-ի համար ներդրվում է ստորին մակարդակի արձանագրություն՝ EZSP տվյալները UART-ի միջոցով հուսալիորեն փոխանցելու համար, այսինքն՝Մոխիրարձանագրություն, կրճատ՝Ասինխրոն սերիական հոսթASH-ի մասին լրացուցիչ տեղեկությունների համար, խնդրում ենք դիմելUG101ևUG115.
EZSP-ի և ASH-ի միջև կապը կարելի է պատկերել հետևյալ դիագրամով։
EZSP-ի և ASH արձանագրության տվյալների ձևաչափը կարելի է պատկերել հետևյալ դիագրամով.
Այս էջում մենք կներկայացնենք UART տվյալների շրջանակման գործընթացը և որոշ բանալի շրջանակներ, որոնք հաճախ օգտագործվում են Zigbee դարպասում։
2. Շրջանակում
Ընդհանուր առմամբ, շրջանակի կառուցման գործընթացը կարելի է պատկերել հետևյալ դիագրամով.
Այս գրաֆիկում տվյալները նշանակում են EZSP շրջանակը։ Ընդհանուր առմամբ, շրջանակման գործընթացները հետևյալն են՝ |Ոչ|Քայլ|Հղում|
|:-|:-|:-|
|1|Լրացրեք EZSP շրջանակը|UG100|
|2|Տվյալների պատահականացում|UG101-ի 4.3 բաժին|
|3|Ավելացրեք UG101-ի Control Byte|Գլուխ 2-ը և գլուխ 3-ը|
|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-ի միջև առաջին հրամանը պետք է լինի version հրամանը։ Այլ կերպ ասած, հոսթը պետք է վերականգնի NCP-ի EZSP տարբերակը՝ նախքան որևէ այլ հաղորդակցություն։ Եթե EZSP տարբերակը տարբերվում է հոսթի կողմի EZSP տարբերակից, հաղորդակցությունը պետք է դադարեցվի։
Սրա հետևում ընկած անուղղակի պահանջն այն է, որ version հրամանի ձևաչափը կարող էԵՐԲԵՔ ՄԻ ՓՈԽԵՔEZSP տարբերակի հրամանի ձևաչափը հետևյալն է՝
链接: https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出
2.2. Տվյալների պատահականացում
Պատահականացման մանրամասն գործընթացը նկարագրված է UG101-ի 4.3 բաժնում: Ամբողջ EZSP շրջանակը պատահականացված կլինի: Պատահականացումը կատարվում է EZSP շրջանակը և կեղծ-պատահական հաջորդականությունը բացառելու կամ բացառելու համար:
Ստորև ներկայացված է կեղծ-պատահական հաջորդականություն ստեղծելու ալգորիթմը։
- rand0 = 0×42
- եթե randi-ի 0 բիթը 0 է, randi+1 = randi >> 1
- եթե randi-ի 0 բիթը 1 է, randi+1 = (randi >> 1) ^ 0xB8
2.3. Ավելացրեք կառավարման բայթը
Կառավարման բայթը մեկ բայթանոց տվյալ է և պետք է ավելացվի շրջանակի գլխին: Ձևաչափը պատկերված է ստորև բերված աղյուսակում.
Ընդհանուր առմամբ, կան 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