రచయిత: TorchIoTBootCamp
లింక్: https://zhuanlan.zhihu.com/p/339700391
నుండి: కోరా
1. పరిచయం
జిగ్బీ గేట్వే డిజైన్ కోసం సిలికాన్ ల్యాబ్స్ హోస్ట్+NCP సొల్యూషన్ను అందించింది. ఈ ఆర్కిటెక్చర్లో, హోస్ట్ UART లేదా SPI ఇంటర్ఫేస్ ద్వారా NCPతో కమ్యూనికేట్ చేయగలదు. సాధారణంగా, UART SPI కంటే చాలా సరళంగా ఉంటుంది కాబట్టి దీనిని ఉపయోగిస్తారు.
సిలికాన్ ల్యాబ్స్ హోస్ట్ ప్రోగ్రామ్ కోసం ఒక నమూనా ప్రాజెక్ట్ను కూడా అందించింది, ఇది నమూనాZ3గేట్వేహోస్ట్
. ఈ నమూనా Unix-వంటి వ్యవస్థపై నడుస్తుంది. కొంతమంది కస్టమర్లు RTOSలో అమలు చేయగల హోస్ట్ నమూనాను కోరుకోవచ్చు, కానీ దురదృష్టవశాత్తు, ప్రస్తుతానికి RTOS ఆధారిత హోస్ట్ నమూనా లేదు. వినియోగదారులు RTOS ఆధారంగా వారి స్వంత హోస్ట్ ప్రోగ్రామ్ను అభివృద్ధి చేసుకోవాలి.
అనుకూలీకరించిన హోస్ట్ ప్రోగ్రామ్ను అభివృద్ధి చేసే ముందు UART గేట్వే ప్రోటోకాల్ను అర్థం చేసుకోవడం ముఖ్యం. UART ఆధారిత NCP మరియు SPI ఆధారిత NCP రెండింటికీ, హోస్ట్ NCPతో కమ్యూనికేట్ చేయడానికి EZSP ప్రోటోకాల్ను ఉపయోగిస్తుంది.ఇజెడ్ఎస్పిఅంటే సంక్షిప్తంగాEmberZnet సీరియల్ ప్రోటోకాల్, మరియు ఇది నిర్వచించబడిందియుజి 100UART ఆధారిత 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 యొక్క కంట్రోల్ బైట్|చాప్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 ఫ్రేమ్ యాదృచ్ఛికం చేయబడుతుంది. రాండమైజేషన్ అనేది EZSP ఫ్రేమ్ మరియు ఒక సూడో-రాండమ్ సీక్వెన్స్ను ఎక్స్క్లూజివ్-OR చేయడం.
సూడో-రాండమ్ సీక్వెన్స్ను ఉత్పత్తి చేసే అల్గోరిథం క్రింద ఉంది.
- రాండ్0 = 0×42
- రాండి యొక్క బిట్ 0 0 అయితే, రాండి+1 = రాండి >> 1
- రాండి యొక్క బిట్ 0 1 అయితే, రాండి+1 = (రాండి >> 1) ^ 0xB8
2.3. కంట్రోల్ బైట్ను జోడించండి
నియంత్రణ బైట్ అనేది ఒక బైట్ డేటా, మరియు దానిని ఫ్రేమ్ యొక్క హెడ్కు జోడించాలి. ఫార్మాట్ క్రింది పట్టికతో వివరించబడింది:
మొత్తంగా, 6 రకాల నియంత్రణ బైట్లు ఉన్నాయి. మొదటి మూడు EZSP డేటాతో కూడిన సాధారణ ఫ్రేమ్ల కోసం ఉపయోగించబడతాయి, వీటిలో DATA, ACK మరియు NAK ఉన్నాయి. చివరి మూడు సాధారణ EZSP డేటా లేకుండా ఉపయోగించబడతాయి, వీటిలో RST, RSTACK మరియు ERROR ఉన్నాయి.
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