UART रिसीवर घड़ी की गति


14

मैं UART की बुनियादी बातों को समझने की कोशिश कर रहा था। यह समझा जाता है

  • यह एक अतुल्यकालिक संचार प्रोटोकॉल है और इसलिए TX और RX घड़ियों एक दूसरे से स्वतंत्र हैं
  • डेटा रिसेप्शन स्टार्ट बिट और एक या अधिक स्टॉप बिट्स के उपयोग की गारंटी है। आमतौर पर रिसीवर को डेटा रेट के बारे में पता होना चाहिए ताकि रिसेप्शन के लिए उपयोग किए जाने वाले SIPO रजिस्टर को चलाने के लिए उपयुक्त घड़ी उत्पन्न की जा सके ।

यहाँ प्रश्न हैं

यह उल्लेख किया गया है कि आम तौर पर डेटा को पुनर्प्राप्त करने के लिए 16X बिट दर की एक घड़ी का उपयोग किया जाता है। तो bps की क्लॉक फ्रीक्वेंसी कैसे संभव है? UART रिसीवर में नियोजित क्लॉकिंग तंत्र का अध्ययन करने के लिए कृपया मुझे कुछ संदर्भ प्रदान करें।

जवाबों:


18

ट्रांसमीटर और रिसीवर घड़ियां एक दूसरे से स्वतंत्र हैं, जिस तरह से वे स्वतंत्र रूप से उत्पन्न होते हैं, लेकिन उचित ट्रांसमिशन सुनिश्चित करने के लिए उन्हें अच्छी तरह से मेल खाना चाहिए।

T0T0T0×T0शुरुआत बिट का गिरता हुआ किनारा है। प्रारंभ बिट का नमूना लेना वास्तव में आवश्यक नहीं है (आप जानते हैं कि यह कम है) यह पता लगाने के लिए उपयोगी है कि प्रारंभ का किनारा स्पाइक नहीं था।

यहाँ छवि विवरण दर्ज करें

×

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

सैंपलिंग क्लॉक बिट दर से प्राप्त नहीं होता है, यह दूसरा तरीका है। 9600 बीपीएस के लिए आपको सैंपलिंग क्लॉक को 153 600 हर्ट्ज पर सेट करना होगा, जिसे आप माइक्रोकंट्रोलर की क्लॉक फ्रीक्वेंसी से एक प्रीकालर के माध्यम से प्राप्त करेंगे। फिर बिट क्लॉक 16 से एक और विभाजन से प्राप्त होता है।

बेजोड़ घड़ियाँ
यदि रिसीवर की घड़ी ट्रांसमीटर के साथ समकालिक नहीं है तो यह क्या होगा:

यहाँ छवि विवरण दर्ज करें

रिसीवर की घड़ी 6.25% धीमी है, और आप देख सकते हैं कि हर अगले बिट के लिए नमूना बाद में और बाद में होगा। एक विशिष्ट UART ट्रांसमिशन में 10 बिट्स होते हैं: 1 स्टार्ट बिट, 8 डेटा बिट्स का पेलोड और 1 स्टॉप बिट। फिर यदि आप एक बिट के बीच में नमूना लेते हैं, तो आप अंतिम बिट, स्टॉप बिट पर आधे से थोड़ा दूर हो सकते हैं। दस बिट पर आधा सा 5% है, इसलिए हमारे 6.25% विचलन के साथ हम समस्याओं में भाग लेंगे। यह तस्वीर में स्पष्ट रूप से दिखाता है: पहले से ही तीसरे डेटा बिट पर हम किनारे के पास नमूना ले रहे हैं।


मैं मदद की सराहना करता हूं। धन्यवाद !!? शुरू नहीं होना चाहिए T0 + 52us के बजाय T0 + 104us पर नमूना?
विवेक मारन

1
@ Vivek27 - नहीं, क्योंकि १०४ हम शुरुआत बिट की अवधि है, और फिर आप बीच के बजाय, इसके अंत में नमूना लेंगे। यदि आप मुझे कुछ मिनट देते हैं तो मैं अपने चित्रों को अपडेट करूंगा। :-)
स्टीवनव सिप

1
@ विवेक: वास्तव में शुरुआत बिट वास्तव में "नमूना" नहीं है। इसका पूरा उद्देश्य लाइन आइडल से उस प्रारंभिक संक्रमण को प्रदान करना है जो बाकी चरित्र के सापेक्ष समयबद्ध है। यह "मान" हमेशा लाइन आइडल के विपरीत होता है और इसके द्वारा कोई डेटा नहीं होता है।
ओलिन लेथ्रोप

7
@ ओलिन - मैं स्टार्ट बिट को सैंपल दूंगा , केवल यह जांचने के लिए कि स्टार्टिंग एज स्पाइक नहीं था।
स्टीवनव सिप

