• डिस्पोज़ेबल ई-सिगरेट में लगे लो-परफॉर्मेंस ARM Cortex-M0+ माइक्रोकंट्रोलर का उपयोग करके वेब सर्वर चलाने वाला एक प्रयोगात्मक प्रोजेक्ट
  • 24KiB फ्लैश और 3KiB RAM वाले PUYA के PY32F002B चिप का विश्लेषण किया गया, और SLIP तरीके से नेटवर्क कनेक्शन लागू किया गया
  • Semihosting, SLIP प्रोटोकॉल और uIP TCP/IP स्टैक का उपयोग करके वर्चुअल tty के जरिए TCP/IP संचार और HTTP सर्वर फ़ंक्शन को पोर्ट किया गया
  • शुरुआत में यह बहुत धीमा था, लेकिन बफ़र ऑप्टिमाइज़ेशन और डेटा प्रोसेसिंग में सुधार के जरिए रिस्पॉन्स और पेज लोडिंग स्पीड में बड़ा सुधार किया गया
  • कम मेमोरी वाले वातावरण में भी डायनेमिक सर्वर कोड चलाना और API endpoint उपलब्ध कराना संभव किया गया
  • कोड वितरित किया जा रहा है, व्यावहारिक होस्टिंग संभव है, लेकिन मेमोरी जैसी संसाधन सीमाएँ काफ़ी हैं

प्रस्तावना

  • पहले यह स्पष्ट कर दूँ कि यह लेख डिस्पोज़ेबल ई-सिगरेट पर सीधे चलने वाले वेब सर्वर से सर्व नहीं किया जा रहा, बल्कि वही सामग्री एक अलग सर्वर से दी जा रही है
  • वास्तविक डेमो http://ewaste.fka.wtf/ पर देखा जा सकता है

पृष्ठभूमि

  • पिछले कुछ वर्षों से बैटरियों को रीयूज़ करने के उद्देश्य से परिचितों से डिस्पोज़ेबल ई-सिगरेट इकट्ठी की गईं
  • हाल में डिस्पोज़ेबल ई-सिगरेट डिवाइस धीरे-धीरे अधिक उन्नत होने लगीं, और उनमें USB-C तथा रीचार्जेबल बैटरी आने लगी, जिसने रुचि जगाई
  • उन्हें खोलते समय PUYA नाम वाला फ्लैश चिप-इंटीग्रेटेड ARM Cortex-M0+ माइक्रोकंट्रोलर मिला, जो कम-कीमत माइक्रोकंट्रोलर के रूप में काफ़ी जाना जाता है
  • ऐसे माइक्रोकंट्रोलर कई मॉडलों से इकट्ठे किए गए, और डिबग पिन लेबलिंग होने के कारण उनका विश्लेषण आसान रहा

उपयोग किया गया हार्डवेयर

  • चिप पर PUYA C642F15 अंकित था, लेकिन वास्तविकता में इसे PY32F002B परिवार का माना गया
  • मुख्य विनिर्देश:
    • 24MHz Cortex-M0+ कोर
    • 24KiB फ्लैश
    • 3KiB RAM
    • कई परिधीय मौजूद हैं, लेकिन इस प्रोजेक्ट में उनका उपयोग नहीं किया गया
  • सामान्य स्मार्टफोन की तुलना में प्रदर्शन कम है, लेकिन एम्बेडेड वातावरण में सरल वेब सर्वर बनाना पूरी तरह संभव है

नेटवर्क कनेक्शन

  • यह पहला विचार नहीं था, लेकिन semihosting की अवधारणा पर प्रयोग करते हुए वेब सर्वर चलाने का विचार आया
  • Semihosting, embedded ARM पर syscall की नकल करने का एक तरीका है
    • रजिस्टर में वैल्यू/पॉइंटर डालकर breakpoint कॉल करने पर डिबगर उसे समझकर संबंधित काम करता है
    • आम तौर पर इसका उपयोग लॉग भेजने के लिए होता है, लेकिन द्विदिश डेटा संचार भी संभव है
  • USB serial डिवाइस SLIP (Serial Line Internet Protocol) प्रोटोकॉल को सपोर्ट करते हैं, इसलिए उन्हें नेटवर्क इंटरफ़ेस के रूप में इस्तेमाल किया गया
  • Linux (और कुछ macOS) पर slattach और socat आदि की मदद से वर्चुअल tty के माध्यम से SLIP नेटवर्क वातावरण बनाया गया
    pyocd gdb -S -O semihost_console_type=telnet -T $(PORT) $(PYOCDFLAGS) &  
    socat PTY,link=$(TTY),raw,echo=0 TCP:localhost:$(PORT),nodelay &  
    sudo slattach -L -p slip -s 115200 $(TTY) &  
    sudo ip addr add 192.168.190.1 peer 192.168.190.2/24 dev sl0  
    sudo ip link set mtu 1500 up dev sl0  
    
  • TCP/IP स्टैक के रूप में uIP चुना गया, क्योंकि यह बहुत छोटा है, RTOS की आवश्यकता नहीं होती, और पोर्ट करना आसान है
  • uIP उदाहरणों में मौजूद HTTP सर्वर का उपयोग किया गया, और SLIP कोड को semihosting तरीके के अनुसार पोर्ट करके वेब सर्वर सफलतापूर्वक चलाया गया
  • ARM आर्किटेक्चर पर 16-बिट alignment समस्या होने के कारण filesystem generation script में बदलाव किए गए और Perl के जरिए कन्वर्ज़न प्रोसेस किया गया

गति अनुकूलन

  • शुरुआती अवस्था में ping 1.5 सेकंड, 50% पैकेट लॉस और पेज लोडिंग में 20 सेकंड से अधिक समय लगता था, यानी प्रतिक्रिया बहुत धीमी थी
  • कारण था बाइट-स्तरीय I/O का भारी overhead
  • 3KiB RAM का सक्रिय उपयोग करते हुए ring buffer जोड़ा गया, और SLIP फ़ंक्शन को बैच में डेटा देने वाली संरचना बनाई गई
  • राइट ऑपरेशन भी बैच में विभाजित करके भेजे गए, जिससे तेज़ cleanup संभव हुआ
  • ऑप्टिमाइज़ेशन के बाद ping 20ms, बिना लॉस, पेज लोडिंग 160ms हासिल की गई
  • कुल RAM और फ्लैश उपयोग:
    • फ्लैश: 24KB में से 5,116B(20.82%)
    • RAM: 3KB में से 1,380B(44.92%)
  • पूरे ब्लॉग की सामग्री भी बिना दिक्कत सर्व की जा सकने वाली क्षमता में है, और सर्वर-साइड C कोड चलाना भी संभव है

अन्य फ़ीचर और निष्कर्ष

  • API endpoint सीधे लागू किया गया, जो मुख्य पेज के अनुरोधों की संख्या और माइक्रोकंट्रोलर का unique ID लौटाता है
  • यह अत्यंत कम-क्षमता वाले हार्डवेयर और न्यूनतम मेमोरी पर डायनेमिक वेब सर्वर और API तक लागू करने का एक प्रयोग है

संदर्भ

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.