2 पॉइंट द्वारा GN⁺ 2024-06-04 | 1 टिप्पणियां | WhatsApp पर शेयर करें

USB डिवाइस डेवलपमेंट गाइड

विषय सूची

  • पृष्ठभूमि
  • USB क्या है?
  • USB वायर
    • USB-C के बारे में सावधानियाँ
    • differential pair के ज़रिए डेटा ट्रांसमिशन
  • PCB पर USB
  • USB की विभिन्न स्पीड
    • PCB पर स्पीड के बारे में संक्षिप्त सावधानियाँ
  • प्रोटोकॉल और सॉफ़्टवेयर लेयर
    • USB डिवाइस क्लास और होस्ट उनका उपयोग कैसे करता है
  • serial port डिवाइस बनाना
    • STM32 microcontroller और Nucleo बोर्ड
    • वास्तविक USB पोर्ट सेटअप
    • सॉफ़्टवेयर लिखना
    • flashing और रन करना
  • निष्कर्ष

पृष्ठभूमि

  • USB डिवाइस कंप्यूटर की कार्यक्षमता बढ़ाने में उपयोगी होते हैं.
  • इस लेख का लक्ष्य USB डिवाइस को शुरुआत से अंत तक बनाने की प्रक्रिया का मार्गदर्शन करना है.

USB क्या है?

  • USB डेटा आदान-प्रदान और पावर सप्लाई के लिए एक इंडस्ट्री स्टैंडर्ड है.
  • USB एक serial bus है, जिसमें बिट एक-एक करके ट्रांसमिट होते हैं.
  • USB केवल एक कनेक्शन स्पेसिफिकेशन नहीं है, इसमें कम्युनिकेशन प्रोटोकॉल भी शामिल है.

USB वायर

  • USB 2.0 कनेक्शन में 4 मुख्य वायर होते हैं:
    • +5V वायर: होस्ट से डिवाइस को पावर सप्लाई करता है.
    • D- और D+ वायर: differential pair के रूप में 1 बिट ट्रांसमिट करते हैं.
    • GND वायर: ग्राउंड का काम करता है.

USB-C के बारे में सावधानियाँ

  • USB-C को दोनों दिशाओं में कनेक्ट किया जा सकता है.
  • USB-C स्पीड या वर्ज़न को नहीं दर्शाता.

differential pair के ज़रिए डेटा ट्रांसमिशन

  • differential pair दो वायर का उपयोग करके एक बिट ट्रांसमिट करता है.
  • differential pair वोल्टेज नॉइज़ को हटाने में फायदेमंद होता है.

PCB पर USB

  • PCB में USB कनेक्टर जोड़ते समय, differential pair की लंबाई समान रखनी चाहिए.
  • differential pair traces एक-दूसरे के क़रीब होने चाहिए.
  • एक निश्चित impedance बनाए रखना चाहिए.

USB की विभिन्न स्पीड

  • USB 2.0 full speed (12 Mbit/s) और high speed (480 Mbit/s) पर काम कर सकता है.
  • कनेक्शन के समय होस्ट और डिवाइस स्पीड पर negotiation करते हैं.

PCB पर स्पीड के बारे में संक्षिप्त सावधानियाँ

  • full speed पर impedance और trace length के लिए नियम कम सख़्त हो सकते हैं.

प्रोटोकॉल और सॉफ़्टवेयर लेयर

  • USB नेटवर्क की तरह काम करता है और इसमें विभिन्न endpoints और configurations होते हैं.
  • होस्ट driver के माध्यम से USB डिवाइस को पहचानता है और उसका उपयोग करता है.

USB डिवाइस क्लास और होस्ट उनका उपयोग कैसे करता है

  • operating system विभिन्न USB डिवाइस क्लास को पहचानता है.
  • उदाहरण के लिए, mass storage डिवाइस या serial डिवाइस आदि.

serial port डिवाइस बनाना

  • एक सरल USB serial port डिवाइस बनाते हैं.
  • STM32 microcontroller और Nucleo बोर्ड का उपयोग किया जाता है.

STM32 microcontroller और Nucleo बोर्ड

  • NUCLEO-F103RB बोर्ड का उपयोग किया जाता है.
  • यह बोर्ड programmer और microcontroller से बना है.

वास्तविक USB पोर्ट सेटअप

  • USB पोर्ट सेट करें, और external 5V power का उपयोग करने के लिए jumper सेट करें.
  • PA12 और PA11 pins को USB_DP और USB_DM के रूप में सेट करें.
  • PA12 pin पर 1.5 kΩ resistor जोड़कर pull-up करें.

