কিভাবে একাধিক uart ইন্টারফেস পাবেন


30

ঠিক আছে, আমার একটি uart ইন্টারফেস রয়েছে (টিএক্সডি জিপিআইও 14, আরএক্সডি জিপিআইও 15)। আমি কমপক্ষে আরও একটি uart ইন্টারফেস চাই।

সম্ভাব্য সমাধান:

  • বিট বিং: দুটি অপ্রাসঙ্গিক অতিরিক্ত জিপিআইও ব্যবহার করুন। আমি বুঝতে পারি যে সময় নির্ধারণ একটি মান লিনাক্সের সমস্যা। এটি খুব কম বাউড্রেট সহ নির্ভরযোগ্য হবে?

  • স্যুইচিং: আরপিআই সিদ্ধান্ত নেয় কখন কোন ডিভাইসে কথা হবে। যেমন সিডি 4066 বিবি ব্যবহার করা ।

  • স্পি থেকে 2 এক্স উয়ার্ট ব্রিজ: একটি উপযুক্ত অংশ খুঁজে পাওয়া যায় নি (প্রাপ্যতা, দাম, প্যাকেজ)

  • ইউএসবি টু ইউআর্ট: ব্যয়বহুল

অন্য বিকল্প আছে? আমি স্যুইচিংয়ের প্রতি ঝোঁক, যদি এটি করা যায়। আপনি কি পরামর্শ করবেন?


উত্তর:


10

এফটিডিআইয়ের মতো একটি ইউএসবি ইউআরটি সত্যিই ব্যয়বহুল নয়। আপনার অন্যান্য সমস্ত বিকল্পগুলি এমন শোনাচ্ছে যে এগুলি আপনাকে 13 than than 13 এর চেয়ে বেশি দাম এবং সময় ব্যয় করতে পারে এবং এটি অবিশ্বাস্য বা ধীর হতে পারে। কেবল দ্রুত এবং সমস্যা-মুক্ত বিকল্পের জন্য যান, যেমন:

http://www.dfrobot.com/index.php?route=product/product&product_id=147#.UOamLG-sh8E

স্পার্কফুনও একটি বিক্রি করে। আসলে, সম্ভবত আপনি কিছু পুরানো ইউএসবি ডিভাইস থেকে কেবল একটি টেনে আনতে পারেন বা একটি জাঙ্ক স্টোর থেকে একটি কিনতে পারেন যা জানেন না এটি কী করে।

আমি একটি আরডুইনো প্রকল্পের জন্য একটি এসপিআই থেকে ইউআরটি অ্যাডাপ্টারের সাথে গণ্ডগোল করেছিলাম, বিদ্যমান লাইব্রেরি ছিল না তাই আমি নিজের লেখা wrote শেষ পর্যন্ত এটি ঠিকঠাক কাজ করেছে, তবে আমি যদি কেবল একটি 15 ডলারে নেমে যেতে পারি তবে আমার কাছে হত। প্রকৃতপক্ষে সময় ব্যয় করার পরে আমার 4 টি সিরিয়াল পোর্ট সহ একটি মেগা পাওয়া উচিত ছিল।

বিকল্প হিসাবে যদি আপনি প্রচুর সিরিয়াল পোর্টগুলি চান তবে আপনি আরএস ৪85৫ সিরিয়ালটি দেখতে পেলেন যা ২২২ এর মতো (যদিও সামঞ্জস্যপূর্ণ নয়), যা মাল্টি-ড্রপ সমর্থন করে, অর্থাৎ এক লাইনের বেশ কয়েকটি ইন্টারফেস।


1
এটি সফ্টওয়্যার দৃষ্টিকোণ থেকে সহজ বিকল্পও। বক্সের বাইরে এফটিডিআইয়ের লিনাক্স ড্রাইভার সমর্থন রয়েছে। অন্যান্য সমস্ত বিকল্পের জন্য শ্রমসাধ্য ড্রাইভারের কাজ প্রয়োজন।
বের

সিপি 2102 হ'ল আমার প্রিয় ইউএসবি আর্ট চিপ। একটি দ্রুত অ্যামাজন অনুসন্ধান তাদের অন্তর্ভুক্ত একটি কেবল সহ 6.99 ডলার (আসলে $ 1.50 সম্পাদনা করুন) এর জন্য প্রকাশ করে! মারতে পারি না!
পোর্টফোরওয়ার্ডপোডকাস্ট

