সফ্টওয়্যার ইউআরটিতে স্টার্ট বিট সনাক্ত করা হচ্ছে


9

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

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

এটি কি কোনও ইউআরটি চ্যানেলের সাথে অনিবার্য সমস্যা? অথবা ইউসি প্রস্তুতকারকরা তাদের হার্ডওয়্যার ইউআরটিগুলিতে কিছু চালাক কৌশল ব্যবহার করেন?


ভাল প্রশ্ন. আপনার বাহ্যিক ডিভাইস কি ধারাবাহিকভাবে অক্ষর প্রেরণ করে? যদি তা না হয় তবে আপনার স্টার্ট বিট এবং স্টপ বিটটি সারিবদ্ধ হয়েছে কিনা তা পরীক্ষা করা উচিত। এবং যদি অন্তর্নির্মিত ডেটাগুলি আপনার চেক (যোগ / বিট) এর সাথে মেলে?
পল

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

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

1
আপনার কোনও বিশেষ উপস্থাপনের দরকার নেই ... কেবলমাত্র একটি চরিত্রের চেয়ে দীর্ঘ সময়ের মধ্যে অন্তর বিশ্রামের প্রয়োজন (ইনস্টার্ট, বিট বন্ধ করুন)। অথবা, 10+ এক টানা বিট বন্ধ করুন, যা একই জিনিস।
ব্রায়ান ড্রামন্ড

2
@ ফুয়াজ, বাহ্যিক ডিভাইস ক্রমাগত অক্ষরগুলির একটি দীর্ঘ প্রবাহ প্রেরণ করে, তবে এটি মাঝে মাঝে অলস হয়। সবচেয়ে খারাপ ক্ষেত্রে, প্রথমবার অলস হওয়া পর্যন্ত আমি কেবল ইনপুটটিকে অগ্রাহ্য করতে পারি।
ড্যান লাক্স

উত্তর:


5

আপনি যদি স্টপ বিটের দৈর্ঘ্য ব্যবহার করেন যা বাকী ডেটা স্ট্রিম থেকে সহজেই চিহ্নিত করা যায়, যেমন 1.5 বিট সময়, তবে মিড-ট্রান্সমিশন গ্রহণ করা সহজ হওয়া উচিত। যাইহোক, এটি বর্ধিত ওভারহেড ব্যয় করে আসে। আপনার স্টপ বিটের দৈর্ঘ্য বাড়ার সাথে সাথে আপনার মোট উপলব্ধ ডেটা থ্রুপুট ক্ষতিগ্রস্থ হবে।

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

মনে রাখবেন যে ফ্রেমের আকারের মতো ডেটা বিটের সংখ্যা অনুমানযোগ্য হওয়া উচিত, তাই আপনি যদি বাসের সক্ষমতাের 100% ব্যবহার করেন এবং আপনার স্টপ বিটটি একক সময় হলেও আপনি এখনও এটি সন্ধান করতে সক্ষম হবেন আপনি পর্যাপ্ত ফ্রেম সংগ্রহ করলে বিট শুরু করুন। প্রতিটি ফ্রেম এতে একটি হাই-লো ট্রানজিশন থাকার গ্যারান্টিযুক্ত। স্টপ বিটটি হ'ল সর্বদা উচ্চ। শুরু বিটটি হ'ল সর্বদা কম। আপনার ডেটাটি এলোমেলো (বা যথেষ্ট পরিমাণ এলোমেলো) ধরে নেওয়া, আপনি নিজের ফ্রেমের আকার বাফার তৈরি করার মতো সাধারণ কিছু করতে পারেন, এতে প্রতিটি বিট সেট করে এবং তারপরে ফ্রেম সংগ্রহ এবং এফারিং এ এই বাফারে রেখে যান যতক্ষণ না কেবল বাফার 1 থাকে বিট সেট। এই বিট আপনার স্টপ বিট। এটির পরে এক আপনার বিট। ভাল খবর! আপনি এটি খুঁজে পেয়েছেন।

