معرفی و بررسی ارتباط سریال دو سیمه و باس I2C

معرفی و بررسی ارتباط سریال دو سیمه و باس I2C
نوشته شده توسط

سلام خدمت همه عزیزان. در مطالب قبلی به بررسی و معرفی بستر ارتباطی RS232 پرداخته شد و توضیحاتی ذکر گردید. در این مطلب به بررسی و معرفی باس ارتباطی و پروتکل I2C پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این لینک مطالعه و بررسی کنید.


مقدمه ای در باره I2C

در بحث RS232 به مزایا و معایب پروتکل سریال و موازی پرداخته شد. با توجه به اینکه این پروتکل برای ارتباط device to device تا حدود 15متر با چندین خط در نظر گرفته شده بود که در برخی ارتباطات این امکانات ضرورتی نداشت و درصورت تطبیق سطوح ولتاژی می‌توانستیم از USART/UART استفاده کنیم اما همچنان قابلیت هایی مانند multi masters/slaves در آن ممکن نبود.

باس یا رابط سریال I2C اولین بار توسط شرکت فیلیپس درسال 1982 طراحی شد. این واسط از طریق دو سیم با نام های SDA و SCL که یکی برای انتقال اطلاعات و دیگری برای انتقال کلاک (پالس ساعت) می‌باشد تشکل شده است.

بستر ارتباطی 2 سیمه I2C
بستر ارتباطی 2 سیمه I2C

ویژگی های ارتباط سریال 2 سیمه یا I2C

  1. رابطی انعطاف پذیر و بسیار ساده اما درعین حال قدرتمند که فقط نیاز به دو خط انتقال دارد.
  2. قابلیت پشتیبانی از مد های master و slave در حالت های فرستنده و گیرنده در I2C.
  3. فضای آدرس هفت بیتی یا ده بیتی
  4. دارای قابلیت multi masters
  5. سرعت انتقال اطلاعات متفاوت برای سازگاری با پریفرال های مختلف.
  6. دارای قابلیت boardcast (فراخوانی عمومی)
  7. در برخی میکروکنترلر ها قابلیت بیدار شدن از مد sleep با تشخیص آدرس خود

در تاریخ 2021 داکیومنت مربوطه بروزرسانی شده و ورژن 7 آن منتشر گردید که مبنای این مطلب و توضیحات مربوط به I2C در آن، بر اساس آخرین نسخه می‌باشد. ارتباط سریال دو سیمه I2C شاید به بیش از 1000 نوع مختلف در 50 کمپانی پیاده سازی شده که معماری اصلی پروتکل هایی نظیر PMBUS ،SMBUS ،IPMI ،DDC ،ATCA نیز می‌باشد.

شایان ذکر است که I2C با I3C که در سال 2017 توسط NXP و MIPI معرفی شده نیز سازگار است. از این رو می‌توان گفت که با یک باس و ارتباط قدرتمندی روبه رو هستیم.

نحوه اتصال پریفرال ها در ارتباط سریال دو سیمه I2C

نحوه اتصال پریفرال ها در ارتباط سریال دو سیمه I2C
نحوه اتصال پریفرال ها در ارتباط سریال دو سیمه I2C

آنچه که تعداد پریفرال ها را در ارتباط سریال دو سیمه I2C محدود می‌کند، ظرفیت خازنی خط و نیز تعداد بیت آدرس دهی (7بیتی یا 10 بیتی) می‌باشد که می‌توان حداکثر طول 2 الی 3متری را برای آن متصور شد. سرعت ارتباط نیز مطابق جدول زیر است.

سرعت تبادل دیتا در ارتباط سریال دو سیمه I2C
سرعت تبادل دیتا در ارتباط سریال دو سیمه I2C

به دلیل طراحی open drain یا open collector بودن باس I2C نیاز داریم که آن را  توسط مقاومتی  pull up کنیم. همچنین به دلیل قابلیت wired-and ما مشکلی بابت اتصال چندین master /slave نخواهیم داشت. البته این ویژگی ها به ما این قابلیت را می‌دهد تا حدودی بتوان بدون تغییر سطوح ولتاژ، پریفرال های متفاوت باهم ارتباط برقرار نمایند. مانند پریفرالی که با ولتاژ 5 ولت و میکروکنترلری که با 3.3 ولت کار می‌کند.

اتصال پریفرال های مختلف در ارتباط سریال دو سیمه I2C
اتصال پریفرال های مختلف در ارتباط سریال دو سیمه I2C

اعتبار داده ها

هر بایت داده بر روی خط SDA باید 8 بیت طول داشته باشد. همچنین هیچ محدودیتی در مورد تعداد بایت های ارسالی توسط یک فرستنده برروی SDA وجود ندارد. باید توجه داشت که خط SDA نباید هنگامی که clock در سطح high است تغییر کند (شکل زیر). مگر در دو حالت start و stop condition.

