آشنایی با پروتکل های ارتباطی: درس سوم(I2C)

پنج شنبه, 17 تیر 1395 11:31
این مورد را ارزیابی کنید
(20 رای‌ها)

بعد از بررسی ارتباطات SPI و UART در این مقاله آخرین پروتکل یعنی I2C (the inter-integrated circuit) مورد بررسی قرار می گیرد. قطعاتی مانند نمایشگرهای قدیمی، سنسورهای فشار بارومتری، ژیروسکوپ و شتاب سنج از این پروتکل استفاده می کنند.

 

پروتکل I2C در واقع ادغام شده از بهترین ویژگی های SPI  و UART می باشد. توسط I2C امکان اتصال چند slave به یک master (مانند SPI) و یا استفاده از چند master برای کنترل یک یا چند slave وجود دارد. این ویژگی زمانی که شما می خواهید از چند میکروکنترلر برای ارسال داده به یک کارت حافظه و یا نمایش بر روی LCD استفاده کنید، بسیار مناسب می باشد.

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

SDA (Serial Data) =  خطی برای ارسال و دریافت داده بین master و slave

SCL (Serial Clock) =  خطی که حامل سیگنال کلاک می باشد.

I2C یک پروتکل ارتباطی سریال می باشد، لذا داده ها به صورت بیب به بیت از طریق خط SDA منتقل خواهند شد.

همانند SPI، پروتکل I2C نیز به صورت همزمان می باشد، لذا بیت های خروجی با بیت های نمونه توسط سیگنال کلاک همزمان می باشند. سیگنال کلاک توسط master کنترل می شود.

 

  تعدا سیم ها  2
حداکثر سرعت 

حالت استاندارد   100 kbps

حالت سریع   400  kbps

حالت با سرعت بالا     3.4  Mbps

حالت با سرعت خیلی بالا    5 Mbps

همزمان یا نا همزمان  همزمان
سریال یا موازی  سریال
حداکثر تعداد master نامحدود
حداکثر تعداد 1008

       

نحوه عملکرد I2C:

در I2C داده ها به صورت پیام هایی فرستاده شده و پیام ها نیز خود به چند بخش تقسیم می شوند. هر پیام شامل یک بخش آدرس بوده، که همان آدرس باینری مربوط بهslave  است. یک یا دو بخش مربوط به داده نیز در پیام های ارسالی وجود دارد. پیام همچنین شامل شرایط اولیه و پایانی، بیت های read/write و بیت های ACK / NACK بین هربخش از پیام می شود.

معرفی پیام، بخش، و بیت های I2C:

شرایط شروع: تغییر خط SDA از حالت high به حالت low، قبل از تغییر خط SCL به همین صورت

شرایط پایان: تغییر خط SDA از حالت low به حالت high، بعد از تغییر خط SCL به همین صورت

بخش آدرس: ارسال 7 تا 10 بیت با توالی منحصر به فرد به هر slave جهت تشخیص توسط master

بیت read / write : وجود یک بیت هنگامی که داده از طرف master برای slave (ولتاژ سطح low) و بر عکس (ولتاژ سطح high) فرستاده می شود.

بیت ACK / NACK : هر بخش پیام شامل یک بیت تصدیق کننده / عدم تصدیق کننده می باشد. در صورتی که بخش آدرس پیام یا  بخش داده ی پیام به درستی دریافت شود، یک بیت ACK از طرف دستگاه دریافت کننده به فرستنده ارسال می گردد.

آدرس دادن:

I2C برخلاف SPI دارای خطی برای انتخاب slave مورد نظر نیست. بنابراین برای اینکه هرslave  تشخیص دهد که کدام داده برای آن ارسال شده، از روش آدرس دهی استفاده می شود. بخش آدرس همیشه اولین بخش بعد از بیت شروع در هر پیام می باشد.

Master آدرس slave مورد نظر برای اتصال را ارسال می کند. سپس هر کدام از slave ها این آدرس را با آدرس خود مقایسه می کنند. در صورت همخوانی آدرس، یک بیت سطح پایین ACK برای master فرستاده می شود. در صورتی که آدرس هم خوانی نداشته باشد، اتفاقی نیافتاده و خط SDA در وضعیت high باقی می ماند.

بیت read / write :

بخش آدرس در انتهای خود شامل یک بیت بوده که به slave اطلاع می دهد، که master قصد خواندن اطلاعات از آن و یا ارسال اطلاعات به آن را دارد. در صورتی که master قصد ارسال اطلاعات داشته باشد، این بیت در وضعیت low و در صورتی که در قصد خواندن داشته باشد، این بیت در وضعیت high قرار خواهد گرفت.

