UART पुलों के लिए USB सस्ते और आसानी से उपलब्ध हैं, लेकिन वास्तव में घटिया समय की विशेषताएं हैं। नेवार्क एक "एंबेडेड पाई" बोर्ड बेचता है जिसमें एक एसटीएम 32 एफ एआरएम प्रोसेसर होता है जिस पर आप नंगे-धातु कोड लिख सकते हैं। उस चिप पर तीन UARTs हैं, और मुझे लगता है कि वे बहुत तेजी से जा सकते हैं; यदि आप रास्पबेरी पाई के साथ संवाद करने के लिए एक का उपयोग करने के लिए थे जो अन्य प्रयोजनों के लिए दो उपलब्ध छोड़ देगा। डिस्क्लेमर: मैंने इनमें से एक बोर्ड खरीदा है, लेकिन अभी तक रास्पबेरी पाई का उपयोग केवल I / O को सीधे करने की आवश्यकता है।
यदि आप बहुत सारे UARTs चाहते हैं, तो एंबेडेड पाई बोर्ड पर STM32F शायद एक उचित संख्या को संभाल सकता है, खासकर यदि आप कुछ आर्म असेंबली भाषा लिखने के लिए तैयार हैं। अगर एक एकल बोर्ड पर 16 I / O पिंस के दो समूह उपलब्ध हैं, तो संभव है कि 16 एक साथ सॉफ्टवेयर UARTs हों, जो एक ही बार में एक सभ्य सभ्य बॉड दर पर काम कर रहे हों (जिनका आवधिक अंतराल 3x या 5x है या बॉड दर) 16-बिट से प्राप्त मान पोर्ट से बफ़र तक ले जाता है, और ट्रांसफ़ॉर्म पोर्ट पर एक बफ़र से 16-बिट प्री-कॉम्पीट्यूड मान को आउटपुट करता है; यदि आप ऐसा करते हैं, तो सॉफ़्टवेयर के लिए औसत सर्विसिंग समय प्रदान करें UARTs बहुत महान नहीं है, यह अगर कभी-कभार सबसे ख़राब स्थिति होती है तो कोई फर्क नहीं पड़ता (जैसे सभी सोलह पोर्ट एक साथ बाइट प्राप्त करते हैं)।
यह दृष्टिकोण वास्तव में प्राप्त करने के लिए उल्लेखनीय रूप से कुशलतापूर्वक काम कर सकता है, क्योंकि "सामान्य मामला" कोड को व्यक्तिगत यूएआरटी को देखने की आवश्यकता नहीं है। मान लीजिए कि आप 5x पर डेटा का नमूना ले रहे हैं, और बफर के अंतिम 47 बाइट्स को तुरंत नकल किया जाता है। डेटा को आरोही क्रम में बफर को लिखा गया है, तो आप यह जांच सकते हैं कि क्या किसी भी बाइट को 16 चैनलों में से किसी पर भी पूरी तरह से कहा गया है:
bytes_ready = (armed_flag & data[rxptr] & ~data[rxptr-47] & ~data[rxptr-46] & ~data[rxptr-45] & ~data[rx_ptr-44]);
अगर bytes_ready
शून्य है, तो कोई डेटा प्राप्त नहीं हुआ है। अन्यथा, यदि उदाहरण के लिए बिट 2 bytes_ready
सेट किया गया है, तो इसका मतलब है कि प्राप्त डेटा बाइट डेटा के 2 बिट [rx_ptr-40], डेटा [rx_ptr-35], डेटा [rx_ptr-30], इत्यादि में एक बार हो सकता है। डेटा, आर्म्डफ्लैग के बिट 2 को साफ करें और लगभग 44 नमूनों के बाद इसे फिर से सेट करने की व्यवस्था करें।
इस दृष्टिकोण को उन नमूनों पर थोड़ा काम करने की आवश्यकता होगी जहां डेटा का एक बाइट पूरी तरह से प्राप्त होता है (और संभवत: बहुत सारे काम अगर सभी 16 चैनलों पर एक साथ डेटा का एक बाइट आता है), लेकिन अधिकांश नमूनों पर काम की मात्रा बहुत अधिक होगी मामूली। यदि किसी के पास 64 आई / ओ पिन थे, तो कोई भी "सामान्य" मामले में कोई अतिरिक्त काम जोड़कर इस दृष्टिकोण का उपयोग करके 32 यूएआरटी को संभाल सकता है।