రచయిత: TorchIoTBootCamp
లింక్: https://zhuanlan.zhihu.com/p/339700391
నుండి: Quora
1. పరిచయం
సిలికాన్ ల్యాబ్స్ జిగ్బీ గేట్వే డిజైన్ కోసం హోస్ట్+NCP సొల్యూషన్ను అందించింది. ఈ ఆర్కిటెక్చర్లో, హోస్ట్ 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ప్రోటోకాల్, సంక్షిప్తంగాఅసమకాలిక సీరియల్ హోస్ట్. ASH గురించి మరిన్ని వివరాల కోసం, దయచేసి చూడండిUG101మరియుUG115.
EZSP మరియు ASH మధ్య సంబంధాన్ని క్రింది రేఖాచిత్రం ద్వారా వివరించవచ్చు:
EZSP మరియు ASH ప్రోటోకాల్ యొక్క డేటా ఆకృతిని క్రింది రేఖాచిత్రం ద్వారా వివరించవచ్చు:
ఈ పేజీలో, మేము UART డేటా మరియు జిగ్బీ గేట్వేలో తరచుగా ఉపయోగించే కొన్ని కీలక ఫ్రేమ్లను ఫ్రేమ్ చేసే ప్రక్రియను పరిచయం చేస్తాము.
2. ఫ్రేమింగ్
సాధారణ ఫ్రేమ్ ప్రక్రియను క్రింది చార్ట్ ద్వారా వివరించవచ్చు:
ఈ చార్ట్లో, డేటా అంటే EZSP ఫ్రేమ్. సాధారణంగా, ఫ్రేమింగ్ ప్రక్రియలు: |No|Step|Reference|
|:-|:-|:-|
|1|EZSP ఫ్రేమ్ని పూరించండి|UG100|
|2|డేటా రాండమైజేషన్|UG101 యొక్క సెక్షన్ 4.3|
|3|నియంత్రణ బైట్ను జోడించండి|UG101 యొక్క చాప్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 మధ్య మొదటి కమాండ్ తప్పనిసరిగా వెర్షన్ కమాండ్ అయి ఉండాలి. మరో మాటలో చెప్పాలంటే, ఏదైనా ఇతర కమ్యూనికేషన్కు ముందు హోస్ట్ తప్పనిసరిగా NCP యొక్క EZSP సంస్కరణను తిరిగి పొందాలి. హోస్ట్ సైడ్ యొక్క EZSP వెర్షన్తో EZSP వెర్షన్ భిన్నంగా ఉంటే, కమ్యూనికేషన్ తప్పనిసరిగా నిలిపివేయబడాలి.
దీని వెనుక ఉన్న అవ్యక్త ఆవశ్యకత ఏమిటంటే, వెర్షన్ కమాండ్ ఫార్మాట్ చేయగలదుఎప్పుడూ మార్చవద్దు. EZSP వెర్షన్ కమాండ్ ఫార్మాట్ క్రింది విధంగా ఉంది:
链接:https://zhuanlan.zhihu.com/p/339700391
来源: 知乎
著作权归作者所有。商业转载联系作者获得授权,非商业转载请注明商
2.2 డేటా రాండమైజేషన్
వివరణాత్మక రాండమైజేషన్ ప్రక్రియ UG101లోని సెక్షన్ 4.3లో వివరించబడింది. మొత్తం EZSP ఫ్రేమ్ యాదృచ్ఛికంగా మార్చబడుతుంది. రాండమైజేషన్ అనేది ప్రత్యేకమైనది-OR EZSP ఫ్రేమ్ మరియు నకిలీ-రాండమ్ సీక్వెన్స్.
సూడో-రాండమ్ సీక్వెన్స్ను రూపొందించే అల్గోరిథం క్రింద ఉంది.
- రాండ్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