بخش داده:

بعد از دریافت بیت ACK توسط master از طرف slave، اولین بخش داده آماده ارسال می باشد.

بخش داده همیشه شامل 8 بیت بوده و بیت های باارزش تر(MSB) در ابتدا فرستاده می شوند. این بخش ها بلافاصله با بیت ACK / NACK همراه شده تا تشخیص داده شود، که داده به درستی دریافت شده است. بیت ACK قبل از اینکه داده بعدی ارسال گردد، باید توسطmaster  و یا slave دریافت شود ( بستگی دارد به اینکه کدام یک داده را ارسال کرده باشند).

بعد از ارسال تمامی بخش های پیام، master می تواند شرایط توقف را به slave ارسال کند تا انتقال اطلاعات متوقف شود. شرایط پایانی در واقع تغییر ولتاژ خط SDA از حالت low به high، بعد از تغییر خط SCL به همین صورت و باقی ماندن در وضعیت high می باشد.

 

مراحل انتقال داده از طریق پروتکل I2C:

1- شرایط شروع از طرف master به تمامی slave هایی که به آن متصل هستند، ارسال می گردد. به این صورت که ابتدا خط SDA و سپس خط SCL از حالت low به high تغییر می کند.

 

2- از طریق بیت read/write آدرس 7 یا 10 بیتی توسط master برای slave ها فرستاده می شود، تا هدف مورد نظر پیدا تشخیص داده شود.

 

3- هر کدام از slave ها آدرس فرستاده شده را با آدرس خود مقایسه می کنند. در صورت همخوانی آدرس، slave مورد نظر بیت ACK را از طریق قرار دادن خط SDA در حالت low برای مدت بیت، ارسال می کند. و در صورتی که آدرس همخوانی نداشته باشد، خط SDAدر حالت high ثابت باقی خواهد ماند.

 

Master -4  بسته داده را ارسال و یا دریافت می کند.

5- بعد از ارسال هر کدام از بسته های داده، دستگاه دریافت کننده یک بیت ACK به فرستنده ارسال می کند، تا از دریافت موفق داده اطلاع دهد.

 

6- برای توقف انتقال داده ها، master شرایط توقف را به slave ارسال می کند، به این صورت که ابتدا خط SCL و سپس خط SDA را از حالت low به حالت high تغییر می دهد.

 

استفاده از یک master جهت کنترل چند slave:

چون I2C از روش آدرس دهی استفاده می کند، امکان کنترل چند slave از طریق یک master وجود دارد. از طریق آدرس 7 بیتی، 128(27) آدرس مختلف به وجود می آید. استفاده از آدرس دهی 10 بیتی رایج نمی باشد، ولی در این حالت هم 1024(210) آدرس متفاوت به وجود می آید. نحوه اتصال در این روش را نیز در شکل زیر مشاهده می کنید، که مقاومت های 4.7 کیلو اهم pull-up از خط های SDA و SCL به VCC متصل می شوند:

استفاده از چند master برای کنترل چند slave:

امکان اتصال چند master به یک و یا چندslave  وجود دارد. در این حالت مشکل زمانی به وجود می آید که دو master بخواهند به طور هم زمان از یک خط SDA داده را ارسال و یا دریافت کنند. برای حل این مشکل هر کدام از master ها قبا از ارسال پیام باید تشخیص دهند که خط SDA در حالت low قرار دارد و یا حالت high. در صورتی که خط SDA در حالت low باشد، به این معناست که گذرگاه داده توسط master دیگری در حال استفاده می باشد، لذا باید تا پایان ارسال داده منتظر ماند. و در صورتی که خط SDA در حالت high  باشد، به معنای آزاد بودن خط است و امکان ارسال داده وجود دارد. نحوه اتصالات در  این روش هم در شکل زیر آمده است که از خط های SDA و SCL با مقاومت 4.7 کیلو اهم به VCC متصل شده اند:

مزایا و معایب روش I2C:

دلایل زیادی وجود دارد که امکان مقایسه روش I2C را با پروتکل های دیگر سخت می کند، ولی می توان از میان آنها دلایل خوبی برای انتخاب و یا عدم انتخاب I2C پیدا کرد:

مزایا:

  • استفاده از دو سیم
  • پشتیبانی کردن از چند master و چند slave
  • اطلاع از انتقال صحیح داده ها توسط بیت های ACK/NACK
  • ساختار سخت افزاری ساده تر نسبت به روش UART
  • پروتکل شناخته شده و پرکاربرد

 