सॉफ़्टवेयर लिखना

  • STM32CubeIDE में USB device mode सेट करें.
  • इसे serial port डिवाइस के रूप में सेट करें ताकि होस्ट इसे पहचान सके.
  • CDC_Receive_FS routine में LED चालू करने वाला कोड लिखें.

flashing और रन करना

  • कोड build करें और STM32CubeProgrammer का उपयोग करके उसे बोर्ड पर flash करें.
  • बोर्ड को external 5V power से कनेक्ट करें, और serial port के माध्यम से LED नियंत्रित करें.

निष्कर्ष

  • USB serial port डिवाइस को शुरुआत से अंत तक बनाया गया.
  • STM32CubeIDE का बहुत सारा boilerplate code और UI-आधारित सेटअप असुविधाजनक हो सकता है.
  • Linux-आधारित SoC का उपयोग एक अधिक साफ़-सुथरा तरीका हो सकता है.

GN⁺ की राय

  • STM32CubeIDE का boilerplate code: बहुत सारा boilerplate code जनरेट होता है, जिससे code review मुश्किल हो सकता है.
  • Linux-आधारित तरीका: Linux SoC का उपयोग करने पर अधिक standardized API और साफ़ code separation संभव है.
  • impedance और trace length: high-speed USB कनेक्शन के लिए impedance और trace length पर ध्यान देना ज़रूरी है.
  • differential pair के फायदे: differential pair वोल्टेज नॉइज़ हटाने में फायदेमंद होता है, जिससे स्थिर डेटा ट्रांसमिशन संभव होता है.
  • microcontroller का चयन: प्रोजेक्ट के अनुसार उपयुक्त microcontroller चुनना महत्वपूर्ण है. STM32 के अलावा भी कई विकल्प हैं.

1 टिप्पणियां

 
GN⁺ 2024-06-04
Hacker News टिप्पणियाँ
  • ST माइक्रोकंट्रोलर के उपयोग पर राय: USB उपयोग पर यह एक अच्छा लेख है, लेकिन यह ST माइक्रोकंट्रोलर पर केंद्रित है। हाल में ESP32 ecosystem ने अधिक आसान plug-and-play तरीका उपलब्ध कराया है। शुरुआती लोगों के लिए high-speed काम के बजाय बुनियादी USB controller IC का उपयोग अधिक उपयुक्त है.

  • USB compliance testing का अनुभव: बहुत पहले जब USB compliance testing की थी, तब inrush current test में काफी समस्याएँ थीं। high-speed digital design पर ध्यान देना आसान है, लेकिन compliance testing में छोटी-छोटी बातें महत्वपूर्ण होती हैं.

  • USB-C से जुड़ी टिप: CC pin को उचित resistor से जोड़ना चाहिए। USB 2.0 में differential routing और impedance बहुत बड़ी समस्या नहीं हैं। समान लंबाई रखते हुए सीधे जोड़ देना पर्याप्त है.

  • STM32 के विकल्प का सुझाव: अगर ARM processor solder करना कठिन लगे, तो छोटे controller या VUSB library का उपयोग भी विचार करने योग्य है। अगर Arduino-style programming पसंद है, तो कई boards को USB device के रूप में आसानी से इस्तेमाल किया जा सकता है.

  • ESP32 और सस्ते hacking तरीके: मैं मुख्य रूप से ESP32 का उपयोग करता हूँ, लेकिन फेंके गए USB keyboard के control board का उपयोग करके सस्ता और मजबूत custom controller बनाया जा सकता है.

  • STM32 में 64 bytes से अधिक receive support: 64 bytes से बड़े frames receive करने के तरीके पर सवाल। reference manual में दिए गए settings सामान्य registers नहीं हैं, इसलिए इसे समझना कठिन है.

  • bare-metal USB code लिखने का अनुभव: MCU पर bare-metal USB code लिखना SPI या I2C की तुलना में अधिक जटिल है। vendor द्वारा दिए गए software का अधिकतम उपयोग करना बेहतर है। high-speed transfer के लिए bulk transfer का उपयोग करें और host-side समस्याओं की जाँच करें.

  • virtual USB device बनाना: Raspberry Pi का उपयोग करके virtual USB device बनाया गया और उसे PC से जोड़ा गया। MTP camera को emulate करके software को भ्रमित करने के लिए इसका उपयोग किया जा रहा है.

  • USB 3 support वाले development board पर सवाल: USB C monitor sink को prototype करना है, लेकिन ऐसी power वाला board ढूँढना कठिन है जो DisplayPort receive कर सके.

  • USB उपयोग की लागत: USB मुफ़्त नहीं है। vendor ID प्राप्त करने के लिए $6,000 का one-time शुल्क देना पड़ता है.