I2C ترکیبی از بهترین ویژگیهای SPI و UART ها میباشد
پروتکل ارتباطی I2C چیست؟
ما پیش از این در مقالات قبلی در مورد اصول SPI و UART صحبت کردیم و حال قصد داریم به پروتکل آخر از این دسته بپردازیم. این پروتکل Inter-Integrated circuit یا I2C نام دارد.
استفاده از پروتکل I2C شما را قادر میکند اسلیوهای چندگانه را به یک مستر متصل کنید یا میتوانید چند مستر را به کنترل یک یا چند اسلیو بگمارید. این ویژگی در شرایطی که دارای چند میروکنترلر هستید که باید اطلاعاتی را روی یک حافظه بریزند، به کار شما خواهد آمد.
I2C همانند پروتکل ارتباطی UART تنها از ۲ سیم برای انتقال داده بین دستگاهها استفاده میکند :
SDA (Serial Data)
|
داده سریال
|
خطی برای مستر و اسلیو که از طریق آن میتوانند دادهها را ارسال یا دریافت کنند
|
---|---|---|
SCL (Serial Clock)
|
کلاک سریال
|
خطی که سیگنال کلاک را حمل میکند
|
I2C یک پروتکل ارتباطی سریال میباشد. بنابراین دادهها بیت به بیت در طول یک خط ( خط SDA) عبور میکنند.
همانند I2C ، SPI نیز سنکرون میباشد. بنابراین بیتهای خروجی نسبت به بیتهای نمونه سنکرون هستند. سیگنال کلاک که بین مستر و اسلیو مشترک است، وظیفهی سنکرون کردن این بیتها را بر عهده دارد. البته همواره مستر وظیفه کنترل سیگنال کلاک را بر عهده دارد .
تعداد سیمها
|
2
|
---|---|
ماکزیمم سرعت
|
در مد استاندارد = 100kbps
|
|
در مد سریع = 400kbps
|
|
در مد فوق سریع = 4.3Mbps
|
|
در مد نهایت سرعت = 5Mbps
|
سنکرون یا غیرسنکرون بودن
|
سنکرون
|
سریال یا موازی؟
|
سریال
|
حداکثر تعداد مسترها
|
بدون محدودیت
|
حداکثر تعداد اسلیوها
|
1008
|
I2C چگونه کار میکند؟
از طریق I2C اطلاعات به شکل پیغام مبادله میشوند. پیامها از چارچوب دادههای متفاوتی تشکیل میشوند. هر پیام دارای یک بخش آدرس؛ که شامل آدرس باینری اسلیو میشود و دادهای که باید به اسلیو برسد؛ است. علاوه بر این، شرایط متوقف شدن تبادل، بیتهای خواندن نوشتن و بیت ACK /NACK نیز در پیام گنجانده میشود. شکل زیر اجزای تشکیلدهنده یک پیام I2C را نشان میدهد .
شرایط شروع : سطح ولتاژ خط SDA پیش از اینکه سطح ولتاژ خط SCL پایین بیاید کاهش پیدا میکند.
شرایط خاتمه : پس از اینکه سطح ولتاژ خط SCL بالا رفت سطح ولتاژ خط SDA نیز بالا میرود.
چارچوب آدرس : ترتیب بیت A7 تا A10 برای هر اسلیو منحصر به فرد است و مستر بر اساس این بیتها، اسلیوها را شناسایی و با آنها ارتباط برقرار میکند.
خواندن یا نوشتن بیت : این بیت مشخص میکند مستر داده را به اسلیو ارسال کرده ( سطح ولتاژ پایین ) یا از اسلیو طلب داده میکند ( سطح ولتاژ بالا)
بیت ACK/NACK : هر پیام توسط یک بیت تصدیق یا عدم تصدیق دنبال میشود. اگر چارچوب آدرس یا چارچوب داده با موفقیت دریافت شود، یک بیت ACK از طریق گیرنده به سوی فرستنده بازگردانده میشود.
آدرس دهی I2C
I2C همانند SPI دارای خطوط انتخاب اسلیو نیست بنابراین نیاز به روش دیگری دارد تا به یک اسلیو خاص بفهماند اطلاعات در حال ارسال شدن به او هستند بنابراین از آدرس دهی استفاده میکند. چارچوب آدرس همیشه اولین چارچوب پس از ارسال بیت آغازگر میباشد.
مستر آدرس اسلیوی که مایل به برقراری ارتباط با آن است را به تمام اسلیوها میفرستد سپس هر اسلیو آدرس را با آدرس خودش مقایسه میکند و در صورت تطابق آدرس ارسالی با آدرس خودش یک بیت ولتاژ پایین ACK را به مستر میفرستد. اگر آدرسها مطابقت نداشته باشند اسلیو کاری انجام نمیدهد و بنابراین سطح ولتاژ خط SDA بالا باقی میماند.
بیت خواندن و نوشتن
چارچوب آدرس در انتها دارای یک بیت میباشد که به اسلیو اطلاع میدهد مستر قصد دارد اطلاعاتی را برای او ارسال کند یا مایل به دریافت داده است. اگر مستر بخواهد اطلاعاتی را برای اسلیو ارسال کند بیت خواندن/ نوشتن صفر است اما اگر مستر بخواهد اطلاعاتی را از اسلیو دریافت کند ، بیت خواندن/ نوشتن یک خواهد بود .
چارچوب داده
پس از اینکه بیت ACK اسلیو توسط مستر دریافت شد، اولین چارچوب داده ارسال خواهد شد.طول چارچوب داده همواره ۸ بیت خواهد بود و با ارزش ترین بیت در ابتدا ارسال میشود. هر چارچوب دادهای بلافاصله با یک بیت ACK /NACK دنبال میشود تا فرستنده متوجه شود چارچوب داده به درستی ارسال شده است. بیت ACK باید از طریق مستر یا اسلیو ( بسته به اینکه کدامیک گیرنده باشند) ارسال شود. هنگامی که گیرنده بیت ACK را ارسال میکند، فرستنده متوجه میشود که چارچوب داده به درستی ارسال شده و سراغ ارسال چارچوب داده بعدی خواهد رفت. پس از اینکه تمام چارچوب دادهها ارسال شدند، مستر یک بیت خاتمه را به اسلیو میفرستد تا متوجه خاتمه مخابره شود. بیت خاتمه سطح ولتاژ خط SDA را بالا میبرد (البته پیش از این سطح ولتاژ SCL بالا رفته است)
مراحل انتقال داده در پروتکل I2C
(۱) مستر بیت آغازگر را به تمام اسلیوها میفرستد و سطح ولتاژ خط SDA و SCL پایین میآید:
(۲) مستر برای تمامی اسلیوها آدرسی به طول ۷ الی ۱۰ بیت را به همراه بیت خواندن/ نوشتن ارسال میکند:
(۳) هر اسلیو آدرسی که توسط مستر فرستاده شده را با آدرس خودش مقایسه میکند و اگر آدرسها با یکدیگر تطابق داشته باشند، اسلیو مورد نظر یک بیت ACK را به مستر ارسال میکند و سطح ولتاژ خط SDA پایین میآید. اگر آدرس ارسالی از طرف مستر با آدرس اسلیو همخوانی نداشته باشد، ولتاژ خط SDA بالا باقی خواهد ماند.
(۴) مستر چارچوب داده را دریافت یا ارسال میکند :
(۵) پس از اینکه چارچوب داده ارسال شد، دستگاه گیرنده، بیت ACK دیگری را به فرستنده ارسال میکند تا فرستنده متوجه شود دادههای ارسالی با موفقیت دریافت شدهاند :
(۶) برای متوقف کردن تبادل داده، مستر بیت خاتمه را به اسلیو ارسال خواهد کرد و سطح ولتاژ خط SCL و SDA به ترتیب پایین خواهد آمد :
یک مستر و چند اسلیو در I2C
از آن جایی که پروتکل I2C از سیستم آدرسدهی استفاده میکند، تعداد زیادی اسلیو میتوانند توسط یک مستر کنترل شوند. در صورتی که آدرس دارای ۷ بیت باشد، (۲۷)۱۲۸ آدرس مجزا در دسترس خواهد بود. البته استفاده از آدرسهای ۱۰ بیتی بسیار نادر است اما در صورت بهره بردن از آن، (۲۱۰)۱۰۲۴ آدرس مجزا قابل تولید هستند. اگر بخواهیم چند اسلیو را به یک مستر متصل کنیم؛ میتوانیم با یک مقاومت پول آپ 4.7K اهمی خط SDA و SCL را به VCC متصل کنیم .
چند مستر با چند اسلیو در I2C
همچنین تعداد زیادی مستر میتوانند به یک یا چند اسلیو متصل شوند. مشکلی که در حالت چند مستر به وجود میآید این است که شاید در یک زمان واحد دو مستر قصد داشته باشند از خط SDA برای تبادل داده استفاده کنند. برای حل این مشکل هر مستر باید تشخیص دهد که سطح ولتاژ خط SDA پایین است یا خیر، بنابراین اگر مستری قصد انتقال اطلاعات به اسلیو را داشته باشد، باید پیش از ارسال داده به بررسی خط بپردازد و اگر سطح ولتاژ خط SDA پایین بود به این معنی است که مستری دیگر در حال استفاده از خط میباشد. در نتیجه باید صبر کند اگر ولتاژ خط SDA بالا باشد به این معناست که هیچ مستر دیگری از خط استفاده نمیکند و خط برای تبادل اطلاعات آماده است. در ضمن اگر بخواهیم چند مستر را به چند اسلیو متصل کنیم؛ میتوانیم بر اساس دیاگرام زیر خط SDA و SCL را توسط مقاومت 4.7K Pull up اهمی به VCC متصل کنیم .
مزایا و معایب استفاده از پروتکل I2C
شاید پروتکل I2C نسبت به دیگر پروتکلها پیچیده به نظر برسد اما استفاده از این پروتکل فواید منحصر به فردی دارد که در زیر به آنها اشاره شده :
مزایا
معایب
ــ تنها از دو سیم استفاده میکند.
ــ از مستر و اسلیوهای متعدد پشتیبانی میکند.
ــ بیت ACK /NACK مشخص میکند که هر چارچوب داده به صورت موفقیت آمیز ارسال شده یا خیر.
ــ ساختار سخت افزاری سادهتری نسبت به UART دارد.
ــ پروتکلی شناخته شده است و از آن به کرات استفاده میشود.
ــ سرعت انتقال داده در I2C پایینتر از SPI است.
ــ سایز چارچوب داده به ۸ بیت محدود شده است.
ــ ساختار سختافزاری پیچیدهتری نسبت به SPI دارد.
1 دیدگاه در “پروتکل ارتباطی I2C”
بسیار عالی ❤️❤️❤️