معایب:

  • سرعت پایین تر انتقال اطلاعات نسبت به روش SPI
  • حداکثر طول داده 8 بیت می باشد.
  • تجهیزات سخت افزاری مشکل تر برای پیاده سازی نسبت به روش SPI

 

امیدواریم این چند مقاله اطلاعات مفیدی را اختیار شما قرار داد باشند.

با انتقادات و پیشنهادات خودتان می توانید ما را در جهت بهتر شدن محتوای مطالب کمک کنید.


 

ترجمه شده توسط صنعت بازار | منبع: circuitbasics

خواندن 26261 دفعه

کاربرانی که در این گفتگو شرکت کرده اند

نظرات (23)

  1. رضا

سلام دوست عزیز
درباره ست کردن سرعت هم اطلاعاتی دارید
معمولا پردازنده 32 بیتی ارم 100 کیلو هرتز به بالاست اما وقتی چند سنسور اسلیو با سرعت مختلف متصل می شه اونی که سرعتش پایینه نمی تونه داده بفرسته

 
  1. ایمان شکریه

محشر بود متشکرم

 
  1. پشتیبانی    ایمان شکریه

سلام دوست عزیز
ممنون از حسن نظرتون

 
  1. محمود

با سلام و تشکر فراوان از شما بزرگواران به خاطر قرار دادن این مطالب مفید و سپاس ویژه برای گذاشتن گزینه فایل PDF

 
  1. امامی

در قسمت مراحل انتقال داده از طریق پروتکل شرایط شروع از طرف مستر مگر تغییر حالت از حالت 1 به 0 نیست؟ چرا برعکس نوشته شده است؟

 
  1. آ

تشکر از مطلب خوبتون

 
  1. پشتیبان    آ

سلام دوست عزیز
ممنون حسن نظرتون
خوشحالم که مطالب آموزشی ما براتون مفید بوده.
تمام تلاش تیم صنعت بازار این هست که بتونه کمکی به علاقه مندان به ساختن و نوآوری در کشور کنه.
موفق باشید.

 
  1. OMIDVAR

ممنونم از راهنمایی با ارزشتون

 
  1. علی

و اینکه نحوه ی معرفی پایه هایi2cدر برنامه جطوره؟

 
  1. علی

با سلام من یک گیرنده ی اف ام دارم درس میکنم باtea5767 ولی هیچی دریافت نمیکنه با البته اردوینو یونو یک نفر گفت بیین پایه های i2cرو درست وصل میکنی ووو سوالی که داشتم در اردوینو من 2 تا قسمت هست برای i2cیکی بالاس قسمت دیجیتال یکی پایه ی a4...

با سلام من یک گیرنده ی اف ام دارم درس میکنم باtea5767 ولی هیچی دریافت نمیکنه با البته اردوینو یونو یک نفر گفت بیین پایه های i2cرو درست وصل میکنی ووو سوالی که داشتم در اردوینو من 2 تا قسمت هست برای i2cیکی بالاس قسمت دیجیتال یکی پایه ی a4 وa5انالوگ بعد به کجا وصل کنم و یک چیز دیگه ته خوندم تو نظرات منظور از پرتوکل ارتباطی چیه؟

ادامه مطلب
 
  1. حمید

سلام ممنون از راهنمایی هاتون. من یه مشکل دارم .من دوتا ایسی رو به هم وصل کردم و به یکیش کیپد و به یکی ال سی دی وصل کردم وقتی یک کلید رو فشار میدم داده های اشتباه به ایسی اسلو فرستاده میشه . هر بار هم مثلا کلید 1بزنی یه چیز متفاوت میده.

 
  1. نوید    حمید

پرتوکل ارتباطیتون چی هست؟؟
اگر rs232 استفاده میکنید مطمعن شید که باود ریت یکی باشه

 
  1. موسوی

سلام عالی بود ممنون

 
هیچ نظری در اینجا وجود ندارد
بارگذاری بیشتر ...

نظر خود را اضافه کنید.

ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید

محتوای آموزشی استفاده شده در این سایت محافظت شده می باشد و هرگونه کپی برداری از محتواهای تولید شده توسط تیم صنعت بازار موجب پیگرد خواهد بود. استفاده از مطالب صنعت بازار تنها با ذکر منبع به صورت لینک فعال بلامانع است

ما را دنبال کنید:

Copyright © 2017-2018 | Sanatbazar.com