(সম্পাদনা করুন: পরিষ্কার হওয়ার জন্য, নীচের অনেকগুলি উদ্বেগের সাথে I2C / SPI ডিভাইসগুলির বোর্ড-টু-বোর্ড ব্যবহারের কারণে সংকেত অখণ্ডতা রয়েছে যা অলিন সঠিকভাবে উল্লেখ করেছেন))
আপনার যদি এমন প্রতিবন্ধকতা না থাকে যা আপনাকে কম তারের দিকে দৃ strongly়ভাবে ধাক্কা দেয় (আমাদের কাছে হরমেটিকালি সিলড সংযোগকারী সহ একটি প্রকল্প ছিল যা প্রতিটি অতিরিক্ত যোগাযোগের চেয়ে ব্যয়বহুল ছিল), সম্ভব হলে আই 2 সি এড়িয়ে চলুন এবং এসপিআইয়ের সাথে লেগে থাকুন।
একটি হার্ডওয়্যার এবং সফ্টওয়্যার ভিত্তিতে মোকাবেলা করা মোটামুটি সহজ এসপিআই। হার্ডওয়্যারে দুটি ভাগ করে নেওয়া ডেটা লাইন রয়েছে, মাস্টার ইন স্লভ আউট (এমআইএসও বা এসএমআই) এবং মাস্টার আউট স্লেভ ইন (এমওএসআই বা সিমো), মাস্টার দ্বারা উত্পাদিত একটি ভাগ করা ঘড়ি এবং প্রতি ডিভাইসে একটি চিপ নির্বাচন করুন। সিএস লাইনটি নীচে যায়, ঘড়ির চক্র এবং লেনদেন শেষ না হওয়া অবধি ইনপুট বিটগুলিতে এবং আউটপুট বিটগুলিতে স্থানান্তরিত হয়, যার সিএস লাইন উচ্চতর হয়। যখন তাদের সিএস লাইন বেশি থাকে, স্লেভ ডিভাইসগুলি যোগাযোগ করে না: তারা সিএলকে এবং এমওএসআই লাইনগুলিকে উপেক্ষা করে এবং অন্য কাউকে এটির ব্যবহার করার জন্য তাদের এমআইএসও পিনটিকে একটি উচ্চ প্রতিবন্ধী অবস্থায় রাখে।
আপনার যদি বেশ কয়েকটি এসপিআই ডিভাইস ব্যবহার করে কোনও মাইক্রোকন্ট্রোলার থাকে এবং এটির অন্তর্নির্মিত এসপিআই পেরিফেরাল থাকে তবে মাইক্রোকন্ট্রোলারের সিএস আউটপুট একটি ডেমোলেটিপ্লেজারে প্রেরণ করুন (যেমন H৪ এইচসি 138) এবং এসপিআই লেনদেনের মধ্যে ডিভাইসটি নির্বাচন করার জন্য ঠিকানা লাইনগুলি নিয়ন্ত্রণ করুন; আপনি একটি রেজিস্টারগুলিকে আউটপুট জন্য সারি করার জন্য শব্দগুলি লিখেন এবং সিএস পিনটি উচ্চতার পরে সেগুলি আবার পড়ুন read
যেহেতু এসপিআই সিগন্যালগুলি সবই একমুখী, তাই তাদের বাফার করা যায়, ডিজিটাল বিচ্ছিন্নতার সাথে বিচ্ছিন্ন বাধা জুড়ে ব্যবহার করা যায় এবং এলভিডিএসের মতো লাইন ড্রাইভার ব্যবহার করে বোর্ড থেকে বোর্ডে পাঠানো যেতে পারে। আপনার কেবলমাত্র চিন্তার বিষয় হ'ল রাউন্ড ট্রিপ প্রচারের বিলম্ব, যা আপনার সর্বোচ্চ ফ্রিকোয়েন্সি সীমাবদ্ধ করবে will
আই 2 সি সম্পূর্ণ ভিন্ন গল্প। এটি কেবল দুটি তারের এসসিএল এবং এসডিএ সহ একটি তারের অবস্থান থেকে অনেক সহজ, এই দুটি লাইন ভাগ করে নেওয়া দ্বি নির্দেশমূলক লাইন যা বাহ্যিক পুলআপের সাহায্যে খোলা-ড্রেন ডিভাইস ব্যবহার করে। আই 2 সি এর জন্য একটি প্রোটোকল রয়েছে যা একটি ডিভাইস ঠিকানা প্রেরণ করে শুরু হয়, যাতে প্রত্যেকের নিজস্ব ঠিকানা থাকলে একাধিক ডিভাইস ব্যবহার করা যায়।
একটি হার্ডওয়্যার দৃষ্টিকোণ থেকে, কোনও উল্লেখযোগ্য শব্দ আছে এমন সিস্টেমে I2C ব্যবহার করা খুব কঠিন। আই 2 সি লাইনগুলি বাফার বা বিচ্ছিন্ন করার জন্য আপনাকে বিদেশী আইসিগুলি অবলম্বন করতে হবে - হ্যাঁ, সেগুলি রয়েছে, তবে অনেকগুলি নেই: আমরা একটি প্রকল্পে একটি ব্যবহার করেছি এবং বুঝতে পেরেছি যে আপনি একটি বিচ্ছিন্নতা ব্যবহার করতে পারেন, তবে আপনি পারেননি দুটি সিরিজে দুটি ব্যবহার করুন - এটিতে কোন দিকটি চালকের শেষ ছিল তা নির্ধারণ করতে এটি ছোট ভোল্টেজের ড্রপ ব্যবহার করেছিল এবং দুটি সিরিজের ড্রপ দুটি ছিল বেশি।
আই 2 সি এর লজিক স্তরের চৌম্বকগুলি ভিসির উপর নির্ভর করে তাই আপনি যদি একই সিস্টেমে 3V / 3.3V এবং 5V ডিভাইস ব্যবহার করেন তবে আপনাকে সত্যই সতর্ক হতে হবে।
একটি ফুট বা দু'য়ের বেশি তারের ব্যবহার করে এমন কোনও সংকেতকে কেবল ক্যাপাসিট্যান্স সম্পর্কে চিন্তিত হতে হবে। মাল্টিকন্ডাক্টর কেবলের জন্য 100pf / মিটার ক্যাপাসিট্যান্স সাধারণের বাইরে নয়। এর ফলে আপনাকে অতিরিক্ত ক্যাপাসিট্যান্স সঠিকভাবে পরিচালনা করতে এবং উত্থানের সময়ের প্রয়োজনীয়তা পূরণ করতে সক্ষম হতে বাসটি ধীর করতে হবে বা নিম্ন পুলআপ রেজিস্টার ব্যবহার করতে হবে।
সুতরাং আসুন আমরা বলি যে আপনার কাছে এমন একটি সিস্টেম রয়েছে যা আপনি মনে করেন যে আপনি ভাল নকশা করেছেন এবং আপনি বেশিরভাগ সিগন্যাল অখণ্ডতা সম্পর্কিত সমস্যাগুলি মোকাবেলা করতে পারেন, এবং গোলমাল বিরল (তবে এখনও উপস্থিত)। আপনার কীসের জন্য চিন্তা করতে হবে?
এখানে বেশ কয়েকটি ত্রুটি শর্ত রয়েছে যা আপনাকে পরিচালনা করার জন্য প্রস্তুত থাকতে হবে:
স্লেভ ডিভাইস একটি নির্দিষ্ট বাইট স্বীকৃতি দেয় না। আপনাকে এটি সনাক্ত করতে হবে এবং যোগাযোগের ক্রমটি থামিয়ে পুনরায় চালু করতে হবে। (এসপিআই এর মাধ্যমে, আপনি যদি নিশ্চিত হন যে এটি কোনও ত্রুটি ছাড়াই পেয়েছে তা নিশ্চিত করতে আপনি সাধারণত যে ডেটা প্রেরণ করেন তা আবার পড়তে পারেন))
আপনি একটি ক্রীতদাস ডিভাইস থেকে ডেটা বাইট পড়ছেন, এবং ক্লক লাইনে শব্দের কারণে ডিভাইসটি "সম্মোহিত" করা হয়েছে: আপনি এই বাইটটি পড়তে প্রয়োজনীয় 8 টি ঘড়ি প্রেরণ করেছেন, কিন্তু শোরগোলের কারণে, ক্রীতদাসটি এটি মনে করে 7 টি ঘড়ি পেয়েছে এবং এখনও 0 লাইনে ডেটা লাইনে প্রেরণ করছে। ডিভাইসটি যদি 8 তম ঘড়িটি পেয়ে থাকে তবে এটি ডেটা লাইনটি উচ্চতর ছেড়ে দিত যে মাস্টার কোনও এসকে বা ন্যাক বিট প্রেরণের জন্য ডেটা লাইন বাড়াতে বা কমিয়ে দিতে পারে, বা মাস্টার একটি স্টপ (পি) শর্ত প্রেরণ করতে পারে। তবে ক্রীতদাসটি এখনও অন্য একটি ঘড়ির জন্য নিরর্থকভাবে অপেক্ষা করে, ডেটা লাইনটি কম রেখেছে। কোনও মাস্টার অতিরিক্ত ঘড়ি চেষ্টা করার জন্য প্রস্তুত না হলে, আই 2 সি বাস অচল করে আটকে যাবে। আমি বেশ কয়েকটি মাইক্রোকন্ট্রোলার ব্যবহার করেছি যা সাধারণ এসি / ন্যাকের শর্তাদি পরিচালনা করে,
সত্যই ভয়ঙ্কর ঘটনাটি ঘটে যখন কোনও মাস্টার একটি গোলাম ডিভাইসে ডেটা লিখছেন এবং অন্য দাস ডিভাইসের ঠিকানাটি ভুলভাবে ব্যাখ্যা করে এবং মনে করেন যে প্রেরণ করা ডেটা তার জন্য এটি is আমাদের মাঝে আই 2 সি ডিভাইস রয়েছে (আই / ও এক্সপেন্ডার) যা এর কারণে মাঝে মাঝে ভুলভাবে নিবন্ধগুলি সেট করা থাকে। এই কেসটি সনাক্ত করা প্রায় অসম্ভব, এবং আওয়াজকে দৃ be় হতে আপনাকে আপনাকে পর্যায়ক্রমে সমস্ত রেজিস্টারগুলি সেট করতে হবে, যাতে আপনি যদি এই ত্রুটিটি চালিয়ে যান তবে কমপক্ষে এটি একটি অল্প সময়ের পরে স্থির হয়ে যাবে। (এসপিআই এর কখনই এই সমস্যা হয় না - যদি আপনার সিএস লাইনে কোনও ত্রুটি দেখা দেয় তবে এটি কখনই বেশি দিন স্থায়ী হবে না এবং ভুল দাস ডিভাইস দ্বারা ভুলবশত ডেটা পাবেন না))
প্রোটোকলটিতে ত্রুটি সনাক্তকরণ (সিআরসি কোড) থাকলে এই শর্তগুলির অনেকগুলি সঠিকভাবে পরিচালনা করা যেতে পারে, তবে কয়েকটি ডিভাইসে এটি রয়েছে।
আমি দেখতে পেয়েছি যে এই শর্তগুলি পরিচালনা করতে আমাকে আমার আই 2 সি মাস্টার ডিভাইসে জটিল সফটওয়্যার তৈরি করতে হবে। আমার মতে, ওয়্যারিংয়ের প্রতিবন্ধকতাগুলি I2C ব্যবহার করতে বাধ্য করে না এবং এসপিআই না করে এটি কেবল মূল্যবান নয়।