कैसे दो UARTS जानते हैं कि किस बॉड दर का उपयोग करना है?


14

मैं UART के लिए मानक प्रोटोकॉल के बारे में पढ़ रहा हूं और मुझे लगता है कि यदि UART को प्राप्त करने वाले को यह पता नहीं है कि डेटा किस बॉड दर पर प्रसारित किया गया है, तो बहुत सारी समस्याएं होंगी। यदि मान लिया गया बॉड दर उस बॉड दर से कम है जिसमें डेटा प्रसारित होता है, तो ऐसे बिट्स होंगे जो प्राप्त UART द्वारा 'देखे' नहीं जाएंगे। दूसरी ओर यदि रिसीवर द्वारा उपयोग की जाने वाली बॉड दर उस बॉड दर की तुलना में अधिक है जिसमें डेटा प्रसारित होता है, तो ऐसे बिट्स होंगे जो दो बार गिने जाएंगे और परिणामस्वरूप डेटा को गलत तरीके से 'पढ़ा' जाएगा।

UART के आसपास मेरा ज्ञान यह है कि जब रेखा निष्क्रिय होती है, तो उसे '1' में रखा जाता है, स्टार्ट बिट एक '0' है और स्टॉप बिट '1' है। इसके अलावा, स्टॉप बिट '1' होने से '1' से कोई फर्क नहीं पड़ता है जब लाइन निष्क्रिय होती है या अंतर करने का कोई तरीका होता है?

दो संचार UART की पहली सहमति है कि वे किस बॉड दर का उपयोग करेंगे? यदि हाँ, तो वे इसे कैसे करते हैं?


"स्टॉप बिट" को समान रूप से "आइडल स्टेट में वापसी" कहा जा सकता है, लेकिन इसे थोड़ा सा बनाकर, इसकी एक परिभाषित न्यूनतम लंबाई है, लेकिन न्यूनतम समय की गारंटी के बाद, लाइन "1" राज्य में रहेगी अगला चरित्र आता है
पीटर बेनेट

जब तक कुछ XD काम नहीं करता, वे बेतरतीब ढंग से सामान्य बॉड दरों को बदल सकते हैं।
ब्रैडमैन 75

3
हेस ने UART को अपने मोडेम में उसी बॉड रेट को सेट करने देने का एक तरीका शुरू किया, जैसा कि टर्मिनल अपने कमांड के शुरू में एक कैरेक्टर सीक्वेंस 'AT' का इस्तेमाल करके उससे बात करता है। यह आमतौर पर UART द्वारा डिकोड नहीं किया गया था, लेकिन वास्तविक समय फर्मवेयर द्वारा जो UART को कमांड लाइन के बाकी हिस्सों को प्राप्त करने के लिए कॉन्फ़िगर करेगा। इसने मूल रूप से स्टार्ट बिट की चौड़ाई का पता लगाया, और समता कैसे निर्धारित की गई।
infixed

@infix तो अगर मैं UART के लिए वेरिलॉग कोड को संशोधित करने या बनाने की योजना बना रहा हूं, तो मैं इसे बना सकता हूं ताकि यह इस 'एटी' अनुक्रम का पता लगा सके और वहां से इसकी बॉड दर को समायोजित कर सके? मैं इसे उच्चतम बॉड दर पर आरंभ करने के बारे में सोच रहा था ताकि यह सब कुछ पर कब्जा कर ले और वहां से 'एटी' अनुक्रम को खोजे।
बटिबोट 323

एक UART- आधारित संचार प्रोटोकॉल (जिसका नाम लिन है) जिसे ऑटोमोटिव इंडस्ट्री में बहुत देखा जा सकता है, इसमें ऑटो-बॉड डिटेक्शन मैकेनिज्म है, लेकिन फिर भी मास्टर और स्लेव नोड्स को "डेटा लंबाई और स्टॉप बिट्स लंबाई के मामले में" मैच करना पड़ता है। जिसका मतलब है, केवल बॉड दर का पता लगाना पर्याप्त नहीं है।
रोहत काइलके

जवाबों:


26

साधारण UART को वांछित बॉड दर (साथ ही साथ शब्द लंबाई, स्टॉप बिट्स, समता, आदि) को पारंपरिक रूप से मानव द्वारा पूर्व-कॉन्फ़िगर किया जाना है।

