രചയിതാവ്: TorchIoTBootCamp
ലിങ്ക്: https://zhuanlan.zhihu.com/p/339700391
നിന്ന്: Quora
1. ആമുഖം
സിഗ്ബി ഗേറ്റ്വേ ഡിസൈനിനായി സിലിക്കൺ ലാബ്സ് ഹോസ്റ്റ്+എൻസിപി സൊല്യൂഷൻ വാഗ്ദാനം ചെയ്തിട്ടുണ്ട്. ഈ ആർക്കിടെക്ചറിൽ, UART അല്ലെങ്കിൽ SPI ഇൻ്റർഫേസ് വഴി ഹോസ്റ്റിന് NCP-യുമായി ആശയവിനിമയം നടത്താനാകും. ഏറ്റവും സാധാരണയായി, UART ഉപയോഗിക്കുന്നത് SPI നേക്കാൾ വളരെ ലളിതമാണ്.
ഹോസ്റ്റ് പ്രോഗ്രാമിനായി സിലിക്കൺ ലാബ്സ് ഒരു സാമ്പിൾ പ്രോജക്റ്റും നൽകിയിട്ടുണ്ട്, അത് സാമ്പിളാണ്Z3GatewayHost
. സാമ്പിൾ ഒരു Unix പോലുള്ള സിസ്റ്റത്തിൽ പ്രവർത്തിക്കുന്നു. ചില ഉപഭോക്താക്കൾക്ക് ഒരു RTOS-ൽ പ്രവർത്തിക്കാൻ കഴിയുന്ന ഒരു ഹോസ്റ്റ് സാമ്പിൾ ആവശ്യമായി വന്നേക്കാം, എന്നാൽ നിർഭാഗ്യവശാൽ, തൽക്കാലം RTOS അടിസ്ഥാനമാക്കിയുള്ള ഹോസ്റ്റ് സാമ്പിൾ ഇല്ല. RTOS അടിസ്ഥാനമാക്കി ഉപയോക്താക്കൾ അവരുടെ സ്വന്തം ഹോസ്റ്റ് പ്രോഗ്രാം വികസിപ്പിക്കേണ്ടതുണ്ട്.
ഒരു ഇഷ്ടാനുസൃത ഹോസ്റ്റ് പ്രോഗ്രാം വികസിപ്പിക്കുന്നതിന് മുമ്പ് UART ഗേറ്റ്വേ പ്രോട്ടോക്കോൾ മനസ്സിലാക്കേണ്ടത് പ്രധാനമാണ്. UART അടിസ്ഥാനമാക്കിയുള്ള NCP, SPI അടിസ്ഥാനമാക്കിയുള്ള NCP എന്നിവയ്ക്കായി, NCP-യുമായി ആശയവിനിമയം നടത്താൻ ഹോസ്റ്റ് EZSP പ്രോട്ടോക്കോൾ ഉപയോഗിക്കുന്നു.EZSPഎന്നതിൻ്റെ ചുരുക്കമാണ്EmberZnet സീരിയൽ പ്രോട്ടോക്കോൾ, അത് നിർവചിച്ചിരിക്കുന്നത്UG100. UART അടിസ്ഥാനമാക്കിയുള്ള NCP-ക്ക്, UART-ൽ EZSP ഡാറ്റ വിശ്വസനീയമായി കൊണ്ടുപോകുന്നതിന് ഒരു ലോവർ ലെയർ പ്രോട്ടോക്കോൾ നടപ്പിലാക്കുന്നു, അതാണ്എ.എസ്.എച്ച്പ്രോട്ടോക്കോൾ, ചുരുക്കത്തിൽഅസിൻക്രണസ് സീരിയൽ ഹോസ്റ്റ്. ASH നെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, ദയവായി റഫർ ചെയ്യുകUG101ഒപ്പംUG115.
EZSP ഉം ASH ഉം തമ്മിലുള്ള ബന്ധം ഇനിപ്പറയുന്ന ഡയഗ്രം ഉപയോഗിച്ച് ചിത്രീകരിക്കാം:
EZSP, ASH പ്രോട്ടോക്കോൾ എന്നിവയുടെ ഡാറ്റ ഫോർമാറ്റ് ഇനിപ്പറയുന്ന ഡയഗ്രം ഉപയോഗിച്ച് ചിത്രീകരിക്കാം:
ഈ പേജിൽ, UART ഡാറ്റയും Zigbee ഗേറ്റ്വേയിൽ പതിവായി ഉപയോഗിക്കുന്ന ചില പ്രധാന ഫ്രെയിമുകളും ഫ്രെയിം ചെയ്യുന്ന പ്രക്രിയ ഞങ്ങൾ പരിചയപ്പെടുത്തും.
2. ഫ്രെയിമിംഗ്
പൊതുവായ ഫ്രെയിമിംഗ് പ്രക്രിയ ഇനിപ്പറയുന്ന ചാർട്ട് ഉപയോഗിച്ച് ചിത്രീകരിക്കാം:
ഈ ചാർട്ടിൽ, ഡാറ്റ അർത്ഥമാക്കുന്നത് EZSP ഫ്രെയിം എന്നാണ്. പൊതുവേ, ഫ്രെയിമിംഗ് പ്രക്രിയകൾ ഇവയാണ്: |ഇല്ല|ഘട്ടം|റഫറൻസ്|
|:-|:-|:-|
|1|EZSP ഫ്രെയിം പൂരിപ്പിക്കുക|UG100|
|2|ഡാറ്റ റാൻഡമൈസേഷൻ|UG101-ൻ്റെ സെക്ഷൻ 4.3|
|3|നിയന്ത്രണ ബൈറ്റ് ചേർക്കുക|UG101-ൻ്റെ Chap2, Chap3|
|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 ഫ്രെയിം ഫോർമാറ്റ് വ്യത്യസ്തമായിരിക്കാമെന്നതിനാൽ, ഹോസ്റ്റും എൻസിപിയും നിർബന്ധമായും ആവശ്യമാണ്വേണംഒരേ EZSP പതിപ്പിൽ പ്രവർത്തിക്കുക. അല്ലെങ്കിൽ, അവർ പ്രതീക്ഷിച്ച പോലെ ആശയവിനിമയം നടത്താൻ കഴിയില്ല.
അത് നേടുന്നതിന്, ഹോസ്റ്റും എൻസിപിയും തമ്മിലുള്ള ആദ്യ കമാൻഡ് പതിപ്പ് കമാൻഡ് ആയിരിക്കണം. മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, മറ്റേതെങ്കിലും ആശയവിനിമയത്തിന് മുമ്പ് ഹോസ്റ്റ് NCP-യുടെ EZSP പതിപ്പ് വീണ്ടെടുക്കണം. ഹോസ്റ്റ് ഭാഗത്തിൻ്റെ EZSP പതിപ്പുമായി EZSP പതിപ്പ് വ്യത്യസ്തമാണെങ്കിൽ, ആശയവിനിമയം നിർത്തലാക്കണം.
പതിപ്പ് കമാൻഡിൻ്റെ ഫോർമാറ്റിന് കഴിയും എന്നതാണ് ഇതിന് പിന്നിലെ പരോക്ഷമായ ആവശ്യംഒരിക്കലും മാറരുത്. EZSP പതിപ്പ് കമാൻഡ് ഫോർമാറ്റ് താഴെ പോലെയാണ്:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
നിങ്ങൾ
2.2 ഡാറ്റ ക്രമരഹിതമാക്കൽ
വിശദമായ റാൻഡമൈസേഷൻ പ്രക്രിയ UG101-ൻ്റെ സെക്ഷൻ 4.3-ൽ വിവരിച്ചിരിക്കുന്നു. മുഴുവൻ EZSP ഫ്രെയിമും ക്രമരഹിതമാക്കും. ക്രമരഹിതമാക്കൽ എക്സ്ക്ലൂസീവ്-അല്ലെങ്കിൽ EZSP ഫ്രെയിമും ഒരു വ്യാജ-റാൻഡം സീക്വൻസും ആണ്.
കപട-റാൻഡം സീക്വൻസ് സൃഷ്ടിക്കുന്നതിനുള്ള അൽഗോരിതം ചുവടെയുണ്ട്.
- rand0 = 0×42
- റാണ്ടിയുടെ ബിറ്റ് 0 0 ആണെങ്കിൽ, Randi+1 = Randi >> 1
- റാണ്ടിയുടെ ബിറ്റ് 0 1 ആണെങ്കിൽ, Randi+1 = (randi >> 1) ^ 0xB8
2.3 കൺട്രോൾ ബൈറ്റ് ചേർക്കുക
കൺട്രോൾ ബൈറ്റ് ഒരു ബൈറ്റ് ഡാറ്റയാണ്, ഫ്രെയിമിൻ്റെ തലയിൽ ചേർക്കേണ്ടതാണ്. ഫോർമാറ്റ് ചുവടെയുള്ള പട്ടിക ഉപയോഗിച്ച് ചിത്രീകരിച്ചിരിക്കുന്നു:
മൊത്തത്തിൽ, 6 തരം കൺട്രോൾ ബൈറ്റുകൾ ഉണ്ട്. DATA, ACK, NAK എന്നിവയുൾപ്പെടെ EZSP ഡാറ്റയുള്ള സാധാരണ ഫ്രെയിമുകൾക്കായി ആദ്യ മൂന്ന് ഉപയോഗിക്കുന്നു. RST, RSTACK, ERROR എന്നിവയുൾപ്പെടെ സാധാരണ EZSP ഡാറ്റ ഇല്ലാതെയാണ് അവസാനത്തെ മൂന്ന് ഉപയോഗിക്കുന്നത്.
RST, RSTACK, ERROR എന്നിവയുടെ ഫോർമാറ്റ് വിഭാഗം 3.1 മുതൽ 3.3 വരെ വിവരിച്ചിരിക്കുന്നു.
2.4 CRC കണക്കാക്കുക
കൺട്രോൾ ബൈറ്റിൽ നിന്ന് ഡാറ്റയുടെ അവസാനം വരെയുള്ള ബൈറ്റുകളിൽ 16-ബിറ്റ് CRC കണക്കാക്കുന്നു. സ്റ്റാൻഡേർഡ് CRCCCITT (g(x) = x16 + x12 + x5 + 1) 0xFFFF ലേക്ക് ആരംഭിക്കുന്നു. ഏറ്റവും പ്രധാനപ്പെട്ട ബൈറ്റ്, ഏറ്റവും കുറഞ്ഞ പ്രാധാന്യമുള്ള ബൈറ്റിന് മുമ്പുള്ളതാണ് (ബിഗ്-എൻഡിയൻ മോഡ്).
2.5 ബൈറ്റ് സ്റ്റഫിംഗ്
UG101-ൻ്റെ സെക്ഷൻ 4.2-ൽ വിവരിച്ചിരിക്കുന്നതുപോലെ, പ്രത്യേക ആവശ്യത്തിനായി ചില റിസർവ്ഡ് ബൈറ്റ് മൂല്യങ്ങൾ ഉപയോഗിക്കുന്നു. ഈ മൂല്യങ്ങൾ ഇനിപ്പറയുന്ന പട്ടികയിൽ കാണാം:
ഈ മൂല്യങ്ങൾ ഫ്രെയിമിൽ ദൃശ്യമാകുമ്പോൾ, ഡാറ്റയ്ക്ക് ഒരു പ്രത്യേക ചികിത്സ നടത്തും. – റിസർവ് ചെയ്ത ബൈറ്റിന് മുന്നിൽ എസ്കേപ്പ് ബൈറ്റ് 0x7D തിരുകുക – ആ റിസർവ് ചെയ്ത ബൈറ്റിൻ്റെ ബിറ്റ്5 റിവേഴ്സ് ചെയ്യുക
ഈ അൽഗോരിതത്തിൻ്റെ ചില ഉദാഹരണങ്ങൾ ചുവടെയുണ്ട്:
2.6 എൻഡ് ഫ്ലാഗ് ചേർക്കുക
അവസാന ഘട്ടം ഫ്രെയിമിൻ്റെ അവസാനം 0x7E ഫ്ലാഗ് ചേർക്കുക എന്നതാണ്. അതിനുശേഷം, ഡാറ്റ UART പോർട്ടിലേക്ക് അയയ്ക്കാം.
3. ഡീ-ഫ്രെയിമിംഗ് പ്രക്രിയ
UART-ൽ നിന്ന് ഡാറ്റ ലഭിക്കുമ്പോൾ, അത് ഡീകോഡ് ചെയ്യുന്നതിന് ഞങ്ങൾ റിവേഴ്സ് സ്റ്റെപ്പുകൾ ചെയ്യേണ്ടതുണ്ട്.
4. റഫറൻസുകൾ
പോസ്റ്റ് സമയം: ഫെബ്രുവരി-08-2022