2008-11-09 15 views
7

मुझे एसिंक्रोनस संचार में बहुत कुछ पता है, पैकेट शुरू होने से शुरू होता है।स्टार्ट बिट बनाम स्टार्ट बाइट

लेकिन एक प्रारंभ बिट सिर्फ 1 या 0 है। आप अंतिम पैकेट से अंत बिट से प्रारंभिक बिट को कैसे अलग करते हैं?

पूर्व। यदि मैं अपना प्रारंभ बिट 0 होना चाहता हूं और मेरा अंत बिट 1 होना चाहिए। और मुझे 0 (डेटा स्ट्रीम ए) 1 0 (डेटा स्ट्रीम बी) 1, डेटा स्ट्रीम होने पर मुझे रोकने के लिए क्या है सी जिसमें "(डेटा स्ट्रीम ए) 1 0 (डेटा स्ट्रीम बी) की एक ही सामग्री है"?

क्या बीईटीई शुरू करने के लिए और अधिक सुविधाजनक नहीं है और फिर बिट्स के संयोजन के लिए डेटा स्ट्रीम की जांच करें? इससे प्रारंभ/अंत बिट के बीच भ्रमित होने की संभावना कम हो जाएगी।

उत्तर

9

शानदार सवाल! अधिकांश एसिंक्रोनस संचार बिट को रोकता है, जो स्टार्ट बिट का पूरक है, यह सुनिश्चित करना कि प्रत्येक नया प्रतीक स्टॉप-टू-स्टार्ट संक्रमण से शुरू होता है।

उदाहरण: चलो पात्रों ABC, जो ASCII 65, 66, और 67 हैं संचारित:

A = 65 = 0x41 = 0100 0001 
B = 66 = 0x42 = 0100 0010 
C = 67 = 0x43 = 0100 0011 

चलो यह भी मान लें (मनमाने ढंग से) 0 है कि शुरू बिट और बंद बिट 1 है, और डेटा एमएसबी से एलएसबी तक प्रेषित किया जाता है। जब कोई डेटा प्रसारित नहीं होता है तो ट्रांसमीटर स्टॉप (1) स्थिति में होगा। तो रिसीवर इस देख सकते हैं:

Data: ....1111 0010000011 111 0010000101 0010000111 11111.... 
     (quiet)^ A $ ^ B $^ C $ (quiet) 
ASCII ग्राफिक्स के लिए क्षमा याचना के साथ

, डेटा रोक की एक श्रृंखला के होते हैं (1) बिट्स, जबकि चैनल निष्क्रिय है। जब ट्रांसमीटर एक चरित्र भेजने के लिए तैयार होता है, तो यह एक प्रारंभ (0) बिट (^ के साथ चिह्नित) के बाद, वर्ण कोड के बाद, और एक स्टॉप (1) बिट ($ के साथ चिह्नित) के साथ समाप्त होता है। यह तब तक स्टॉप बिट्स भेजना जारी रखता है जब तक कि अगला चरित्र प्रसारित न हो जाए, एक और स्टार्ट बिट से शुरू होता है।

हम बिट्सबाइट्स की बजाय दक्षता का उपयोग करने का कारण है। योजना ऊपर 10 बिट की आवश्यकता है (1 शुरू + 8 डेटा + 1 रोक) डेटा के 8 बिट संचारित करने के लिए, का एक भूमि के ऊपर में जिसके परिणामस्वरूप (10 - 8)/8 = 1/4 = 25% । अगर हम बाइट्स को प्रारंभ और बंद करते हैं, तो हमें डेटा के प्रत्येक बाइट के लिए 3 बाइट्स ट्रांसमिट करना होगा, जो (3 - 1)/1 = 2 = 200% का ओवरहेड होगा। यदि स्टार्ट, डेटा और स्टॉप बाइट्स प्रत्येक 8 बिट्स थे, तो हमें प्रत्येक अक्षर के लिए 10 बिट्स के बजाय 24 बिट्स ट्रांसमिट करना होगा, इसलिए डेटा भेजने के लिए लगभग 2 1/2 बार लगेंगे!

+0

ऐसा लगता है कि आपके "उदाहरण" में एक "शांत"/निष्क्रिय चरण है। एक कार्यक्रम में, क्या मैं इसे टाइमआउट के साथ जांचूंगा? – Steve

+0

मैंने कभी भी एक कार्यान्वयन नहीं देखा है जिस तरह से आप वर्णन करते हैं, लगातार लाइन को निष्क्रिय करते समय स्टॉप बिट्स भेजते हैं, जो कोई समझ नहीं आता है। –

+1

