RS232 बनाम USB CDC सेवा की गुणवत्ता / संदेशों में एक चेकसम होना चाहिए?


13

क्या मेरे USB-CDC डिवाइस और USB होस्ट के बीच भेजे गए डेटा के लिए USB की गुणवत्ता की गारंटी है?

मैं एक शोर की स्थिति में पारंपरिक RS232 के साथ जानता हूं (जैसे ऑटोमोटिव डायग्नोस्टिक पोर्ट) खराब बिट अक्सर पर्याप्त होते हैं कि चेकसम प्रोटोकॉल के लिए महत्वपूर्ण हैं। अगर मैं इस तरह के प्रोटोकॉल को शुद्ध-यूएसबी अनुप्रयोग के लिए अनुकूलित कर सकता था, तो क्या मैं चेकसम और संबंधित त्रुटि हैंडलिंग रूटीन को सुरक्षित रूप से छोड़ सकता हूं?

संदर्भ के लिए, मैं Atmel द्वारा प्रदान की गई USB-CDC फ्रेमवर्क के साथ एक AT91SAM7S256 का उपयोग कर रहा हूं ।

अपडेट करें:

मैंने इस समस्या पर थोड़ी देर के लिए अपने Google-Fu का प्रयोग किया और इस लेख को पाया जिसमें ईथरनेट इम्यूलेशन और स्टेट्स के लिए CDC उपवर्ग का वर्णन है:

USB केबल पर, एन्क्लेप किए गए ईथरनेट फ्रेम फ्लो गंतव्य मैक पते के साथ शुरू होते हैं और फ्रेम चेकसम से ठीक पहले समाप्त होते हैं। (फ्रेम चेकसम की जरूरत नहीं है क्योंकि USB एक विश्वसनीय परिवहन है।)

उनका मतलब हो सकता है कि यूएसबी-सीडीसी विश्वसनीय परिवहन है, सामान्य रूप से यूएसबी नहीं, क्योंकि उच्च-थ्रूपुट फट डेटा (वेबकेम?) के लिए इरादा कुछ डिवाइस वर्ग बफ़र्स को भरना नहीं चाहते हैं यदि कोई प्रोग्राम तेजी से डेटा का चुनाव नहीं कर सकता है।

मैं अभी भी इस पर अतिरिक्त पुष्टि करना चाहूंगा।

जवाबों:


12

यह इस बात पर निर्भर करता है कि आपका डिवाइस किस समापन बिंदु प्रकार का उपयोग कर रहा है।

संक्षेप में USB से लिया गया एक त्वरित सारांश :

अंतरा स्थानांतरण

  • गारंटी लेटेंसी
  • स्ट्रीम पाइप - यूनिडायरेक्शनल
  • त्रुटि का पता लगाने और अगली अवधि पुन: प्रयास करें।

Isochronous स्थानान्तरण

  • Isochronous Transfers USB बैंडविड्थ की गारंटी प्रदान करता है।
  • बंधे हुए विलंबता।
  • स्ट्रीम पाइप - यूनिडायरेक्शनल
  • सीआरसी के माध्यम से त्रुटि का पता लगाना, लेकिन वितरण की कोई पुन: प्रयास या गारंटी नहीं।
  • केवल पूर्ण और उच्च गति मोड।
  • कोई डेटा टॉगल नहीं।

थोक स्थानान्तरण

  • बड़े धमाकेदार डेटा को स्थानांतरित करने के लिए उपयोग किया जाता है।
  • वितरण की गारंटी के साथ CRC के माध्यम से त्रुटि का पता लगाना
  • बैंडविड्थ या न्यूनतम विलंबता की कोई गारंटी नहीं।
  • स्ट्रीम पाइप - यूनिडायरेक्शनल पूर्ण और उच्च गति मोड केवल।

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

संपादित करें

आपके द्वारा लिंक किए गए Atmel दस्तावेज़ को पढ़ने के बाद, ऐसा प्रतीत होता है कि यह आपके ऊपर है!

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

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

इसलिए आपके कार्यान्वयन में, विश्वसनीय परिवहन सुनिश्चित करने के लिए अपने डेटा क्लास इंटरफ़ेस पर बल्क ट्रांसफ़र का उपयोग करना सुनिश्चित करें।


बहुत बढ़िया जवाब। समापन बिंदु प्रकारों का वह सारांश बहुत उपयोगी है। लिंक किए गए पीडीएफ में वर्णित सीडीसी सीरियल प्रोजेक्ट के लिए Atmel कोड को USB से सीरियल एडॉप्टर के रूप में कार्य करने के लिए सेट किया गया है, इसलिए यह पहले से ही थोक समापन बिंदुओं का उपयोग करने के लिए कॉन्फ़िगर किया गया है। अति उत्कृष्ट!
स्टीवन टी। स्नाइडर

3

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

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