-
Ethernet पैकेट भेजना
- लेखक "Networking from scratch" नाम की एक सीरीज़ बनाना चाहते थे, और माइक्रोकंट्रोलर पर TCP/IP stack बनाने वाला एक प्रोजेक्ट शुरू किया।
- यह ब्लॉग पोस्ट पहला Ethernet पैकेट सफलतापूर्वक भेजने की कहानी और प्रोजेक्ट में आए bugs तथा debugging के अनुभव साझा करती है.
-
माइक्रोकंट्रोलर
- उपयोग किया गया माइक्रोकंट्रोलर STM32F401 है, जो ARM Cortex-M4 आधारित है और अधिकतम 84MHz पर चलता है.
- इसमें 96KiB RAM है, जो कई पैकेट संभालने के लिए पर्याप्त क्षमता देती है.
-
Ethernet
- Ethernet एक ऐसा कॉन्सेप्ट है जिसमें कई तरह की तकनीकें और standards शामिल हैं, जैसे physical-level hardware, signal format, bus collision handling strategy, और frame layout.
- इस प्रोजेक्ट में Wiznet का W5100 chip इस्तेमाल किया गया है, जिसमें hardware TCP/IP stack बिल्ट-इन है.
-
समस्या 1: शून्य में पुकारना
- W5100 chip के साथ संचार के लिए driver लिखा गया, लेकिन SPI signals गलत तरीके से जुड़े होने के कारण संचार नहीं हो पा रहा था.
- Arduino shield के ICSP header ने SPI signals को गलत तरीके से जोड़ा था, और इसे ठीक करने के लिए board को फिर से rework किया गया.
-
समस्या 2: कॉमेडी का सार
- SPI signals सही जुड़ने के बाद भी Ethernet पैकेट ट्रांसमिशन ठीक से नहीं हो रहा था.
- logic analyzer से digital signals का विश्लेषण किया गया, और chip select signal की timing समस्या को ठीक करके संचार सफल बनाया गया.
-
समस्या 3: अज्ञात पैकेट
- Wireshark में भेजे गए पैकेट की जगह एक गलत पैकेट दिखाई दे रहा था.
- Arduino library को संदर्भ के तौर पर देखकर समस्या का विश्लेषण किया गया, और गलत memory address पर data लिखने वाले bug को ठीक करके समस्या हल की गई.
-
कहानी की सीख
- Ethernet पैकेट भेजना भले ही एक छोटी उपलब्धि लगे, लेकिन प्रोजेक्ट के bugs और debugging के अनुभव काफ़ी मूल्यवान हैं.
- debugging और tools बनाना development process का अहम हिस्सा है, और खोजबीन व प्रयोग के ज़रिए system को समझना महत्वपूर्ण है.
- प्रोजेक्ट अभी भी जारी है और अब यह abstraction के ऊँचे स्तर की समस्याओं और bugs से निपट रहा है.
1 टिप्पणियां
Hacker News की राय
टूल लिखना और debugging को explore करना हमेशा मूल्यवान होता है। लेकिन बहुत से लोग इसे समझते नहीं हैं, खासकर JIRA जैसी development process में exploration की value को अक्सर नहीं देखते।
छोटे टूल बनाने की क्षमता 10x productivity वाले programmer की पहचान है, और यह अक्सर परदे के पीछे किया जाने वाला एक हुनर होता है।
यह microcontroller पर शुरुआत से TCP/IP और Ethernet frame stack बनाने वाली series की शुरुआत है। इसमें TCP/IP को संभालने के लिए W5100 chip का उपयोग किया गया है, और यह prebuilt Ethernet frames को support करता है।
किसी ने FPGA engineering में करियर बदला और Ethernet पर फोकस किया, और networking abstractions को समझना बहुत मूल्यवान साबित हुआ।
एक राय यह है कि STM32F401 और W5100 Ethernet shield का उपयोग करने के बजाय STM32F407 board और सस्ता Ethernet PHY board इस्तेमाल करना बेहतर होगा।
Ethernet functionality आमतौर पर microcontroller के अंदर built-in peripheral के रूप में शामिल होती है।
किसी ने MOSI/MISO के नए नाम main out/subordinate in पहली बार देखे, और COPI/CIPO alternatives उन्हें खास समझ में नहीं आए।
Linux में network stack लिखने के लिए
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))का उपयोग किया जा सकता है।STM32 Nucleo board में 100Mbps Ethernet built-in है, और STM32Cube software को mixed reviews मिलते हैं, लेकिन यह काम करने वाले examples देता है।
Ethernet frames से deal करता है, जबकि packet एक IP concept है।
ENC28J60 'Stand-Alone Ethernet Controller with SPI Interface' पर भी विचार किया जा सकता है; इसमें hardware TCP/IP stack नहीं है, इसलिए software implementation की ज़रूरत होगी।