लेखक ot टॉर्चियोटबोटकैंप
लिंक : https: //zhuanlan.zhihu.com/p/339700391
: से Quora
1 परिचय
सिलिकॉन लैब्स ने ज़िग्बी गेटवे डिजाइन के लिए एक होस्ट+एनसीपी समाधान की पेशकश की है। इस आर्किटेक्चर में, मेजबान UART या SPI इंटरफ़ेस के माध्यम से NCP के साथ संवाद कर सकता है। आमतौर पर, UART का उपयोग किया जाता है क्योंकि यह SPI की तुलना में बहुत सरल है।
सिलिकॉन लैब्स ने मेजबान कार्यक्रम के लिए एक नमूना परियोजना भी प्रदान की है, जो नमूना हैZ3GATEWAYHOST
। नमूना एक यूनिक्स जैसी प्रणाली पर चलता है। कुछ ग्राहक एक मेजबान नमूना चाहते हैं जो एक आरटीओ पर चल सकता है, लेकिन दुर्भाग्य से, समय के लिए कोई आरटीओएस आधारित होस्ट नमूना नहीं है। उपयोगकर्ताओं को RTOS के आधार पर अपना स्वयं का होस्ट प्रोग्राम विकसित करने की आवश्यकता है।
अनुकूलित होस्ट प्रोग्राम विकसित करने से पहले UART गेटवे प्रोटोकॉल को समझना महत्वपूर्ण है। UART आधारित NCP और SPI आधारित NCP दोनों के लिए, मेजबान NCP के साथ संवाद करने के लिए EZSP प्रोटोकॉल का उपयोग करता है।ईजेडएसपीके लिए छोटा हैएम्बरज़नेट सीरियल प्रोटोकॉल, और इसे परिभाषित किया गया हैUG100। UART आधारित NCP के लिए, EZSP डेटा को UART पर मज़बूती से ले जाने के लिए एक निचली परत प्रोटोकॉल लागू किया जाता है, यही हैराखप्रोटोकॉल, के लिए छोटाअतुल्यकालिक धारावाहिक मेजबान। ऐश के बारे में अधिक जानकारी के लिए, कृपया देखें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 में चित्रित किया गया है।
ध्यान दें कि एसडीके अपग्रेड होने पर यह प्रारूप बदल सकता है। जब प्रारूप बदलता है, तो हम इसे एक नया संस्करण संख्या देंगे। नवीनतम EZSP संस्करण संख्या 8 है जब यह लेख लिखा गया है (Emberznet 6.8)।
चूंकि EZSP फ्रेम प्रारूप विभिन्न संस्करणों के बीच भिन्न हो सकता है, इसलिए एक अनिवार्य आवश्यकता है कि होस्ट और NCPअवश्यएक ही EZSP संस्करण के साथ काम करें। अन्यथा, वे उम्मीद के मुताबिक संवाद नहीं कर सकते।
इसे प्राप्त करने के लिए, होस्ट और एनसीपी के बीच पहला कमांड संस्करण कमांड होना चाहिए। दूसरे शब्दों में, होस्ट को किसी भी अन्य संचार से पहले NCP के EZSP संस्करण को पुनः प्राप्त करना चाहिए। यदि EZSP संस्करण होस्ट साइड के EZSP संस्करण के साथ अलग है, तो संचार को निरस्त कर दिया जाना चाहिए।
इसके पीछे निहित आवश्यकता यह है कि संस्करण कमांड का प्रारूप हो सकता हैकभी मत बदलो। EZSP संस्करण कमांड प्रारूप नीचे की तरह है:
链接 链接 https: //zhuanlan.zhihu.com/p/339700391
来源 知乎 知乎
著作权归作者所有。商业转载请联系作者获得授权 著作权归作者所有。商业转载请联系作者获得授权 非商业转载请注明出处。
2.2। आंकड़ा यादृच्छिकता
विस्तृत यादृच्छिककरण प्रक्रिया UG101 की धारा 4.3 में वर्णित है। पूरे EZSP फ्रेम को यादृच्छिक किया जाएगा। रैंडमाइजेशन अनन्य-या EZSP फ्रेम और एक छद्म-यादृच्छिक अनुक्रम है।
नीचे छद्म-यादृच्छिक अनुक्रम उत्पन्न करने का एल्गोरिथ्म है।
- Rand0 = 0 × 42
- यदि रैंडी का बिट 0 0 है, तो रैंडी+1 = रांडी >> 1
- यदि रैंडी का बिट 0 1 है, तो रैंडी+1 = (रैंडी >> 1) ^ 0xb8
2.3। नियंत्रण बाइट जोड़ें
नियंत्रण बाइट एक बाइट डेटा है, और इसे फ्रेम के सिर में जोड़ा जाना चाहिए। प्रारूप को नीचे दी गई तालिका के साथ चित्रित किया गया है:
पूरी तरह से, नियंत्रण बाइट्स के 6 प्रकार हैं। पहले तीन का उपयोग डेटा, ACK और NAK सहित EZSP डेटा के साथ सामान्य फ़्रेम के लिए किया जाता है। अंतिम तीन का उपयोग सामान्य EZSP डेटा के बिना किया जाता है, जिसमें RST, RSTACK और ERROR शामिल हैं।
RST, RSTACK और ERROR का प्रारूप धारा 3.1 से 3.3 में वर्णित है।
2.4। CRC की गणना करें
डेटा के अंत तक नियंत्रण बाइट से बाइट्स पर 16-बिट सीआरसी की गणना की जाती है। मानक CRCCCITT (G (x) = X16 + X12 + X5 + 1) को 0xffff के लिए आरंभ किया जाता है। सबसे महत्वपूर्ण बाइट कम से कम महत्वपूर्ण बाइट (बिग-एंडियन मोड) से पहले है।
2.5। बाइट स्टफिंग
जैसा कि UG101 की धारा 4.2 में वर्णित है, विशेष उद्देश्य के लिए उपयोग किए जाने वाले कुछ आरक्षित बाइट मान हैं। ये मान निम्न तालिका में पाए जा सकते हैं:
जब ये मान फ्रेम में दिखाई देते हैं, तो डेटा के लिए एक विशेष उपचार किया जाएगा। - आरक्षित बाइट के सामने एस्केप बाइट 0x7d डालें - उस आरक्षित बाइट के बिट 5 को उल्टा करें
नीचे इस एल्गोरिथ्म के कुछ उदाहरण दिए गए हैं:
2.6। अंतिम ध्वज जोड़ें
अंतिम चरण फ्रेम के अंत में अंतिम ध्वज 0x7e को जोड़ना है। उसके बाद, डेटा को UART पोर्ट पर भेजा जा सकता है।
3। डी-फ्रेमिंग प्रक्रिया
जब UART से डेटा प्राप्त होता है, तो हमें इसे डिकोड करने के लिए रिवर्स स्टेप्स करने की आवश्यकता होती है।
4। संदर्भ
पोस्ट टाइम: फरवरी -08-2022