စာရေးသူ:TorchIoTBootCamp
လင့်ခ်- https://zhuanlan.zhihu.com/p/339700391
မှ:Quora
၁။ မိတ်ဆက်
Silicon Labs သည် Zigbee gateway ဒီဇိုင်းအတွက် host+NCP solution ကို ပေးဆောင်ထားပါသည်။ ဤဗိသုကာပုံစံတွင် host သည် UART သို့မဟုတ် SPI interface မှတစ်ဆင့် NCP နှင့် ဆက်သွယ်နိုင်သည်။ အများစုမှာ UART ကို SPI ထက် များစွာရိုးရှင်းသောကြောင့် အသုံးပြုကြသည်။
Silicon Labs သည် host program အတွက် နမူနာ project တစ်ခုကိုလည်း ပံ့ပိုးပေးထားပြီး ၎င်းမှာ နမူနာဖြစ်သည်။Z3GatewayHost။ နမူနာသည် Unix ကဲ့သို့သော စနစ်ပေါ်တွင် လုပ်ဆောင်သည်။ အချို့သော ဖောက်သည်များသည် RTOS ပေါ်တွင် လုပ်ဆောင်နိုင်သော host sample ကို လိုချင်ကြပေမည်၊ သို့သော် ဝမ်းနည်းစရာကောင်းသည်မှာ၊ လောလောဆယ်တွင် RTOS ကို အခြေခံသည့် host sample မရှိပါ။ အသုံးပြုသူများသည် RTOS ကို အခြေခံ၍ ၎င်းတို့၏ကိုယ်ပိုင် host program ကို တီထွင်ရန် လိုအပ်ပါသည်။
စိတ်ကြိုက် host program တစ်ခု မတည်ဆောက်မီ UART gateway protocol ကို နားလည်ရန် အရေးကြီးပါသည်။ UART-based NCP နှင့် SPI-based NCP နှစ်ခုလုံးအတွက်၊ host သည် NCP နှင့် ဆက်သွယ်ရန် EZSP protocol ကို အသုံးပြုသည်။EZSPအတိုကောက်ဖြစ်သည်EmberZnet စီရီရယ် ပရိုတိုကော, နှင့် ၎င်းကို တွင် သတ်မှတ်ထားသည်UG100UART အခြေခံ NCP အတွက်၊ UART မှတစ်ဆင့် EZSP အချက်အလက်များကို ယုံကြည်စိတ်ချစွာ သယ်ဆောင်ရန်အတွက် အောက်ခံအလွှာပရိုတိုကောကို အကောင်အထည်ဖော်ထားသည်။ပြာပရိုတိုကော၊ အတိုကောက်တစ်ပြိုင်နက်တည်းမဟုတ်သော စီရီရယ် ဟို့စ်ASH အကြောင်း အသေးစိတ်သိရှိလိုပါက ကြည့်ပါ။UG101နှင့်UG115.
EZSP နှင့် ASH အကြား ဆက်နွယ်မှုကို အောက်ပါပုံဖြင့် သရုပ်ဖော်နိုင်သည်။
EZSP နှင့် ASH protocol ၏ data format ကို အောက်ပါပုံဖြင့် သရုပ်ဖော်နိုင်သည်။
ဒီစာမျက်နှာမှာ UART data ကို framing လုပ်တဲ့ လုပ်ငန်းစဉ်နဲ့ Zigbee gateway မှာ မကြာခဏအသုံးပြုတဲ့ key frame အချို့ကို မိတ်ဆက်ပေးပါမယ်။
၂။ ဘောင်ခတ်ခြင်း
အထွေထွေ frameing လုပ်ငန်းစဉ်ကို အောက်ပါဇယားဖြင့် သရုပ်ဖော်နိုင်ပါသည်။
ဤဇယားတွင်၊ ဒေတာသည် EZSP frame ကိုဆိုလိုသည်။ ယေဘုယျအားဖြင့်၊ framing လုပ်ငန်းစဉ်များမှာ- |မရှိ|အဆင့်|ကိုးကား|
|:-|:-|:-|
|၁|EZSP ဘောင်ကို ဖြည့်ပါ|UG100|
|၂|ဒေတာကျပန်းပြုလုပ်ခြင်း|UG101 ၏ အပိုင်း ၄.၃|
|၃|UG101 ရဲ့ အခန်း ၂ နဲ့ အခန်း ၃ ကို Control Byte ထည့်ပါ|
|၄|CRC ကို တွက်ချက်ပါ|UG101 ၏ အပိုင်း ၂.၃|
|၅|Byte Stuffing|UG101 ၏ အပိုင်း ၄.၂|
|၆|အဆုံးအလံထည့်ပါ|UG101 ၏ အပိုင်း ၂.၄|
၂.၁။ EZSP ဘောင်ကို ဖြည့်ပါ
EZSP frame format ကို UG100 ၏ အခန်း ၃ တွင် သရုပ်ဖော်ထားသည်။
SDK အဆင့်မြှင့်တင်သည့်အခါ ဤဖော်မတ်ပြောင်းလဲသွားနိုင်ကြောင်း သတိပြုပါ။ ဖော်မတ်ပြောင်းလဲသွားသောအခါတွင် ကျွန်ုပ်တို့သည် ၎င်းကို ဗားရှင်းနံပါတ်အသစ်တစ်ခု ပေးပါမည်။ ဤဆောင်းပါးကိုရေးသားချိန်တွင် နောက်ဆုံးထွက် EZSP ဗားရှင်းနံပါတ်မှာ ၈ ဖြစ်သည် (EmberZnet 6.8)။
EZSP frame format သည် ဗားရှင်းအမျိုးမျိုးကြားတွင် ကွဲပြားနိုင်သောကြောင့်၊ host နှင့် NCP သည် မဖြစ်မနေလိုအပ်ချက်တစ်ခုရှိသည်။မဖြစ်မနေတူညီသော EZSP ဗားရှင်းဖြင့် အလုပ်လုပ်ပါ။ မဟုတ်ပါက ၎င်းတို့သည် မျှော်လင့်ထားသည့်အတိုင်း ဆက်သွယ်နိုင်မည်မဟုတ်ပါ။
အဲဒီလိုလုပ်ဖို့အတွက် host နဲ့ NCP အကြား ပထမဆုံး command က version command ဖြစ်ရပါမယ်။ တစ်နည်းအားဖြင့် host ဟာ တခြားဆက်သွယ်မှုတွေမလုပ်ခင် NCP ရဲ့ EZSP version ကို ပြန်လည်ရယူရပါမယ်။ EZSP version ဟာ host ရဲ့ EZSP version နဲ့ ကွဲပြားရင် ဆက်သွယ်မှုရပ်ဆိုင်းရပါမယ်။
၎င်းနောက်ကွယ်ရှိ သွယ်ဝိုက်သောလိုအပ်ချက်မှာ version command ၏ format သည်ဘယ်တော့မှ မပြောင်းလဲပါနဲ့EZSP ဗားရှင်း command format သည် အောက်ပါအတိုင်းဖြစ်သည်။
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
၂.၂။ ဒေတာကျပန်းပြုလုပ်ခြင်း
အသေးစိတ်ကျပန်းရွေးချယ်မှုလုပ်ငန်းစဉ်ကို UG101 ၏ အပိုင်း ၄.၃ တွင်ဖော်ပြထားသည်။ EZSP frame တစ်ခုလုံးကို ကျပန်းရွေးချယ်မည်ဖြစ်သည်။ ကျပန်းရွေးချယ်မှုသည် EZSP frame နှင့် pseudo-random sequence ကို exclusive-OR ပြုလုပ်ရန်ဖြစ်သည်။
အောက်တွင် pseudo-random sequence ကို ဖန်တီးသည့် algorithm ပါရှိသည်။
- rand0 = 0 × 42
- randi ရဲ့ bit 0 က 0 ဆိုရင် randi+1 = randi >> 1
- randi ရဲ့ bit 0 က 1 ဆိုရင် randi+1 = (randi >> 1) ^ 0xB8
၂.၃။ ထိန်းချုပ် Byte ကိုထည့်ပါ
control byte သည် one byte data ဖြစ်ပြီး frame ၏ head တွင် ထည့်သွင်းသင့်သည်။ format ကို အောက်ပါဇယားဖြင့် သရုပ်ဖော်ထားသည်။
စုစုပေါင်း control byte အမျိုးအစား ၆ မျိုးရှိပါတယ်။ ပထမသုံးခုကို DATA၊ ACK နှင့် NAK အပါအဝင် EZSP data ပါသည့် frame များအတွက် အသုံးပြုပါတယ်။ နောက်ဆုံးသုံးခုကို RST၊ RSTACK နှင့် ERROR အပါအဝင် common EZSP data မပါဘဲ အသုံးပြုပါတယ်။
RST၊ RSTACK နှင့် ERROR တို့၏ ဖော်မတ်ကို အပိုင်း ၃.၁ မှ ၃.၃ တွင် ဖော်ပြထားပါသည်။
၂.၄။ CRC ကို တွက်ချက်ပါ
16-bit CRC ကို control byte မှ data အဆုံးအထိ bytes များဖြင့် တွက်ချက်သည်။ စံ CRCCCITT (g(x) = x16 + x12 + x5 + 1) ကို 0xFFFF သို့ initialize လုပ်သည်။ အရေးအကြီးဆုံး byte သည် အနည်းဆုံး significant byte ၏ ရှေ့တွင် ရှိသည် (big-endian mode)။
၂.၅။ ဘိုက် ဖြည့်သွင်းခြင်း
UG101 ရဲ့ အပိုင်း ၄.၂ မှာ ဖော်ပြထားတဲ့အတိုင်း အထူးရည်ရွယ်ချက်အတွက် အသုံးပြုတဲ့ သီးသန့် byte တန်ဖိုးတွေ ရှိပါတယ်။ ဒီတန်ဖိုးတွေကို အောက်ပါဇယားမှာ ရှာတွေ့နိုင်ပါတယ်။
ဤတန်ဖိုးများသည် frame တွင်ပေါ်လာသောအခါ၊ data ကိုအထူးဂရုစိုက်မှုပြုလုပ်ပါမည်။ – သိမ်းဆည်းထားသော byte ၏ရှေ့တွင် escape byte 0x7D ကိုထည့်ပါ။ – ထိုသိမ်းဆည်းထားသော byte ၏ bit5 ကိုပြောင်းပြန်လုပ်ပါ။
အောက်တွင် ဤ algorithm ၏ ဥပမာအချို့ကို ဖော်ပြထားပါသည်။
၂.၆။ အဆုံးအလံထည့်ပါ
နောက်ဆုံးအဆင့်ကတော့ frame ရဲ့အဆုံးမှာ end flag 0x7E ကိုထည့်ဖို့ပါ။ ပြီးရင် data ကို UART port ကိုပို့နိုင်ပါတယ်။
၃။ ဘောင်ခတ်မှု ပယ်ဖျက်ခြင်း လုပ်ငန်းစဉ်
UART မှ data လက်ခံရရှိသောအခါ၊ ၎င်းကို decode လုပ်ရန် ပြောင်းပြန်အဆင့်များကို လုပ်ဆောင်ရန်သာ လိုအပ်ပါသည်။
၄။ ကိုးကားချက်များ
ပို့စ်တင်ချိန်: ၂၀၂၂ ခုနှစ်၊ ဖေဖော်ဝါရီလ ၈ ရက်