मैं एक हार्डवेयर लड़का हूँ। यदि आप अपने पीसी के सीरियल पोर्ट की प्राप्त लाइन पर वोल्टेज की जांच करते हैं, तो यह * हमेशा * 0 या 1 स्तर पर होगा (या उनके बीच तेजी से संक्रमण)। स्टार्ट बिट का बिंदु "स्टॉप" से संक्रमण को मजबूर करना है - जो "निष्क्रिय" जैसा ही है। –

0

यहाँ जिस तरह से शुरू करने और बंद करो बिट्स आम तौर पर काम करते हैं:

  1. एक शुरुआत बिट भेज दिया जाता है, कहते हैं कि 1. यह रिसीवर है कि डेटा के टुकड़े की एक निर्धारित संख्या प्रसारित किया जाएगा करने के लिए इंगित करता है, 8 का कहना है।
  2. डेटा के 8 बिट भेजे जाते हैं।
  3. एक स्टॉप बिट भेजा जाता है, 0 कहें। यह इंगित करता है कि डेटा के 8 बिट भेजे गए हैं।

यदि अधिक डेटा भेजा जाना है, तो प्रत्येक बाइट को प्रारंभिक बिट के साथ शुरू किया जाना चाहिए और स्टॉप बिट के साथ समाप्त किया जाना चाहिए। ट्रांसमीटर और रिसीवर को इस बात पर सहमत होना चाहिए कि प्रत्येक स्टार्ट बिट के लिए डेटा के कितने बिट भेजे जाते हैं ताकि रिसीवर डेटा से स्टॉप बिट को अलग करने में सक्षम हो। कभी-कभी स्टार्ट बिट वास्तव में कई बिट्स या बाइट भी होता है, लेकिन विचार वही है। रिसीवर डेटा फ्रेम के अंत को निर्दिष्ट करता है जब यह पूर्व-निर्दिष्ट डेटा बिट्स प्राप्त करने के बाद स्टॉप बिट को देखता है। कभी-कभी स्टॉप बिट से पहले एक सामान्य त्रुटि-पहचान तंत्र प्रदान करने के लिए एक समानता बिट भेजा जाता है।

0

यह सभी प्रोटोकॉल निर्भर है। आप कह सकते हैं कि प्रारंभ प्रतीक के बाद आप एन प्रतीकों की अपेक्षा करेंगे या जब तक आप स्टॉप प्रतीक का सामना नहीं करेंगे तब तक आप पढ़ेंगे।

कहाँ प्रतीक colud किसी भी एन-बिट अनुक्रम हो (बिट और बाइट भी शामिल है।)

दरअसल, बिट्स के साथ अपने उदाहरण वास्तव में एक प्रोटोकॉल जो बिट्स के बजाय बाइट्स का उपयोग करता है करने के लिए लागू होते हैं।

आप 00000000 धारा एक 11111111 00000000 धारा बी 11111111. भेज इस मामले में कहते हैं कि तुम अब भी धारा सी के साथ यह भ्रमित हो सकते हैं = एक 11111111 00000000 धारा बी

आमतौर पर एक शुरुआत सा प्रयोग किया जाता है धारा क्योंकि एक वोल्टेज स्तर परिवर्तन एक ईवेंट ट्रिगर कर सकते हैं (flip flops में किनारे ट्रिगरिंग देखें।) दूसरी ओर एक बिट ट्रिगर के साथ एक प्रारंभ प्रतीक का उपयोग किसी ईवेंट को ट्रिगर करने के अलावा दो सिस्टम के घड़ियों को सिंक्रनाइज़ करने के लिए किया जाएगा। इसका एक उदाहरण एक पाल सिग्नल होगा।

-2

प्रारंभ और रोक बिट्स teletypes के दिनों से आते हैं। वे अनिवार्य रूप से दालें थे जो यांत्रिक हार्डवेयर सेट को क्रमबद्ध करने के लिए समय लेते थे। डॉस टेक्स्ट फ़ाइल लाइन सीआर एलएफ के साथ समाप्त हो जाती है, जो सचमुच कैरिज को कॉलम 1 पर वापस ले जाती है, और प्लैटन एक लाइन अग्रिम करने के लिए होती है। मुझे लगता है कि यह क्रम में है क्योंकि सीआर के होने में अधिक समय लगता है, और एलएफ प्रभावी रूप से समानांतर में हो सकता है।

