پروتکل 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
نظرات (18)