আপনি যদি কোনও প্যারিটি বিট ব্যবহার করেন তবে অন্য বিকল্পটি হ'ল দুটি ফ্রেমের মূল্যবান ডেটা গ্রহণ করা, প্রথম কম বিটটিকে স্টার্ট বিট হিসাবে বেছে নেওয়া এবং তারপরে চেকসাম গণনা করা এবং প্যারিটির বিটের সাথে তুলনা করা। যদি এটি মেলে, তবে আপনি (সম্ভবত) শুরুটি কিছুটা খুঁজে পেয়েছেন। যদি এটি না হয়, পরবর্তী নিম্ন বিটটি চয়ন করুন এবং ভাল চেকসাম না পাওয়া পর্যন্ত পুনরাবৃত্তি করুন। যদি আপনি আপনার দুটি ফ্রেমের ডেটাতে কিছুটা খুঁজে না পান যা বৈধ প্রারম্ভিক বিট হিসাবে পরীক্ষা করে, তবে আপনার ডেটাটি নষ্ট হয়ে গেছে, এবং আপনাকে আরও দুটি ফ্রেম ধরতে হবে।


ঠিক আর স্টপ বিটগুলি বেঁচে থাকার আগ পর্যন্ত ফ্রেমগুলিতে এবং একসাথে ফ্রেমের ঝরঝরে ধারণা। এটি আমার নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য অত্যধিক ওভারহেড হবে তবে তবে চালাক।
ড্যান লাকস

যদি বাহ্যিক ডিভাইসটি এমন কিছু হয় যা ওপির কোনও নিয়ন্ত্রণ নেই (যা তিনি প্রশ্নের পূর্ববর্তী মন্তব্যে বলেছিলেন) তবে স্টপ বিটের দৈর্ঘ্য পরিবর্তন করতে সক্ষম হবেন এমন সম্ভাবনা কম।
tcrosley

আমি এই উত্তরটি লেখা শুরু করার সময় সেই মন্তব্য করা হয়নি। তবে, আমি তালিকাভুক্ত অন্য তিনটি অপশন এখনও স্টপ বিটের দৈর্ঘ্য স্থির হওয়ার ক্ষেত্রে প্রয়োগ করে।
ডাঃ ফানক

3

হার্ডওয়্যার ইউআরটিগুলির একই সমস্যা। তবে এটি সাধারণত এমন হয় যা সংক্ষিপ্ত ক্রমে নিজেকে সমাধান করে। প্রতিটি ফ্রেমের শেষে, স্টপ বিটটি পরীক্ষা করে দেখুন এবং এটি যদি উচ্চ না হয় তবে ফ্রেমটি বাতিল করুন এবং পরবর্তী উচ্চ-থেকে-নীচে রূপান্তরের জন্য অপেক্ষা করুন। ধরে নিই যে উত্স থেকে প্রাপ্ত ডেটা সম্পূর্ণরূপে প্যাথলজিকাল নয় (যেমন, "ইউইউইউইউ" এর দীর্ঘ স্ট্রিংস বা এএসসিআইআই 0x55), ইউআরটি শেষ পর্যন্ত নিজেকে বাস্তবের শুরুতে "হাঁটা" দেবে।


1

ধরে নিচ্ছি 8 এন 1 সংক্রমণ।

আপনার এক সারি 9 টি উচ্চ বা কম বিটের স্ট্রিংয়ের জন্য অপেক্ষা করতে হবে।

উচ্চতর হলে এটি ডেটাতে একটি অলস ফাঁক বা 0xFF অক্ষর এবং স্টপ বিট
বা
যদি কোনও START বিট এবং NULL 0x00 অক্ষর কম থাকে।

এর মধ্যে যে কোনও একটি শর্ত পুনরায় সংবিধানের অনুমতি দেবে।

এটির গতি বাড়ানোর জন্য: যদি আপনি নির্দিষ্ট অক্ষরগুলি জানেন যা ডেটাতে সম্ভব নয় তবে আপনি প্রতিটি বিটের জন্য বারবার (সত্যের পরে) আগত তথ্যগুলি পার্স করতে পারেন এবং যদি আপনি 7 টি অক্ষরের একটি সিরিজ পান যা বাজে (উচ্চ বিট সেট, নিম্ন) কেস, নিয়ন্ত্রণ কোড, বিরামচিহ্ন বা যা কিছু) এর পরে একটি বৈধ চরিত্র আপনাকে মোটামুটি নিশ্চিত করতে পারে যে আপনি পুনরায় সংবিধানবদ্ধ।

আপনি যখন বিল্ট-ইন ইউআরটি পেরিফেরিয়ালটি ব্যবহার করেন এবং বিটওয়াইজ মূল্যায়ন করতে অক্ষম হন এবং আপনার ফ্রেমিং ত্রুটি বিটগুলি পুনরায় সেট করতে এবং যখনই ঘটে (বিশেষত ক্ষমতায় আসে) আপনার একইরকম সমস্যা হবে।

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