यह पता लगाना थोड़ा कठिन है। आपको थोड़ी सी स्ट्रीम देखने की ज़रूरत है। समय के साथ आपको इसे पहचानने में सक्षम होना चाहिए, क्योंकि डेटा सामान्य रूप से ASCII के आसपास प्रारंभ/रोक बिट्स के साथ होता है। आम तौर पर यह कोई मुद्दा नहीं है, क्योंकि इसे UART द्वारा नियंत्रित किया जाता है जो COM पोर्ट चलाता है।

+0

आप भ्रमित हो सकते हैं और पेसिंग वर्णों के साथ बिट्स को रोक सकते हैं, जिन्हें हार्डवेयर "कैच अप" तक ट्रांसमिशन में देरी के लिए डिज़ाइन किया गया है। रिटिवर के साथ रिसीवर को सिंक्रनाइज़ करने के लिए बिट्स शुरू करें और रोकें, इसलिए यह सही समय पर प्रत्येक बिट के लिए "दिखता है"। –

+0

यह उत्तर बहुत से अंक में गलत है ... वास्तव में EvilTeach। – jpinto3912

+0

और मैं इसे दूसरों को चेतावनी के रूप में छोड़ रहा हूं। – EvilTeach

1

कोई एक प्रारंभ बाइट को एक संकेत के रूप में परिभाषित कर सकता है कि एक संदेश शुरू हो रहा है (और ASCII SOH, STX, और ETX कोड ऐसे उद्देश्यों के लिए लक्षित थे)। हालांकि, डेटा-ट्रांसमिशन उपकरण (आरएस 232 सी और बाद में) के कनेक्शन के लिए मानक हार्डवेयर और प्रोटोकॉल निम्न स्तर पर संचालित होते हैं, और यह आमतौर पर न तो संभव है और न ही उस व्यवस्था को बदलने के लिए वांछनीय है (विशेष रूप से सॉफ़्टवेयर के माध्यम से)।

उच्च प्रदर्शन सिंक्रोनस डेटा ट्रांसमिशन स्कीम, जैसे स्थानीय क्षेत्र नेटवर्क और विस्तृत क्षेत्र संचरण प्रणाली पर उपयोग किए जाने वाले विस्तृत फ्रेम मार्करों का उपयोग करते हैं। फ्रेम मार्कर बिट्स का एक अलग पैटर्न है जो संदेश डेटा के लिए स्ट्रीम में कभी नहीं होता है। आमतौर पर एक विशेष पुनर्लेखन नियम होता है जो अनिवार्य रूप से एक समान बिट पैटर्न की किसी भी डेटा-घटना घटना से "बच निकलता है" ताकि ट्रांसमिशन उपकरण इसे फ्रेम मार्कर के रूप में नहीं देख पाएंगे। इन बच निकले पैटर्न प्राप्तकर्ता द्वारा पुनर्निर्मित किए जाते हैं ताकि प्रेषक और रिसीवर को इस पर ध्यान देना पड़े। ये व्यवस्थाएं विशेष हार्डवेयर को और भी महत्वपूर्ण बनाती हैं, जैसे कि विशिष्ट कंप्यूटर इंटरफेस कार्ड (इन दिनों, मदरबोर्ड चिप) में व्यक्तिगत कंप्यूटर पर।पर एसिंक्रोनस क्रमिक संचार

पृष्ठभूमि

यह चरित्र फ्रेम (शुरू बिट और प्रारंभिक रोक/भरने सहित) की अवधि के भीतर चरित्र/डेटा फ्रेम और तुल्यकालिक के बीच अतुल्यकालिक रूप में अतुल्यकालिक धारावाहिक प्रसारण के बारे में सोच के लिए उपयोगी है।

इस योजना के साथ, फ्रेम के बीच लगातार भरने वाला सिग्नल होता है और आमतौर पर यह कम से कम एक डेटा-बिट चौड़ा होता है, हालांकि कुछ व्यवस्थाओं को 1.5-बिट या दो-बिट स्टॉप/फिल की आवश्यकता होती है। स्टॉप "बिट" एक ही सिग्नल स्तर का उपयोग करता है और एक और स्टार्ट बिट आने से पहले न्यूनतम भरने की अवधि माना जा सकता है।

जब कोई फ्रेम आ रहा है, तो पूर्व निर्धारित संख्या के बिट्स के साथ सिंक्रनाइज़ करना आवश्यक है, जिनकी अपेक्षा की जाती है। भरने से एक विपरीत स्तर सिग्नल में संक्रमण प्रारंभ बिट द्वारा पूरा किया जाता है जो हमेशा स्टॉप/फिल स्तर के विपरीत होता है। बिट्स के नमूने को बाद की बिट-आगमन अवधि के मध्य में होने का समय दिया जा सकता है।