نحوه انتقال بیت در باس I2C
نحوه انتقال بیت در باس I2C

تعریف Start & Stop Condition

همواره انتقال داده ها با Start  آغاز شده و به stop ختم خواهند شد. زمانیکه SCL یا همان کلاک در ارتباط I2C در حالت high قرار دارد اگر SDA از high به low تغییر وضعیت دهد start تلقی خواهد شد. بنابر تعریف ذکر شده نیز درصورتی که SCL در وضعیت high قرار داشته باشد، اگر SDA از low به high تغییر وضعیت دهد stop تفسیر می‌گردد.

Start & Stop Condition در ارتباط سریال دو سیمه I2C
Start & Stop Condition در ارتباط سریال دو سیمه I2C

تعریف Acknowledge (ACK) & Not Acknowledge (NACK)

بعد از هر بایت ارسال شده جهت تعیین اینکه این بایت توسط گیرنده پذیرش شده است یا نه، یک بیت دیگر در پالس بعدی ارسال می‌شود. که به N/ACK معروف است که عملکرد آن بصورت زیر است.

  • فرستنده خط SDA را آزاد می‌کند تا در پالس نهم، گیرنده با قرار دادن و نگاه داشتن خط بصورت low در زمانیکه که کلاک به high می‌رود (مانند start condition) به معنای ACK تفسیر گردد.
  • درصورتی که در پالس نهم خط SDA در مقدار high قرار بگیرد به معنای NACK است.
تعریف Acknowledge (ACK) & Not Acknowledge (NACK) در I2C
تعریف Acknowledge (ACK) & Not Acknowledge (NACK) در I2C

پنج حالت ممکن برای رخ دادن NACK

  • هیچ گیرنده ای در باس با آدرس ارسالی برای پاسخگویی و تایید وجود ندارد.
  • گیرنده قادر به دریافت یا ارسال نیست زیرا برخی عملکرد های real time را انجام می‌دهد و آماده شروع ارتباط با کنترلر نیست.
  • درحین انتقال، گیرنده داده یا دستوراتی را دریافت می‌کند که متوجه نمی‌شود.
  • درحین انتقال، گیرنده نمی‌تواند بایت داده بیشتری دریافت کند.
  • ارتباط ناقص صورت می‌گیرد و پایان انتقال مشخص نیست.

مسئله Arbitration یا Clock stretching زمانیکه چندین master وجود داشته باشد مطرح می‌شود در آینده به آن خواهیم پرداخت. همچنین از نسخه 3 به بعد مکانیزم device id نیز اضافه شده است که 3 بایت (غیر قابل تغییر) بصورت زیر است.

device id در ارتباط I2C
device id در ارتباط I2C
  • 12 بیت: بیت های مرتبط با نام سازنده قرار دارد مانند NXP
  • 9 بیت مربوط به شناسایی ایسی می‌باشد مانند PCA9698
  • 3 بیت بعدی مربوط به ورژن می‌باشد مانند RevX

اجازه بدهید نگاه عمیق تری به بیت های مربتط با چندین کمپانی سازنده داشته باشیم:

بررسی device id در استفاده کننده های مختلف I2C
بررسی device id در استفاده کننده های مختلف I2C

بی شک پارامترهای دیگری که شاید هنگام استفاده از میکروکنترلر مشهود نباشد. اما در FPGA و کاربرد های متنوع حائز اهمیت هستند که صرفا به ارائه این مشخصات برای سه مد Fast ،Standard و Fast-mode Plus در جدول زیر آمده است و به آن بسنده می‌کنیم.

سه حالت Standard Fast و Fast-mode Plus
سه حالت Standard Fast و Fast-mode Plus

  • جداول زیر برای مد High Speed می‌باشد.

همانطور که در بالا اشاره شد این جداول هنگامی اهمیت می یابد که شما بخواهید این پروتکل و باس را در  FPGA یا کاملا نرم افزاری پیاده سازی کنید.


جمع بندی

در این مطلب به معرفی و بررسی ارتباط سریال دو سیمه I2C پرداخته شد و نکات ابتدایی و اصول آن ذکر گردید. در مطالب بعدی به موارد باقی مانده و نحوه ارتباط با ایسی AT24Cxx که یک حافظه EEPROM می‌باشد پرداخته خواهد شد.

امیدوارم از این مطلب کمال بهره را برده باشید. در صورت داشتن هرگونه نظر یا سوال درباره این مطلب یا تجربه مشابه اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو به اشتراک بگذارید تا سایر دوستان هم بتوانند استفاده کنند. همینطور میتونید این مطلب را توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.