ရေးသားသူ: TorchIoTBootCamp
လင့်ခ်- https://zhuanlan.zhihu.com/p/339700391
မှ: Quora
1. နိဒါန်း
Silicon Labs သည် Zigbee တံခါးပေါက်ဒီဇိုင်းအတွက် host + NCP ဖြေရှင်းချက်ကို ပေးထားသည်။ ဤတည်ဆောက်ပုံတွင်၊ အိမ်ရှင်သည် UART သို့မဟုတ် SPI မျက်နှာပြင်မှတစ်ဆင့် NCP နှင့် ဆက်သွယ်နိုင်သည်။ အများအားဖြင့်၊ UART ကို SPI ထက် ပိုရိုးရှင်းသောကြောင့် အသုံးပြုသည်။
Silicon Labs သည် နမူနာပရောဂျက်ဖြစ်သည့် အိမ်ရှင်ပရိုဂရမ်အတွက် နမူနာပရောဂျက်ကိုလည်း ပံ့ပိုးပေးထားသည်။Z3GatewayHost
. နမူနာသည် Unix ကဲ့သို့သော စနစ်တစ်ခုပေါ်တွင် လုပ်ဆောင်သည်။ အချို့သောဖောက်သည်များသည် RTOS ပေါ်တွင်လည်ပတ်နိုင်သည့်အိမ်ရှင်နမူနာကိုလိုချင်သော်လည်းကံမကောင်းစွာဖြင့်၊ လက်ရှိအချိန်တွင် RTOS အခြေခံအိမ်ရှင်နမူနာမရှိပါ။ အသုံးပြုသူများသည် RTOS ကိုအခြေခံ၍ ၎င်းတို့၏ကိုယ်ပိုင်အိမ်ရှင်ပရိုဂရမ်ကို ဖန်တီးရန်လိုအပ်သည်။
စိတ်ကြိုက်လက်ခံဆောင်ရွက်ပေးသည့်ပရိုဂရမ်ကို မတီထွင်မီ UART gateway protocol ကို နားလည်ရန် အရေးကြီးပါသည်။ UART အခြေပြု NCP နှင့် SPI အခြေခံ NCP နှစ်မျိုးလုံးအတွက်၊ အိမ်ရှင်သည် NCP နှင့် ဆက်သွယ်ရန်အတွက် EZSP ပရိုတိုကောကို အသုံးပြုသည်။EZSPအတိုကောက်ဖြစ်သည်။EmberZnet Serial Protocol, ၌သတ်မှတ်ထားသည်။UG100. UART အခြေပြု NCP အတွက်၊ UART ထက် EZSP ဒေတာကို ယုံကြည်စိတ်ချစွာ သယ်ဆောင်ရန် အောက်အလွှာပရိုတိုကောကို အကောင်အထည်ဖော်သည်၊၊ASHပရိုတိုကော၊ အတိုကောက်Asynchronous Serial Host. ASH နှင့်ပတ်သက်သော အသေးစိတ်အချက်အလက်များအတွက် ကျေးဇူးပြု၍ ဖတ်ရှုပါ။UG101နှင့်UG115.
EZSP နှင့် ASH အကြား ဆက်စပ်မှုကို အောက်ပါ ပုံကြမ်းဖြင့် သရုပ်ဖော်နိုင်သည်-
EZSP နှင့် ASH ပရိုတိုကော၏ ဒေတာဖော်မတ်ကို အောက်ပါပုံကြမ်းဖြင့် သရုပ်ဖော်နိုင်သည်-
ဤစာမျက်နှာတွင်၊ UART ဒေတာဘောင်သွင်းခြင်းလုပ်ငန်းစဉ်နှင့် Zigbee ဂိတ်ဝတွင် မကြာခဏအသုံးပြုလေ့ရှိသည့် သော့ဘောင်အချို့ကို ကျွန်ုပ်တို့မိတ်ဆက်ပါမည်။
2. ဘောင်သွင်းခြင်း။
ယေဘုယျဘောင်သွင်းခြင်းလုပ်ငန်းစဉ်ကို အောက်ပါဇယားဖြင့် သရုပ်ဖော်နိုင်သည်-
ဤဇယားတွင် ဒေတာသည် EZSP ဘောင်ကို ဆိုလိုသည်။ ယေဘုယျအားဖြင့်၊ ဘောင်သွင်းခြင်းလုပ်ငန်းစဉ်များမှာ- |No|Step|Reference|
|:-|:-|:-|
|1|EZSP Frame|UG100|ဖြည့်ပါ။
|2|ဒေတာကျပန်းပြုလုပ်ခြင်း|UG101| အပိုင်း 4.3|
|3|UG101| ၏ Chap2 နှင့် Chap3 ကို Control Byte ကိုထည့်ပါ။
|4|UG101| ၏ အပိုင်း 2.3| CRC ကို တွက်ချက်ပါ။
|5|Byte Stuffing|UG101| ၏ အပိုင်း 4.2|
|6|UG101| ၏အဆုံးအလံကို အပိုင်း 2.4 ကိုထည့်ပါ။
၂.၁။ EZSP Frame ကိုဖြည့်ပါ။
EZSP ဘောင်ဖော်မတ်ကို UG100 ၏ အခန်း 3 တွင် သရုပ်ဖော်ထားသည်။
SDK အဆင့်မြှင့်တင်သည့်အခါ ဤဖော်မတ်သည် ပြောင်းလဲနိုင်သည်ကို သတိပြုပါ။ ဖော်မတ်ပြောင်းသောအခါ၊ ဗားရှင်းနံပါတ်အသစ်တစ်ခုပေးပါမည်။ ဤဆောင်းပါးကိုရေးသားသောအခါ နောက်ဆုံးထွက် EZSP ဗားရှင်းနံပါတ်သည် 8 (EmberZnet 6.8) ဖြစ်သည်။
EZSP ဖရိမ်ဖော်မတ်သည် မတူညီသောဗားရှင်းများကြားတွင် ကွဲပြားနိုင်သောကြောင့်၊ host နှင့် NCP တို့သည် မဖြစ်မနေ လိုအပ်ချက်များ ရှိပါသည်။ရှိရမယ်။တူညီသော EZSP ဗားရှင်းဖြင့်အလုပ်လုပ်ပါ။ မဟုတ်ရင် သူတို့ မျှော်လင့်ထားသလို ဆက်သွယ်လို့ မရဘူး။
၎င်းကိုအောင်မြင်ရန်၊ host နှင့် NCP ကြားရှိ ပထမဆုံး command သည် version command ဖြစ်ရပါမည်။ တစ်နည်းဆိုရသော်၊ လက်ခံသူသည် အခြားဆက်သွယ်မှုမပြုလုပ်မီ NCP ၏ EZSP ဗားရှင်းကို ပြန်လည်ရယူရမည်ဖြစ်သည်။ EZSP ဗားရှင်းသည် host side ၏ EZSP ဗားရှင်းနှင့် ကွဲပြားပါက၊ ဆက်သွယ်မှုကို ဖျက်သိမ်းရပါမည်။
၎င်းနောက်ကွယ်ရှိ သွယ်ဝိုက်သောလိုအပ်ချက်မှာ ဗားရှင်း command ၏ ဖော်မတ်ဖြစ်နိုင်သည်။ဘယ်တော့မှ မပြောင်းပါနဲ့။. EZSP ဗားရှင်း command ဖော်မတ်သည် အောက်ပါအတိုင်းဖြစ်သည်။
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
၂.၂။ Data Randomization
အသေးစိတ်ကျပန်းလုပ်ဆောင်ခြင်းလုပ်ငန်းစဉ်ကို UG101 ၏အပိုင်း 4.3 တွင်ဖော်ပြထားသည်။ EZSP ဘောင်တစ်ခုလုံးကို ကျပန်းလုပ်ဆောင်ပါမည်။ ကျပန်းပြုလုပ်ခြင်းမှာ သီးသန့်-OR EZSP frame နှင့် pseudo-random sequence တစ်ခုဖြစ်သည်။
အောက်တွင် pseudo-random sequence ကို ထုတ်ပေးသည့် algorithm ဖြစ်သည် ။
- rand0 = 0×42
- randi ၏ဘစ် 0 သည် 0 ဖြစ်ပါက randi + 1 = randi >> 1
- အကယ်၍ randi ၏ဘစ် 0 သည် 1 ဖြစ်ပါက randi + 1 = (randi >> 1) ^ 0xB8
၂.၃။ Control Byte ကိုထည့်ပါ။
control byte သည် one byte data ဖြစ်ပြီး frame ၏ head သို့ ထည့်သင့်သည်။ ဖော်မတ်ကို အောက်ပါဇယားဖြင့် သရုပ်ဖော်ထားသည်။
စုစုပေါင်း၊ ထိန်းချုပ်မှုဘိုက် ၆ မျိုးရှိသည်။ ပထမသုံးလုံးကို DATA၊ ACK နှင့် NAK အပါအဝင် EZSP ဒေတာပါသည့် ဘုံဘောင်များအတွက် အသုံးပြုသည်။ နောက်ဆုံးသုံးခုကို RST၊ RSTACK နှင့် ERROR အပါအဝင် ဘုံ EZSP ဒေတာမပါဘဲ အသုံးပြုပါသည်။
RST၊ RSTACK နှင့် ERROR ၏ဖော်မတ်ကို အပိုင်း 3.1 မှ 3.3 တွင် ဖော်ပြထားပါသည်။
၂.၄။ CRC ကို တွက်ချက်ပါ။
16-bit CRC ကို data အဆုံးအထိ control byte မှ bytes ပေါ်တွင် တွက်ချက်ပါသည်။ စံ CRCCCITT (g(x) = x16 + x12 + x5 + 1) ကို 0xFFFF သို့ အစပြုပါသည်။ အထင်ရှားဆုံး byte သည် သိသာထင်ရှားသော အနည်းဆုံး byte (big-endian မုဒ်) ကို မှီပါသည်။
၂.၅။ Byte Stuffing
UG101 ၏ အပိုင်း 4.2 တွင် ဖော်ပြထားသည့်အတိုင်း၊ အထူးရည်ရွယ်ချက်အတွက် အသုံးပြုထားသော သီးသန့်ဘိုက်တန်ဖိုးအချို့ရှိပါသည်။ ဤတန်ဖိုးများကို အောက်ပါဇယားတွင် တွေ့နိုင်သည်-
ဤတန်ဖိုးများဘောင်တွင် ပေါ်လာသောအခါ၊ ဒေတာအတွက် အထူးကုသမှုတစ်ခု လုပ်ဆောင်ပါမည်။ - သိမ်းဆည်းထားသော byte ၏ရှေ့တွင် escape byte 0x7D ကိုထည့်ပါ - ထို reserved byte ၏ bit5 ကို ပြောင်းပြန်လှန်ပါ။
အောက်တွင် ဤ algorithm ၏ ဥပမာ အချို့ ဖြစ်သည် ။
၂.၆။ End Flag ကိုထည့်ပါ။
နောက်ဆုံးအဆင့်မှာ ဖရိန်၏အဆုံးတွင် အဆုံးအလံ 0x7E ကိုထည့်ရန်ဖြစ်သည်။ ထို့နောက်ဒေတာကို UART ဆိပ်ကမ်းသို့ပေးပို့နိုင်သည်။
3. De-framing လုပ်ငန်းစဉ်
UART မှ ဒေတာကို လက်ခံရရှိသည့်အခါ၊ ၎င်းကို ကုဒ်ဖျက်ရန် ပြောင်းပြန်အဆင့်များ လုပ်ဆောင်ရန် လိုအပ်ပါသည်။
4. အကိုးအကား
စာတိုက်အချိန်- ဖေဖော်ဝါရီ-၀၈-၂၀၂၂