രചയിതാവ്: TorchIoTBootCamp
ലിങ്ക്: https://zhuanlan.zhihu.com/p/339700391
നിന്ന്: ക്വാറ
1. ആമുഖം
സിഗ്ബീ ഗേറ്റ്വേ ഡിസൈനിനായി സിലിക്കൺ ലാബ്സ് ഒരു ഹോസ്റ്റ്+എൻസിപി സൊല്യൂഷൻ വാഗ്ദാനം ചെയ്തിട്ടുണ്ട്. ഈ ആർക്കിടെക്ചറിൽ, ഹോസ്റ്റിന് UART അല്ലെങ്കിൽ SPI ഇന്റർഫേസ് വഴി NCP-യുമായി ആശയവിനിമയം നടത്താൻ കഴിയും. SPI-യെക്കാൾ വളരെ ലളിതമായതിനാൽ സാധാരണയായി UART ഉപയോഗിക്കുന്നു.
ഹോസ്റ്റ് പ്രോഗ്രാമിനായി സിലിക്കൺ ലാബ്സ് ഒരു സാമ്പിൾ പ്രോജക്റ്റും നൽകിയിട്ടുണ്ട്, അത് സാമ്പിൾ ആണ്Z3ഗേറ്റ്വേഹോസ്റ്റ്
. സാമ്പിൾ ഒരു Unix-സമാന സിസ്റ്റത്തിലാണ് പ്രവർത്തിക്കുന്നത്. ചില ഉപഭോക്താക്കൾക്ക് RTOS-ൽ പ്രവർത്തിക്കാൻ കഴിയുന്ന ഒരു ഹോസ്റ്റ് സാമ്പിൾ ആവശ്യമായി വന്നേക്കാം, പക്ഷേ നിർഭാഗ്യവശാൽ, തൽക്കാലം RTOS അധിഷ്ഠിത ഹോസ്റ്റ് സാമ്പിൾ ഇല്ല. RTOS-നെ അടിസ്ഥാനമാക്കി ഉപയോക്താക്കൾ സ്വന്തം ഹോസ്റ്റ് പ്രോഗ്രാം വികസിപ്പിക്കേണ്ടതുണ്ട്.
ഒരു ഇഷ്ടാനുസൃത ഹോസ്റ്റ് പ്രോഗ്രാം വികസിപ്പിക്കുന്നതിന് മുമ്പ് UART ഗേറ്റ്വേ പ്രോട്ടോക്കോൾ മനസ്സിലാക്കേണ്ടത് പ്രധാനമാണ്. UART അടിസ്ഥാനമാക്കിയുള്ള NCP, SPI അടിസ്ഥാനമാക്കിയുള്ള NCP എന്നിവയ്ക്ക്, NCP-യുമായി ആശയവിനിമയം നടത്താൻ ഹോസ്റ്റ് EZSP പ്രോട്ടോക്കോൾ ഉപയോഗിക്കുന്നു.ഇസെഡ്എസ്പിഎന്നതിന്റെ ചുരുക്കെഴുത്താണ്എംബർസെഡ്നെറ്റ് സീരിയൽ പ്രോട്ടോക്കോൾ, കൂടാതെ ഇത് നിർവചിച്ചിരിക്കുന്നത്യുജി 100. UART അധിഷ്ഠിത NCP-ക്ക്, UART-യിൽ വിശ്വസനീയമായി EZSP ഡാറ്റ കൊണ്ടുപോകുന്നതിന് ഒരു ലോവർ ലെയർ പ്രോട്ടോക്കോൾ നടപ്പിലാക്കിയിരിക്കുന്നു, അതാണ്ആഷ്പ്രോട്ടോക്കോൾ, ചുരുക്കത്തിൽഅസിൻക്രണസ് സീരിയൽ ഹോസ്റ്റ്. ASH-നെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, ദയവായി കാണുകയുജി 101ഒപ്പംയുജി 115.
EZSP യും ASH യും തമ്മിലുള്ള ബന്ധം ഇനിപ്പറയുന്ന ഡയഗ്രം ഉപയോഗിച്ച് ചിത്രീകരിക്കാം:
EZSP യുടെയും ASH പ്രോട്ടോക്കോളിന്റെയും ഡാറ്റ ഫോർമാറ്റ് ഇനിപ്പറയുന്ന ഡയഗ്രം ഉപയോഗിച്ച് ചിത്രീകരിക്കാം:
ഈ പേജിൽ, സിഗ്ബീ ഗേറ്റ്വേയിൽ പതിവായി ഉപയോഗിക്കുന്ന UART ഡാറ്റയും ചില കീ ഫ്രെയിമുകളും ഫ്രെയിം ചെയ്യുന്ന പ്രക്രിയ ഞങ്ങൾ പരിചയപ്പെടുത്തും.
2. ഫ്രെയിമിംഗ്
പൊതുവായ ഫ്രെയിമിംഗ് പ്രക്രിയ ഇനിപ്പറയുന്ന ചാർട്ട് ഉപയോഗിച്ച് ചിത്രീകരിക്കാം:
ഈ ചാർട്ടിൽ, ഡാറ്റ EZSP ഫ്രെയിമിനെയാണ് അർത്ഥമാക്കുന്നത്. പൊതുവേ, ഫ്രെയിമിംഗ് പ്രക്രിയകൾ ഇവയാണ്: |No|Step|Reference|
|:-|:-|:-|
|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 ഫ്രെയിം ഫോർമാറ്റ് വ്യത്യാസപ്പെട്ടിരിക്കാമെന്നതിനാൽ, ഹോസ്റ്റും NCP-യും നിർബന്ധമായും ഉപയോഗിക്കേണ്ട ഒരു നിബന്ധനയുണ്ട്.വേണംഅതേ EZSP പതിപ്പിൽ പ്രവർത്തിക്കുന്നു. അല്ലെങ്കിൽ, അവർക്ക് പ്രതീക്ഷിച്ചതുപോലെ ആശയവിനിമയം നടത്താൻ കഴിയില്ല.
അത് നേടുന്നതിന്, ഹോസ്റ്റിനും എൻസിപിക്കും ഇടയിലുള്ള ആദ്യത്തെ കമാൻഡ് പതിപ്പ് കമാൻഡ് ആയിരിക്കണം. മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, മറ്റേതെങ്കിലും ആശയവിനിമയത്തിന് മുമ്പ് ഹോസ്റ്റ് എൻസിപിയുടെ ഇസെഡ്എസ്പി പതിപ്പ് വീണ്ടെടുക്കണം. ഹോസ്റ്റ് വശത്തിന്റെ ഇസെഡ്എസ്പി പതിപ്പിൽ നിന്ന് EZSP പതിപ്പ് വ്യത്യസ്തമാണെങ്കിൽ, ആശയവിനിമയം നിർത്തലാക്കണം.
പതിപ്പ് കമാൻഡിന്റെ ഫോർമാറ്റിന് കഴിയും എന്നതാണ് ഇതിന് പിന്നിലെ അന്തർലീനമായ ആവശ്യകത.ഒരിക്കലും മാറരുത്. EZSP പതിപ്പ് കമാൻഡ് ഫോർമാറ്റ് താഴെ കൊടുത്തിരിക്കുന്നു:
链接:https://zhuanlan.zhihu.com/p/339700391
来源:知乎
നിങ്ങൾ
2.2. ഡാറ്റ റാൻഡമൈസേഷൻ
വിശദമായ റാൻഡമൈസേഷൻ പ്രക്രിയ UG101 ന്റെ സെക്ഷൻ 4.3 ൽ വിവരിച്ചിരിക്കുന്നു. മുഴുവൻ EZSP ഫ്രെയിമും റാൻഡം ചെയ്യപ്പെടും. റാൻഡമൈസേഷൻ EZSP ഫ്രെയിമും ഒരു സ്യൂഡോ-റാൻഡം സീക്വൻസും എക്സ്ക്ലൂസീവ്-OR ചെയ്യുക എന്നതാണ്.
സ്യൂഡോ-റാൻഡം സീക്വൻസ് സൃഷ്ടിക്കുന്നതിനുള്ള അൽഗോരിതം താഴെ കൊടുക്കുന്നു.
- റാൻഡ്0 = 0×42
- റാണ്ടിയുടെ ബിറ്റ് 0 0 ആണെങ്കിൽ, റാണ്ടി+1 = റാണ്ടി >> 1
- റാണ്ടിയുടെ ബിറ്റ് 0 1 ആണെങ്കിൽ, റാണ്ടി+1 = (റാണ്ടി >> 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