6

যদি আপনি অতিরিক্ত হার্ডওয়্যার যুক্ত এড়ানোর সিদ্ধান্ত নেন এবং কেবল বিট-ব্যাংিং রুটে যান তবে এটি কিছুটা ছবির মতোই কঠিন নয় difficult

প্রথমে, আপনার যোগাযোগের থ্রেডটি অবশ্যই রিয়েলটাইম যেতে হবে:

#include<sched.h>

struct sched_param param;               
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
if( sched_setscheduler( 0, SCHED_FIFO, &param ) == -1 )
{
        perror("sched_setscheduler");
        return -1;
}

এখন থেকে, আপনার থ্রেড 950ms এর জন্য প্রি-empted হবে না প্রতি সেকেন্ডে বাইরে * , যদি না তা নিয়ন্ত্রণ ফেরৎ স্বেচ্ছায় (মাধ্যমে sched_yield(), অথবা usleep()যথা সময়ে), যা এটি আগের প্রাক empted করা হবে না। 850MHz সিপিইউ দিয়ে আপনার বিট-ব্যাংিং লুপটি বেশিরভাগ সময় অসাধারণ গতিতেও চলবে।

এখন দুর্ভাগ্যক্রমে সময়ে সময়ে নিয়ন্ত্রণ ফিরে আসার অর্থ হল আপনার থ্রেডটি যখন ঘুমাচ্ছে, আপনার "বিরোধী পক্ষ" যা কিছু প্রেরণ করবে তা চিরতরে হারিয়ে যাবে। তবে সেই উদ্দেশ্যে আপনি সংক্রমণ নিয়ন্ত্রণ ব্যবহার করতে পারেন। হয় সিটিএস লাইনের জন্য আরও কিছু জিপিআইও বরাদ্দ করুন যা আপনি ফলন করার আগে নীচে টানুন এবং নিয়ন্ত্রণ পুনরুদ্ধারের উপর ব্যাক আপ করুন:

  bcm2835_gpio_write(CTS_PIN, LOW);
  usleep(10);
  bcm2835_gpio_write(CTS_PIN, HIGH);

অথবা (আইএমএইচএও অগ্রাধিকার সহ) এক্সঅন / এক্সএফএফ ট্রান্সমিশন নিয়ন্ত্রণ ব্যবহার করুন - ঘুমানোর আগে আরএসএফ 2 অক্ষরটি প্রেরণ করুন, আপনার অপারেশন পুনরায় শুরু করার পরে এক্সওন ON এগুলির জন্য ডিফল্ট এএসসিআইআই কোডগুলি '\x13'এক্সএফএফ / "প্রেরণ বন্ধ করুন" এবং '\x11'এক্সওন / "পুনরায় শুরু পাঠানো" এর জন্য।

অবশ্যই আপনার রিমোট ডিভাইস এগুলি মান্য করতে হবে। যদি এটি না হয় তবে কিছু ডেটা নষ্ট হবে।


4

আপনি যা সন্ধান করছেন তা আমি পেয়েছি: ইউআরটি / আইআরডিএ / জিপিআইও ব্রিজের আই 2 সি / এসপিআই ক্রীতদাস।

এগুলি একক এবং দ্বৈত সংস্করণে আসে (সুতরাং 1 বা 2 অতিরিক্ত ইউআরটি)। তারা (এনএক্সপি) এছাড়াও (প্রয়োজনের ক্ষেত্রে অন্য পক্ষের জন্য) ইউআরটি / আইআরডিএ / জিপিআইও সেতুতে আই 2 সি / এসপিআই মাস্টার রাখে।

আরো তথ্য এই চিপ সম্পর্কে খুঁজে পাওয়া যেতে পারে এখানে এবং মাস্টার সহযোগীর।

বচন এছাড়াও আছে চিপ যে সঠিক একই জিনিস করে।


ভাল তথ্য, তবে এনএক্সপি লিঙ্কগুলি এখানে HTTP 403 দেয়।
টম


3

