I2C বাস — অ্যাসাইনমেন্ট, ডিভাইস, ডেটা ট্রান্সফার, অ্যাড্রেসিং
একটি ইলেকট্রনিক সার্কিট তৈরি করার সময়, অনেক বিকাশকারী তার পৃথক ব্লকগুলিকে মেলানো, স্যাম্পলিং এবং অ্যাড্রেসিংয়ের জন্য প্রচুর সংখ্যক মধ্যবর্তী চিপ ব্যবহার করার প্রয়োজনের মুখোমুখি হন। অক্জিলিয়ারী চিপের সংখ্যা কমানোর জন্য, ফিলিপস 1980 এর দশকে একটি দ্বি-তারের দ্বিমুখী I2C সিরিয়াল নেটওয়ার্ক ইন্টারফেস প্রস্তাব করেছিল, বিশেষভাবে একটি একক ডিভাইসের মধ্যে একাধিক চিপ পরিচালনা করার জন্য ডিজাইন করা হয়েছিল।
আজ, ফিলিপস একাই ইলেকট্রনিক যন্ত্রপাতির জন্য শতাধিক I2C-সামঞ্জস্যপূর্ণ ডিভাইস তৈরি করে যার বিভিন্ন উদ্দেশ্য রয়েছে: মেমরি, ভিডিও প্রসেসর সিস্টেম, অ্যানালগ-টু-ডিজিটাল এবং ডিজিটাল-টু-অ্যানালগ রূপান্তরকারী, ডিসপ্লে ড্রাইভার ইত্যাদি।
I2C বাস হল সিরিয়াল ডেটা এক্সচেঞ্জ প্রোটোকলের একটি পরিবর্তন যা 100 থেকে 400 kbps হারে স্বাভাবিক "দ্রুত" মোডে সিরিয়াল 8-বিট ডেটা প্রেরণ করতে সক্ষম। ডেটা আদান-প্রদানের প্রক্রিয়াটি এখানে শুধুমাত্র দুটি তারের উপর প্রয়োগ করা হয় (সাধারণ তারের গণনা না করে): ডেটার জন্য SDA লাইন এবং সিঙ্ক্রোনাইজেশনের জন্য SCL লাইন।
বাসের সাথে সংযুক্ত ডিভাইসের আউটপুটগুলির ক্যাসকেডগুলিতে খোলা সংগ্রাহক বা চ্যানেল রয়েছে, এইভাবে AND ওয়্যারিংকে প্রতিলিপি করার কারণে বাসটি দ্বিমুখী হয়ে ওঠে। ফলস্বরূপ, বাসটি চিপগুলির মধ্যে সংযোগের সংখ্যা কমিয়ে দেয়, কম প্রয়োজনীয় পিন এবং বোর্ডে ট্রেস রেখে যায়। ফলস্বরূপ, বোর্ড নিজেই সরল, আরও কমপ্যাক্ট এবং প্রযুক্তিগতভাবে উত্পাদনে আরও উন্নত।
এই প্রোটোকল আপনাকে ঠিকানা ডিকোডার এবং অন্যান্য বাহ্যিক আলোচনার যুক্তি নিষ্ক্রিয় করতে দেয়। I2C বাসে একসাথে কাজ করতে পারে এমন চিপগুলির সংখ্যা এর ক্ষমতা দ্বারা সীমিত - সর্বাধিক 400 pF।
I2C-সামঞ্জস্যপূর্ণ IC-এর একটি হার্ডওয়্যার নয়েজ সাপ্রেশন অ্যালগরিদম রয়েছে যাতে শক্তিশালী হস্তক্ষেপের উপস্থিতিতেও ডেটা অখণ্ডতা নিশ্চিত করা যায়। এই জাতীয় ডিভাইসগুলির একটি ইন্টারফেস রয়েছে যা মাইক্রোসার্কিটগুলিকে একে অপরের সাথে যোগাযোগ করতে দেয় এমনকি তাদের সরবরাহ ভোল্টেজগুলি ভিন্ন হলেও। নীচের চিত্রে, আপনি একটি সাধারণ বাসের মাধ্যমে বেশ কয়েকটি মাইক্রোসার্কিট সংযোগ করার নীতির সাথে নিজেকে পরিচিত করতে পারেন।
বাসের সাথে সংযুক্ত প্রতিটি ডিভাইসের নিজস্ব অনন্য ঠিকানা রয়েছে, এটি এটি দ্বারা নির্ধারিত হয় এবং ডিভাইসের উদ্দেশ্য অনুসারে এটি রিসিভার বা ট্রান্সমিটার হিসাবে কাজ করতে পারে। ডেটা প্রেরণ করার সময়, এই ডিভাইসগুলি মাস্টার (মাস্টার) বা স্লেভ (দাস) হতে পারে। মাস্টার হল সেই ডিভাইস যা ডেটা স্থানান্তর শুরু করে এবং SCL লাইনে ঘড়ির সংকেত তৈরি করে। দাস, মালিকের সাথে সম্পর্কযুক্ত, গন্তব্য ডিভাইস।
I2C বাসে অপারেশনের যে কোনো মুহূর্তে, শুধুমাত্র একটি ডিভাইস মাস্টার হিসেবে কাজ করতে পারে; এটি SCL লাইনে একটি সংকেত তৈরি করে।একজন মাস্টার হয় মাস্টার রিসিভার বা মাস্টার ট্রান্সমিটার হতে পারে।
নীতিগতভাবে, বাসটি বিভিন্ন মাস্টারদের অনুমতি দেয়, তবে নিয়ন্ত্রণ সংকেত গঠন এবং বাসের অবস্থা পর্যবেক্ষণের বৈশিষ্ট্যগুলির উপর বিধিনিষেধ আরোপ করে; এর মানে হল যে একাধিক মাস্টার একই সময়ে ট্রান্সমিট করা শুরু করতে পারে, কিন্তু এই ধরনের দ্বন্দ্বগুলি সালিশির জন্য বাদ দেওয়া হয়, অর্থাৎ, মাস্টার যেভাবে আচরণ করে যখন এটি সনাক্ত করে যে বাসটি অন্য মাস্টার দ্বারা দখল করা হয়েছে।
ডিভাইসগুলির একটি জোড়ার সিঙ্ক্রোনাইজেশন নিশ্চিত করা হয় যে সমস্ত ডিভাইস বাসের সাথে সংযুক্ত থাকে, একটি "AND" তারের গঠন করে। প্রাথমিকভাবে, SDA এবং SCL সংকেত উচ্চ।
শুরু করুন এবং থামুন
এক্সচেঞ্জ শুরু হয় মাস্টার দ্বারা "START" অবস্থা তৈরি করে: SDA লাইনে, সংকেত উচ্চ থেকে নিম্ন অবস্থায় যায়, যখন SCL লাইনের একটি স্থিতিশীল উচ্চ স্তর থাকে। বাসের সাথে সংযুক্ত সমস্ত ডিভাইস এই পরিস্থিতিটিকে এক্সচেঞ্জ শুরু করার আদেশ হিসাবে উপলব্ধি করে।
বাসে ডেটা প্রেরণ করার সময় প্রতিটি মাস্টার এসসিএল লাইনে একটি পৃথক ঘড়ি সংকেত তৈরি করে।
এক্সচেঞ্জটি মাস্টার দ্বারা স্টপ স্টেট গঠনের সাথে শেষ হয়: SDA লাইনে সংকেত নিম্ন থেকে উচ্চে পরিবর্তিত হয়, যখন SCL লাইনের একটি স্থিতিশীল উচ্চ স্তর থাকে।
ড্রাইভার সবসময় START এবং STOP সংকেতের উৎস হিসাবে কাজ করে। যত তাড়াতাড়ি «START» সংকেত স্থির করা হয়, এর মানে হল যে লাইনটি ব্যস্ত। একটি STOP সংকেত সনাক্ত করা হলে লাইনটি বিনামূল্যে।
START অবস্থা ঘোষণা করার পরপরই, মাস্টার SCL লাইনকে নিচু করে দেয় এবং SDA লাইনে প্রথম মেসেজ বাইটের সবচেয়ে উল্লেখযোগ্য বিট পাঠায়। একটি বার্তায় বাইটের সংখ্যা সীমিত নয়।SDA লাইনে পরিবর্তনগুলি শুধুমাত্র তখনই সক্রিয় করা হয় যখন SCL লাইনে সংকেত স্তর কম থাকে। ডেটা বৈধ এবং শুধুমাত্র সিঙ্ক পালস উচ্চ হলেই পরিবর্তন করা উচিত নয়৷
স্লেভ রিসিভার মাস্টার ট্রান্সমিটার থেকে বাইট পেয়েছে তা স্বীকার করে অষ্টম ডেটা বিট পাওয়ার পরে এসডিএ লাইনে একটি বিশেষ স্বীকৃতি বিট সেট করে করা হয়।
নিশ্চিতকরণ
সুতরাং, ট্রান্সমিটার থেকে রিসিভারে 8 বিট ডেটা পাঠানোর ফলে SCL লাইনে একটি অতিরিক্ত পালস শেষ হয় যখন প্রাপ্তি ডিভাইসটি SDA লাইনে কম যায়, এটি নির্দেশ করে যে এটি সম্পূর্ণ বাইট পেয়েছে।
নিশ্চিতকরণ ডেটা স্থানান্তর প্রক্রিয়ার একটি অবিচ্ছেদ্য অংশ। মাস্টার একটি সিঙ্ক পালস তৈরি করে। স্বীকৃত ঘড়ি সক্রিয় থাকাকালীন ট্রান্সমিটারটি SDA-তে একটি নিম্ন অবস্থা পাঠায়। সিঙ্ক পালস বেশি হলেও রিসিভারকে অবশ্যই SDA কম রাখতে হবে।
যদি গন্তব্য স্লেভ তার ঠিকানা স্বীকার না করে, উদাহরণস্বরূপ কারণ এটি বর্তমানে ব্যস্ত, ডেটা লাইনটি অবশ্যই উঁচুতে রাখা উচিত। মাস্টার তখন প্রেষণ বাতিল করার জন্য একটি STOP সংকেত দিতে পারে।
অভ্যর্থনা যদি মাস্টার রিসিভার দ্বারা বাহিত হয়, তাহলে ট্রান্সমিশন শেষ হওয়ার পরে স্লেভ ট্রান্সমিটারকে জানাতে বাধ্য - শেষ বাইট নিশ্চিত করে নয়। স্লেভ ট্রান্সমিটার ডেটা লাইন রিলিজ করে যাতে মাস্টার একটি STOP সংকেত বা পুনরাবৃত্তি করা START সংকেত জারি করতে পারে।
ডিভাইসগুলির সিঙ্ক্রোনাইজেশন নিশ্চিত করা হয় যে SCL লাইনের সংযোগগুলি "AND" নীতি অনুসারে তৈরি করা হয়।
নিম্ন থেকে উচ্চে SCL লাইনের রূপান্তর নিয়ন্ত্রণ করার একমাত্র অধিকার মাস্টারের নেই।যদি স্লেভের একটি প্রাপ্ত বিট প্রক্রিয়া করার জন্য আরও সময় লাগে, তবে এটি পরবর্তী বিট ডেটা গ্রহণের জন্য প্রস্তুত না হওয়া পর্যন্ত এটি স্বাধীনভাবে SCL কম রাখতে পারে। এই ধরনের পরিস্থিতিতে SCL লাইন দীর্ঘতম নিম্ন-স্তরের সিঙ্ক পালসের সময়কালের জন্য কম হবে।
দীর্ঘতম মেয়াদ শেষ না হওয়া পর্যন্ত সর্বনিম্ন টেকসই লো সহ ডিভাইসগুলি নিষ্ক্রিয় থাকবে। যখন সমস্ত ডিভাইস কম সিঙ্ক পিরিয়ড শেষ করে, তখন SCL বেশি হবে।
সমস্ত ডিভাইস উচ্চ ক্লকিং শুরু করবে এবং প্রথম ডিভাইসটি তার সময়কাল সম্পূর্ণ করবে যেটি প্রথম SCL লাইন কম সেট করবে। ফলস্বরূপ, SCL এর নিম্ন অবস্থার সময়কাল একটি ডিভাইসের সিঙ্ক্রোনাইজেশন পালসের দীর্ঘতম নিম্ন অবস্থা দ্বারা নির্ধারিত হবে, এবং উচ্চ অবস্থার সময়কাল একটি ডিভাইসের সিঙ্ক্রোনাইজেশনের স্বল্পতম সময়ের দ্বারা নির্ধারিত হবে। ডিভাইস
সিঙ্ক্রোনাইজেশন সংকেতগুলি রিসিভারদের দ্বারা বিট এবং বাইট স্তরে ডেটা ট্রান্সমিশন নিয়ন্ত্রণের উপায় হিসাবে ব্যবহার করা যেতে পারে।
যদি ডিভাইসটি উচ্চ হারে বাইট গ্রহণ করতে সক্ষম হয়, কিন্তু প্রাপ্ত বাইট সংরক্ষণ করতে বা পরবর্তী বাইট গ্রহণের জন্য প্রস্তুত হতে এটি একটি নির্দিষ্ট পরিমাণ সময় নেয়, তাহলে এটি একটি বাইট গ্রহণ এবং স্বীকার করার পরে এসসিএল কম ধরে রাখতে পারে, জোর করে একটি স্ট্যান্ডবাই অবস্থায় ট্রান্সমিটার।
বিল্ট-ইন হার্ডওয়্যার সার্কিট ছাড়া একটি মাইক্রোকন্ট্রোলার, উদাহরণস্বরূপ বিট স্তরে, তাদের নিম্ন অবস্থার সময়কাল বাড়িয়ে ঘড়ির গতি কমিয়ে দিতে পারে৷ ফলস্বরূপ, মাস্টার ডিভাইসের বড রেট নির্ধারিত হবে গতির দ্বারা ধীর ডিভাইস।
অ্যাড্রেসিং
I2C বাসের সাথে সংযুক্ত প্রতিটি ডিভাইসের একটি অনন্য প্রোগ্রাম ঠিকানা থাকে যেখানে মাস্টার একটি নির্দিষ্ট কমান্ড পাঠিয়ে এটিকে সম্বোধন করেন। একই ধরণের মাইক্রোসার্কিটগুলি একটি ঠিকানা নির্বাচক দ্বারা চিহ্নিত করা হয়, যা নির্বাচকের ডিজিটাল ইনপুট আকারে বা এনালগ আকারে প্রয়োগ করা হয়। ঠিকানাগুলি বাসের সাথে সংযুক্ত ডিভাইসগুলির ঠিকানার জায়গায় বিভক্ত।
সাধারণ মোড সাত-বিট অ্যাড্রেসিং ধরে নেয়। ঠিকানা নিম্নরূপ কাজ করে: «START» কমান্ডের পরে, মাস্টার প্রথম বাইট পাঠায়, যা নির্ধারণ করে যে কোন স্লেভ ডিভাইসটি মাস্টারের সাথে যোগাযোগ করতে হবে। এছাড়াও একটি সাধারণ কল ঠিকানা রয়েছে যা বাসের সমস্ত ডিভাইসকে সংজ্ঞায়িত করে, সমস্ত ডিভাইস (তাত্ত্বিকভাবে) একটি স্বীকৃতির সাথে এটির প্রতিক্রিয়া জানায়, তবে বাস্তবে এটি বিরল।
তাই প্রথম বাইটের প্রথম সাতটি বিট হল স্লেভ অ্যাড্রেস। সর্বনিম্ন উল্লেখযোগ্য বিট, অষ্টম, তথ্য পাঠানোর দিক নির্দেশ করে। যদি একটি «0» থাকে, তাহলে মাস্টার থেকে এই ক্রীতদাসের কাছে তথ্য লেখা হবে। যদি «1», তথ্য এই স্লেভ থেকে মাস্টার দ্বারা পড়া হবে.
মাস্টার ঠিকানা বাইট পাঠানো শেষ করার পরে, প্রতিটি স্লেভ তার ঠিকানার সাথে তুলনা করে। একই ঠিকানার যে কেউ একজন স্লেভ এবং ঠিকানা বাইটের ন্যূনতম উল্লেখযোগ্য বিটের মানের উপর নির্ভর করে তাকে স্লেভ ট্রান্সমিটার বা স্লেভ রিসিভার হিসাবে সংজ্ঞায়িত করা হয়।
একটি স্লেভ ঠিকানা স্থির এবং প্রোগ্রামযোগ্য অংশ অন্তর্ভুক্ত করতে পারে। প্রায়শই একই ধরণের ডিভাইসগুলির একটি বড় সংখ্যক একটি সিস্টেমে কাজ করে, তারপরে ঠিকানার প্রোগ্রামযোগ্য অংশটি বাসে সর্বাধিক একই ধরণের ডিভাইস ব্যবহারের অনুমতি দেয়। অ্যাড্রেস বাইটের কতগুলি বিট প্রোগ্রামেবল তা নির্ভর করে চিপে থাকা ফ্রি পিনের সংখ্যার উপর।
কখনও কখনও প্রোগ্রামেবল ঠিকানা পরিসরের একটি এনালগ সেটিং সহ একটি পিন যথেষ্ট, উদাহরণস্বরূপ SAA1064 - একটি LED নির্দেশক ড্রাইভার যা ঠিক এই ধরনের একটি বাস্তবায়ন আছে। একটি নির্দিষ্ট পিনের সম্ভাব্যতা চিপের ঠিকানা স্থানের অফসেট নির্ধারণ করে যাতে একই ধরণের চিপগুলি একই বাসে অপারেটিং বিরোধ না করে। I2C বাস সমর্থনকারী সমস্ত চিপগুলিতে ঠিকানাগুলির একটি সেট থাকে যা প্রস্তুতকারক ডকুমেন্টেশনে নির্দিষ্ট করে।
সংমিশ্রণ «11110XX» 10-বিট ঠিকানার জন্য সংরক্ষিত। আমরা যদি "START" কমান্ড থেকে "STOP" কমান্ডে ডেটা আদান-প্রদানের কল্পনা করি, তাহলে এটি দেখতে এরকম হবে:
সহজ এবং সম্মিলিত ডেটা বিনিময় বিন্যাস এখানে অনুমোদিত। সম্মিলিত বিন্যাসের মানে হল যে "স্টার্ট" এবং "স্টপ" এর মধ্যে মাস্টার এবং স্লেভ রিসিভার এবং ট্রান্সমিটার হিসাবে কাজ করতে পারে, এটি সিরিয়াল মেমরি পরিচালনার উদাহরণের জন্য দরকারী।
ডেটার প্রথম বাইট একটি মেমরি ঠিকানা স্থানান্তর করা যাক। তারপরে, «START» কমান্ডটি পুনরাবৃত্তি করে এবং স্লেভ ঠিকানাটি পড়া, মেমরি ডেটা কাজ করবে। পূর্বে অ্যাক্সেস করা ঠিকানা স্বয়ংক্রিয়ভাবে বৃদ্ধি বা হ্রাস করার সিদ্ধান্তগুলি ডিভাইস বিকাশকারী দ্বারা পূর্বে চিপ ডকুমেন্টেশন অধ্যয়ন করার পরে করা হয়। একটি উপায় বা অন্যভাবে, START কমান্ড প্রাপ্তির পরে, সমস্ত ডিভাইসগুলিকে তাদের যুক্তি পুনরুদ্ধার করতে হবে এবং ঠিকানাটি এখন নামকরণ করা হবে তার জন্য প্রস্তুত হতে হবে।