तकनीकी रूप से, यदि अधिकतम दर पर फ्रेम भेजे जा रहे थे, तो तुरंत किसी भी स्टॉप/फिल को भेजने के लिए आवश्यक नहीं होगा, तुरंत अगले फ्रेम के प्रारंभिक बिट पर आगे बढ़ना होगा। हालांकि, प्रारंभ-बिट संक्रमण से पहले कम-से-कम एक बिट मूल्य भरने पर गिनती प्रेषक और रिसीवर को सिंक्रनाइज़ करने में मदद करती है।

यदि आप एसिंक्रोनस धाराओं को कुंजीपटल का उपयोग करके महत्वपूर्ण अवसाद से एन्कोड किए जाने के बारे में सोचते हैं, तो आप चरित्र फ्रेम के बीच मनमाने ढंग से भरने की अनुमति को देख सकते हैं। एक बार यह ज्ञात हो जाने के बाद कि कौन सा फ्रेम अगली भेजना है, इसे कम से कम एक बिट लायक पूर्व स्टॉप/भरने के बाद, सहमत बिट बिट पर, इसके प्रारंभिक बिट के साथ तुरंत डाला जा सकता है।

यह भी ध्यान देने योग्य है कि, सामान्य कम गति वाले असिंक्रोनस ट्रांसमिशन में, केवल दो प्रकार के बिट्स/स्तर होते हैं, इसलिए एकमात्र तरीका भरने के विरोध में डेटा की उपस्थिति को एक मार्कर योजना द्वारा अलग किया जा सकता है इस तरह फ्रेम की शुरुआत विशिष्ट रूप से पता लगाने योग्य है और फ्रेम का अंत पूर्वनिर्धारित है (जब तक कि एक अधिक परिष्कृत चर-लंबाई फ्रेम संरचना आमतौर पर एसिंक्रोनस सीरियल संचार में उपयोग नहीं की जाती)। एक रिसीवर के लिए कुछ अतिरिक्त समझौते के बिना ट्रांसमीटर की बिट दर को खोजने के लिए वास्तव में मुश्किल है, जैसे पहचानने योग्य डेटा अनुक्रम की तलाश करना, जिससे कोई बिट दर अनुमान लगा सकता है जो गलत फॉर्म में आने पर सही तरीके से पहुंच जाएगा।

हालांकि उच्च स्पीड मोडेम अब जटिल एनालॉग संकेतों को प्रेषित करते हैं जिन्हें दो सरल सिग्नल स्तरों के संदर्भ में वर्णित नहीं किया गया है, आरएस 232 सी (और बाद में मोड) कंप्यूटर यूएआरटी और मॉडेम पर डेटा युग्मन के बीच डिजिटल संचार है वर्णित के रूप में बहुत ज्यादा।

उच्च गति मोडेम भी, एक दूर के अंत बिंदु के साथ समन्वयन करते एक कनेक्शन शुरू होता है के रूप में आप संकेत ऑडियो को सुनने के द्वारा बता सकते हैं के लिए अतिरिक्त क्षमताओं की है। इसके अलावा, कंप्यूटर कि कंप्यूटर और मॉडेम के बीच पेसिंग के लिए उपयोग किया जाता है ताकि भेजने पार्टी नए डेटा फ्रेम प्रेषित नहीं करता तेजी से प्राप्त पार्टी (या तो कंप्यूटर या मॉडेम) की तुलना में करने के लिए सीरियल केबल में अलग संकेत लाइनों रहे हैं स्वीकार कर सकते हैं उन्हें। लेकिन एक फ्रेम, एक बार शुरू हुआ, हमेशा सहमत सिंक्रोनस गति पर शुरू किया जाता है।

विकिपीडिया का asynchronous serial communication का अच्छा विवरण है, जो कंप्यूटर धारावाहिक बंदरगाहों का उपयोग करता है।

एक आम अति-सरलीकरण है जो बताता है कि स्टॉप बिट डेटा की लंबाई निर्धारित करता है। ऐसा नहीं है। स्टॉप बिट एक और डेटा बिट के लिए एक स्तर की तरह दिखता है। जिस तरह से स्टॉप बिट और अगली स्टार्ट बिट तक की अवधि, पहचान की जाती है, उस बिट दर को जानकर, जिसमें फ्रेम डेटा और स्टार्ट/स्टॉप बिट्स ट्रांसमिट किए जा रहे हैं और यह जानकर कि फ्रेम में कितने बिट्स हैं।अन्यथा, डेटा फ्रेम के हिस्से के रूप में उस ध्रुवीयता के एक और बिट से स्टॉप बिट को अलग करने का कोई तरीका नहीं है।

संबंधित मुद्दे