ইউএসবি থেকে ইউআরটি ব্রিজগুলি সস্তা এবং সহজেই উপলভ্য, তবে সত্যিই লম্পট সময় বৈশিষ্ট্য রয়েছে। নেওয়ার্ক একটি "এমবেডেড পাই" বোর্ড বিক্রি করে যার একটি STM32F এআরএম প্রসেসর রয়েছে যা আপনি খালি-ধাতব কোড লিখতে পারেন। এই চিপের উপরে তিনটি ইউআআআআআটিটি রয়েছে এবং আমি মনে করি তারা খুব দ্রুত যেতে পারে; আপনি যদি রাস্পবেরি পাইয়ের সাথে যোগাযোগ করার জন্য একটি ব্যবহার করেন যা অন্য উদ্দেশ্যে দুটি উপলভ্য রাখে। দাবি অস্বীকার: আমি এই বোর্ডগুলির মধ্যে একটি কিনেছি, তবে এখনও I / O দ্বারা সরাসরি পরিচালনা করার জন্য রাস্পবেরি পাই নিজেই ব্যবহার করেছি।

আপনি যদি ধীরে ধীরে ইউআরটি চান, এম্বেডেড পাই বোর্ডের এসটিএম 32 এফ সম্ভবত একটি ন্যাশন নম্বর পরিচালনা করতে পারে, বিশেষত যদি আপনি কিছু আর্ম সমাবেশ ভাষা লিখতে ইচ্ছুক হন। যদি কোনও একক বোর্ডে 16 আই / ও পিনের দুটি গ্রুপ পাওয়া যায় তবে এক সাথে 16 টি সফটওয়্যার ইউআরটি একসাথে খুব সুন্দর শালীন বাড রেটে কাজ করার সম্ভাবনা রয়েছে (পর্যায়ক্রমে বিরতিতে 3x বা 5x বাউড রেট যা সঞ্চয় করে প্রাপ্তি পোর্ট থেকে একটি বাফারে 16-বিট ল্যাচড মানগুলি এবং বাফার থেকে ট্রান্সমিট পোর্টে 16-বিট প্রম্পম্পিউটেড মানগুলিকে আউটপুট দেয়; যদি আপনি এটি করেন তবে সফ্টওয়্যার ইউআরটিগুলির জন্য গড় সার্ভিসিং সময়টি খুব দুর্দান্ত নয়, সরবরাহ করা হয়েছে মাঝেমধ্যে সবচেয়ে খারাপ পরিস্থিতি হিট হয়েছে কিনা তা বিবেচ্য হবে না (যেমন সমস্ত ষোলটি বন্দর একই সাথে বাইট গ্রহণ করে)।

"সাধারণ ক্ষেত্রে" কোড এমনকি স্বতন্ত্র ইউআরটির দিকে তাকাতে হয় না বলে এই পদ্ধতির প্রকৃতপক্ষে প্রাপ্তির জন্য উল্লেখযোগ্যভাবে দক্ষতার সাথে কাজ করতে পারে। মনে করুন যে আপনি 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 টি চ্যানেলের ডেটা বাইট একবারে উপস্থিত হলে খুব বেশি কাজ করা যায়) তবে বেশিরভাগ নমুনায় কাজের পরিমাণ খুব বেশি হবে সামান্য। যদি কারও কাছে I৪ আই / ও পিন থাকে তবে "সাধারণ" ক্ষেত্রে অতিরিক্ত কাজ যুক্ত না করে কেউ এই পদ্ধতির সাহায্যে 32 ইউআরটি পর্যন্ত পরিচালনা করতে পারে।


1

