రచయిత: టార్చ్ఐఓటీబూట్క్యాంప్
లింక్: https://zhuanlan.zhihu.com/p/339700391
క్వోరా నుండి
1. పరిచయం
సిలికాన్ ల్యాబ్స్, జిగ్బీ గేట్వే డిజైన్ కోసం హోస్ట్+NCP సొల్యూషన్ను అందించింది. ఈ ఆర్కిటెక్చర్లో, హోస్ట్ UART లేదా SPI ఇంటర్ఫేస్ ద్వారా NCPతో కమ్యూనికేట్ చేయగలదు. SPI కంటే ఇది చాలా సరళమైనది కాబట్టి, సర్వసాధారణంగా UARTను ఉపయోగిస్తారు.
సిలికాన్ ల్యాబ్స్ హోస్ట్ ప్రోగ్రామ్ కోసం ఒక నమూనా ప్రాజెక్ట్ను కూడా అందించింది, అదే నమూనా.Z3గేట్వేహోస్ట్ఈ నమూనా యూనిక్స్ లాంటి సిస్టమ్పై నడుస్తుంది. కొంతమంది వినియోగదారులు RTOS పై నడవగల హోస్ట్ నమూనాను కోరుకోవచ్చు, కానీ దురదృష్టవశాత్తు, ప్రస్తుతానికి RTOS ఆధారిత హోస్ట్ నమూనా ఏదీ అందుబాటులో లేదు. వినియోగదారులు RTOS ఆధారంగా తమ సొంత హోస్ట్ ప్రోగ్రామ్ను అభివృద్ధి చేసుకోవాలి.
అనుకూలీకరించిన హోస్ట్ ప్రోగ్రామ్ను అభివృద్ధి చేయడానికి ముందు UART గేట్వే ప్రోటోకాల్ను అర్థం చేసుకోవడం ముఖ్యం. UART ఆధారిత NCP మరియు SPI ఆధారిత NCP రెండింటిలోనూ, హోస్ట్ NCPతో కమ్యూనికేట్ చేయడానికి EZSP ప్రోటోకాల్ను ఉపయోగిస్తుంది.EZSPసంక్షిప్త రూపంఎంబర్జనెట్ సీరియల్ ప్రోటోకాల్మరియు ఇది నిర్వచించబడిందిUG100UART ఆధారిత NCP కోసం, EZSP డేటాను UART ద్వారా విశ్వసనీయంగా తీసుకువెళ్ళడానికి ఒక దిగువ పొర ప్రోటోకాల్ అమలు చేయబడుతుంది, అదేయాష్ప్రోటోకాల్, సంక్షిప్తంగాఅసింక్రోనస్ సీరియల్ హోస్ట్ASH గురించి మరిన్ని వివరాల కోసం, దయచేసి చూడండి.UG101మరియుUG115.
EZSP మరియు ASH మధ్య సంబంధాన్ని ఈ క్రింది రేఖాచిత్రం ద్వారా వివరించవచ్చు:
EZSP మరియు ASH ప్రోటోకాల్ యొక్క డేటా ఫార్మాట్ను కింది రేఖాచిత్రం ద్వారా వివరించవచ్చు:
ఈ పేజీలో, UART డేటాను ఫ్రేమ్ చేసే ప్రక్రియను మరియు Zigbee గేట్వేలో తరచుగా ఉపయోగించే కొన్ని కీ ఫ్రేమ్లను పరిచయం చేస్తాము.
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 ఫ్రేమ్ను నింపండి
UG100లోని 3వ అధ్యాయంలో EZSP ఫ్రేమ్ ఫార్మాట్ వివరించబడింది.
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 ఫ్రేమ్ యాదృచ్ఛికీకరించబడుతుంది. ఈ యాదృచ్ఛికీకరణ అనేది EZSP ఫ్రేమ్ను ఒక సూడో-యాదృచ్ఛిక శ్రేణితో ఎక్స్క్లూజివ్-OR చేయడం ద్వారా జరుగుతుంది.
సూడో-రాండమ్ సీక్వెన్స్ను రూపొందించే అల్గోరిథం క్రింద ఇవ్వబడింది.
- rand0 = 0×42
- randi యొక్క బిట్ 0, 0 అయితే, randi+1 = randi >> 1
- randi యొక్క బిట్ 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