1
@downvoter - यदि आप हमें बताएंगे कि यहाँ क्या गलत है, तो मैं इसे ठीक कर सकता हूँ। लेकिन फिर आपको हमें कुछ बताना होगा । (क्या आप वही हैं जो आज मेरे दूसरे उत्तर को भी
नकार

11

आइए थोड़ा पीछे हटें और UART द्वारा उपयोग किए जाने वाले निम्न स्तर के सिग्नलिंग प्रोटोकॉल के बारे में बात करें। TX और RX डेटा लाइनें हैं, न कि घड़ियां। घड़ियां केवल प्रत्येक UART के अंदर होती हैं, यही वजह है कि बॉड दर क्या है, इसके बारे में भी समझौता करना पड़ता है।

जब पारेषण नहीं होता है तो निष्क्रिय अवस्था में छोड़ दिया जाता है। एक बाइट प्रेषित करने के लिए (उदाहरण के लिए, अन्य डेटा चौड़ाई संभव है), ट्रांसमीटर पहले स्टार्ट बिट भेजता है । रिसीवर स्टार्ट बिट के प्रमुख किनारे के समय का उपयोग करता है और ज्ञात बॉड दर फिर बाकी चरित्र को डिकोड करता है। आइए सरलता के लिए कहें कि 100 kBaud का उपयोग किया जा रहा है। इसका मतलब है कि प्रत्येक बिट समय 10 is लंबा है। इसमें स्टार्ट बिट, डेटा बिट्स और स्टॉप बिट्स शामिल हैं। इसलिए, पहले डेटा बिट का मध्य प्रारंभ बिट के अग्रणी किनारे के बाद 15 the पर होगा, दूसरा 25 the पर, आदि।

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

8 डेटा बिट्स के साथ, समय के लिए सबसे खराब स्थिति अंतिम बिट का नमूना है। यह समय संदर्भ से 8.5 बिट गुना है, जो कि स्टार्ट बिट का अग्रणी किनारा है। यदि रिसीवर 1/2 बिट या अधिक से बंद है, तो यह एक अलग बिट के दौरान अंतिम बिट का नमूना देगा। स्पष्ट रूप से यह बुरा है। यह 8 1/2 बिट्स या 5.9% में 1/2 बिट की घड़ी आवृत्ति बेमेल पर होता है। यह बेमेल असफल होने की गारंटी है। विश्वसनीयता के लिए, आप आमतौर पर यह सुनिश्चित करना चाहते हैं कि रिसीवर ट्रांसमीटर से उस आधे या 2.9% के भीतर मेल खाता है। यह अंतिम बिट में 1/4 बिट समय त्रुटि का प्रतिनिधित्व करता है।

हालाँकि, यह इतना आसान नहीं है। ऊपर वर्णित परिदृश्य में, रिसीवर अनिवार्य रूप से स्टार्ट बिट के प्रमुख किनारे पर एक स्टॉपवॉच शुरू करता है। यह सिद्धांत एनालॉग इलेक्ट्रॉनिक्स में किया जा सकता है, लेकिन यह जटिल और महंगा होगा और आसानी से डिजिटल चिप्स पर एकीकृत नहीं होगा। इसके बजाय, अधिकांश डिजिटल UART के कार्यान्वयन में एक आंतरिक घड़ी होती है जो अपेक्षित बिट दर 16x पर चलती है। "स्टॉपवॉच" तब इन 16x चक्रों को गिनता है। इसका मतलब है कि सभी बिट नमूनाकरण समय में 1/16 बिट की अतिरिक्त संभावित त्रुटि है, जो पिछले बिट पर .7% घड़ी बेमेल की तरह है।

उम्मीद है कि यह स्पष्ट करता है कि स्टॉप बिट क्या है, बिट टाइमिंग कैसे काम करता है, और 16x घड़ी क्या है। मैं ज्यादातर स्टॉप बिट्स पर छोड़ देता हूं, लेकिन शायद आप खुद देख सकते हैं कि अब कम से कम एक स्टॉप बिट की आवश्यकता क्यों है। मूल रूप से स्टॉप बिट्स वर्णों के बीच न्यूनतम लागू लाइन निष्क्रिय समय है। यह वह समय है जिसके दौरान रिसीवर ने एक चरित्र प्राप्त करना समाप्त कर दिया है और एक शुरुआत बिट के अगले प्रमुख किनारे के लिए तैयार है। यदि स्टॉप बिट नहीं था, तो अंतिम डेटा बिट स्टार्ट बिट के समान ध्रुवीयता हो सकता है और रिसीवर के पास अपनी स्टॉपवॉच को चालू करने के लिए कोई बढ़त नहीं होगी।

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

8-N-1 का उपयोग करके, डेटा का 8 बिट बाइट वास्तव में भेजने के लिए 10 बिट समय लेता है। यह एक कारण है "बिट रेट" और "बॉड रेट" के बीच अंतर है। बॉड दर व्यक्तिगत बिट सिग्नलिंग समय को संदर्भित करता है, जिसमें प्रारंभ और स्टॉप बिट्स शामिल हैं। 100 kBaud में, प्रत्येक बिट जो संचरित होता है, प्रारंभ और रोक बिट्स सहित 10 ud लेता है। पूरे चरित्र में इसलिए 100 100 लगते हैं, लेकिन वास्तविक डेटा के केवल 8 बिट्स को स्थानांतरित किया जाता है। बॉड दर 100 k है, लेकिन उच्च स्तर के दृष्टिकोण से डेटा ट्रांसफर बिट दर केवल 80 kBits / s है।


5

संचरण के लिए बिट दर घड़ी की दर है (जैसा कि आप कहते हैं, आमतौर पर) 16. आपके पास फ़्रेमिंग बिट्स (प्रारंभ, समता, स्टॉप) के लिए कुछ गैर-डेटा बिट्स भी हैं। तो एक 16000Hz घड़ी के लिए आपको प्रति सेकंड 1000 बिट्स मिलते हैं, लेकिन न्यूनतम फ़्रेमिंग बिट्स के बाद केवल 800 डेटा बिट्स या 100 बाइट्स प्रति सेकंड डाले जाते हैं।

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

जब तक रिसीवर घड़ी ट्रांसमीटर घड़ी की दर के करीब है, तब तक नमूना प्रेषित सिग्नल के सही हिस्सों को हिट करेगा।

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