পিকাক্সের মতো একটি মাইক্রোকন্ট্রোলার এক পিনে সিরিয়াল ডেটা এবং নির্দিষ্ট পিনে যথাযথভাবে সিরিয়াল ডেটা নিতে পারে। আপনি যদি পিক্সেকে কোন পিনটি আউটপুট আউট করে তা জানানোর জন্য প্রস্তুত থাকলে এটি কার্যকরভাবে আপনাকে আরও সিরিয়াল আউটপুট দেয়। এটি একই কাজ করতে পারে তবে বিপরীতে, তাই এটি একাধিক ডিভাইস থেকে ক্রমিক ডেটা গ্রহণ করতে পারে এবং এটি রাস্পবেরি পাইতে প্রেরণ করতে পারে। আরেকটি বিকল্প সংযুক্ত ডিভাইস একটি প্রয়োজন এমন সমস্ত হতে পারে কোয়ালিফায়ার । এর অর্থ ডিভাইস 1 -র জন্য 'd1' ডেটা গ্রহণ করতে হবে, উদাহরণস্বরূপ এটি সিরিয়াল লাইনে আরও ডেটা শোনার আগে। ডিভাইস 2 এর কোয়ালিফায়ার হিসাবে 'ডি 2' থাকতে পারে। এর অর্থ হ'ল ডিভাইস 1 এ 'হ্যালো' বলতে গেলে আপনাকে কেবল ইউআরটি লাইনে 'ডি 1 হেলো' পাঠাতে হবে।

পিক্সেসগুলি মোটামুটি সস্তা, আপনি সেগুলি http://www.techsupplies.co.uk/ এ পেতে পারেন এবং এগুলি বিভিন্ন আকারের পিন এবং আরও অনেকগুলি আকারে আসে।


1

যদি বেশ কয়েকটি ইউআরটি ক্রীতদাস ডিভাইসের সাথে যোগাযোগের সমান্তরাল হওয়ার প্রয়োজন না হয়, তবে আপনি তাদের মধ্যে উপলব্ধ একটি ইউআরটি বন্দর ভাগ করতে পারেন। আপনি বর্তমানে যে ডিভাইসে কথা বলতে চান তাতে কেবলমাত্র RxD / TxD সংযোগ সক্ষম করতে আপনি ট্রানজিস্টর ব্যবহার করতে পারেন। এই ট্রানজিস্টরগুলি অন্যান্য রাস্পবেরি পাই জিপিআইও পিনগুলি দ্বারা নিয়ন্ত্রিত হতে পারে।


1

রাস্পবেরি পাই 4 এখন পর্যন্ত 4 টি ইউআরটি ইন্টারফেস সমর্থন করে যা কোনও ডিভাইস ট্রি ওভারলে মাধ্যমে সক্ষম করা প্রয়োজন। আপনি কীভাবে এটি করতে পারবেন এবং কোন পিনগুলি আপাতত এখানে ব্যবহার করা হবে তা খুঁজে পেতে পারেন:

https://www.raspberrypi.org/forums/viewtopic.php?t=244827

আরপিআই ফাউন্ডেশন এখনও এর জন্য ডকুমেন্টেশন প্রস্তুত করছে।


0

আমারও একই সমস্যা ছিল। আমার 2-4 জিএসএম মডিউলগুলির সাথে সংযোগ স্থাপন করতে হবে এবং আমি হার্ডওয়্যার সমাধান পেয়েছি: http://www.instructables.com/id/SPI-to-4-x-UART-Bridge-MULTIUART/

এই সমাধানটি PIC24FJ64GA306 ভিত্তিক। আপনি পিটিকে এটমেল এমকিউ দিয়ে প্রতিস্থাপন করতে পারেন তবে আপনাকে অবশ্যই নতুন পিসিবি তৈরি করতে হবে :)


0

আমি এসসি 16 আই এস 752 আইসি ব্যবহার করছি যা এসপিআই থেকে 2xUART রূপান্তরকারী। এটি রাস্পবিয়ান স্ট্রেচের সাথে ভাল কাজ করে।

এটি এফটিডিআই চিপের চেয়ে কিছুটা বেশি ব্যয়বহুল, তবে দুটি ইউআর্ট রয়েছে এবং আমাকে মূল্যবান ইউএসবি পোর্ট ব্যবহার করতে হবে না।


-1

উপর একটি চেহারা আছে https://www.kickstarter.com/projects/1915118535/uart-hat-for-raspberry-pi আমি এটা আপনার সমস্যা সমাধানের পারে আশা করি


1
যেহেতু এটি এমন কোনও পণ্য নয় যা প্রকৃতপক্ষে উপলব্ধ, এটি এটিকে একটি খারাপ পছন্দ করে তোলে poor
Jacobm001

1
সবচেয়ে খারাপটি এখনও মনে হচ্ছে যে কেএস প্রকল্পটি পণ্য সরবরাহ না করে ভাঁজ করেছিল company
ওয়াইনসোকেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.