कई दशकों से हालांकि कुछ सेटिंग्स में "ऑटो बॉड" डिटेक्शन का कार्यान्वयन हुआ है, जो आमतौर पर बॉड दर को कम करने के लिए वेवफॉर्म की टाइमिंग प्रमुख विशेषताओं द्वारा काम करता है। प्रारंभिक संस्करणों को प्रेषित होने के लिए एक ज्ञात चरित्र की आवश्यकता थी, लेकिन अधिक परिष्कृत संस्करण अधिक मनमाने डेटा से दर को खोजने में सक्षम हो सकते हैं।

UART प्राप्त करने वाली आम तौर पर एक स्थानीय घड़ी होती है जो तेज दर से चलती है - आमतौर पर बॉड दर 8 या 16 गुना। इसका उपयोग आने वाले सिग्नल को नमूना करने और एक शब्द के भीतर बिट्स का पता लगाने के लिए किया जाता है जो कुछ प्रतिशत त्रुटि को सहन कर सकता है। यहां तक ​​कि दो क्रिस्टल ऑसिलेटर्स पूरी तरह से दरों से मेल नहीं खाते, लेकिन त्रुटि सहिष्णुता कुछ कम सटीक स्रोतों के उपयोग की अनुमति दे सकती है, कभी-कभी छंटनी की गई ऑन-चिप ऑसिलेटर्स, आदि। यह इस तथ्य को समायोजित करने में भी मदद कर सकता है कि लोकप्रिय ऑसिलेटर फ्रीक्वेंसी को विभाजित कर सकता है। कुछ बॉड दरों के लिए एक गलत अनुमान - पुराने दिनों में, UART मास्टर घड़ियों को कभी-कभी लोकप्रिय बॉड दरों तक पहुंचने के लिए विशेष आवृत्तियों की आवश्यकता होती है, उदाहरण के लिए 8051 परिवार पर 11.0592 मेगाहर्ट्ज।


2
ऑटो बॉड डिटेक्शन पर मेरी परिकल्पना किनारों के बीच किनारों और समय को खोजने के लिए एक साथ काम करने वाला टाइमर और काउंटर हो सकता है?
ammar.cma

1
समस्या यह है कि कोई एल्गोरिथ्म नहीं है जो एक मध्यस्थ "यूर्ट धारावाहिक" तरंग ले सकता है और बॉड्रेट को मज़बूती से निर्धारित कर सकता है। आप आसानी से पर्याप्त रूप से संक्रमणों के बीच न्यूनतम समय पा सकते हैं, लेकिन यह किसी एकल अवधि का प्रतिनिधित्व नहीं करता है।
पीटर ग्रीन

एक एल्गोरिथ्म मौजूद है (मैंने इसे विभिन्न स्थानों पर "ऑटो-बॉडिंग" कहा है) लेकिन जब UART चिप के संसाधन-सीमित दायरे में लागू किया जाता है, तो कभी-कभी ऐसा करने का एकमात्र तरीका कुछ भेजे गए डेटा का उपभोग करके होता है और अंशांकन के लिए इसका उपयोग करना जो शेष सत्र के लिए जारी रहेगा। यह अक्सर वांछनीय नहीं है। यदि सॉफ़्टवेयर में किया जाता है और थोड़ी विलंबता की अनुमति दी जाती है, तो कम से कम कम गति (200KB / s से कम) के लिए डेटा (बिना अस्थायी रूप से विश्लेषण के लिए इसे स्टोर करके) का उपभोग किए बिना ऐसा करना तुच्छ है। उच्च गति आगे की कठिनाइयों को प्रस्तुत करती है।
वॉसनेम

8

दो यूएआरटीएस प्रलेखन के माध्यम से और ऑपरेटर द्वारा उपयोगकर्ता द्वारा बॉड दर पर "सहमति" देते हैं और हैंडशेक प्रोटोकॉल, स्टॉप बिट आकार, आदि सहित हाथों से बॉड दर निर्धारित करते हैं।


1
..... इंटरफ़ेस के दोनों सिरों के लिए।
माइकल करास

2

हाँ, सब कुछ मैन्युअल रूप से सेट किया गया है, जो अक्सर थोड़ा दर्द होता है, खासकर जब सिस्टम खराब दस्तावेज होते हैं (मैं आपको देख रहा हूं, हर एम्बेडेड सिस्टम कभी भी)।

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

यदि आप अन्य प्रोटोकॉल में थोड़ा और आगे बढ़ने में रुचि रखते हैं तो USB बातचीत पर इस वेबसाइट को देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.