اگر با دنیای دیجیتال سروکار داشته باشید، حتما نام I2C را شنیده اید و برایتان سوال پیش آمده که I2C چیست؟
I2C ترکیبی است از دو پروتکل پر استفاده SPI و UART که بهترین ویژگی های این دو پروتکل را در خود ایجاد کرده است.
برای مثال، همچون پروتکل SPI قابلیت کنترل چند Slave توسط یک master را فراهم می کند و
از سیستم چند master و چند slave نیز پشتیبانی می کند.
از این رو، بررسی ویژگی های آن، امری ضروری برای علاقه مندان این حوزه می باشد.
با ما همراه باشید تا به بررسی این پروتکل پرکاربرد بپردازیم.
پروتکل I2C چیست؟
در پاسخ به این سوال که I2C چیست می توان گفت که گذرگاه مدار مجتمع (I2C) یک رابط سریال دو سیمه است که
در آن، با استفاده از یک خط داده سریال (SDA)، یک خط ساعت سریال (SCL) و یک زمین مشترک برای انتقال کلیه ارتباطات، اتصالات به حداقل می رسد.
پروتکل ارتباطی I2C از یک سلسله مراتب master/slave پیروی می کند که
در آن master به عنوان دستگاهی تعریف می شود که کلاک یا ساعت باس را راه اندازی می کند،
به slave ها آدرس می دهد و داده ها را از داخل و خارج از ثبات ها می نویسد یا می خواند.
slave ها دستگاه هایی هستند که فقط در صورت درخواست دستگاه مستر، از طریق آدرس منحصر به فرد خود پاسخ می دهند.
slave ها هرگز انتقال داده را آغاز نمی کنند.
گذرگاه I2C از دو خط دوطرفه استفاده می کند:
- Serial Data Line (SDA)
- Serial Clock Line (SCL)
وقتی انتقالی وجود ندارد، خطوط بلااستفاده در I2C در حالت high قرار می گیرند.
گذرگاه I2C می تواند از چندین دستگاه در هر دو حالت SLAVE و MASTER پشتیبانی کند و
تنها محدودیت، ظرفیت گذرگاه و فضای آدرس است.
منظور از پروتکل انتقال داده در I2C چیست؟
در این بخش می خواهیم انتقال داده در I2C را بررسی کنیم و بدانیم که ساختار پروتکل انتقال در I2C چیست؟
در پروتکل I2C انتقال داده در قالب پیام اتفاق می افتد.
پیام ها به فریم های داده تقسیم می شوند.
اجزای هر پیام عبارتند از یک فریم آدرس و یک یا چند فریم داده.
این پیام همچنین شامل شرایط شروع و توقف، بیت های خواندن/نوشتن و بیت های ACK/NACK بین هر قاب داده است.
بسته های داده I2C در بایت های 8 بیتی انجام می شود.
این بایت ها شامل آدرس slave، شماره رجیستر و داده های منتقل شده می باشند.
این انتقال از طریق باس به معنی یک عمل خواندن یا نوشتن است.
پروتکل های خواندن و نوشتن بر اساس یک سری از پروتکل های فرعی مانند شرایط شروع و توقف، بیت های تکراری شروع، بایت آدرس، بیت های انتقال داده و بیت های تأیید و عدم تأیید ساخته می شوند.
شرط شروع و توقف در پروتکل I2C
بعد از کسب اطلاعات کافی درمورد این که I2C چیست و پروتکل انتقال در آن چگونه است،
باید با پروتکل های فرعی در آن آشنا شویم.
شرط شروع همیشه در شروع انتقال وجود دارد و توسط دستگاه MASTER شروع می شود.
این کار برای بیدار کردن دستگاه های بیکار SLAVE در باس انجام می شود.
برای نشان دادن یک شرط شروع، خط SDA از حالت HIGH به حالت LOW تغییر می کند؛
در حالی که SCL در حالت HIGH است.
وضعیت توقف در پایان انتقال داده، مشابه شرایط شروع رخ می دهد و این بار هم توسط MASTER ایجاد می شود.
این شرط به معنای پایان انتقال است و فرمانی است که
به دستگاه های slave می گوید باید به حالت بیکار برگردند، خط SDA را آزاد کنند و دیگر اطلاعاتی را در گذرگاه ارسال نکنند.
تکرار شروع در پروتکل I2C
شرط شروع می تواند در طول انتقال بدون این که نیازی به خاتمه شرط اول با یک وضعیت Stop باشد، تکرار شود.
این یک مورد خاص است که Repeated Start نامیده می شود و
برای تغییر جهت انتقال داده، تکرار انتقال داده های قبلی، همگام سازی چندین IC یا حتی کنترل حافظه سریال استفاده می شود.
بایت آدرس در پروتکل I2C چیست؟
آدرس slave در قالب بایت 8 بیتی ارسال می شود و بیت آخر مشخص می کند که
در حال خواندن از دستگاه Slave هستیم و یا نوشتن در آن.
در واقع، 7 بیت ابتدایی، آدرس دستگاه slave را تشکیل می دهند؛
در حالی که بیت 8 به عنوان یک بیت دستور READ/WRITE عمل می کند؛
بنابراین 128 آدرس برای آدرس دهی منحصر به فرد به 128 دستگاه slave وجود دارد.
برای مثال در یک ارتباط، به دنبال یک شرط شروع، MASTER یک بایت آدرس ارسال می کند که
مربوط به آدرس منحصر به فرد یک دستگاه SLAVE در گذرگاه است.
دستگاه های موجود در باس، هر کدام آدرس ثابت یا برنامه ریزی شده خود را دارند.
SLAVE های موجود در گذرگاه I2C با گوش دادن به هفت بیت اول بایت ارسال شده، به دستور start پاسخ می دهند.
اگر 7 بیت اول با آدرس دستگاه SLAVE مطابقت داشته باشد،
با خواندن بیت هشتم بایت آدرس ادامه می یابد و
سایر دستگاه های SLAVE باقیمانده این انتقال را نادیده می گیرند.
اگر بیت READ/WRITE در حالت low قرار داشته باشد، مشخص می شود که
MASTER داده هایی را در دستگاه SLAVE آدرس داده شده می نویسد و اگر این بیت در وضعیت High باشد،
MASTER داده های دستگاه SLAVE را می خواند.
هنگامی که بایت آدرس توسط SLAVE مربوطه خوانده شد،
با ارسال یک بیت تأیید با تغییر حالت SDA به Low برای مدت زمان پالس HIGH ساعت مجاور، این انتقال را تأیید می
کند و
سپس بسته به حالت خواندن و یا نوشتن تعیین شده توسط بیت آخر، نقش یک فرستنده یا گیرنده را می گیرد.
از این مرحله به بعد تا زمانی که بیت توقف ارسال نشود، SLAVE فرض می کند که
چون قبلاً آدرس دهی شده است، تمام ارتباطات به سمت آن هدایت می شوند.
بیت تایید و عدم تایید (ACK/NACK) در پروتکل I2C چیست؟
اکنون نوبت به بیت تایید رسیده که بررسی کنیم چه بیتی است و نقش آن در I2C چیست.
به عنوان نوعی بازخورد، پس از انتقال هر بایت، دستگاه دریافت کننده یک بیت با نام Acknowledge یا Not Acknowledge را ارسال می کند.
یک بیت Acknowledge با پایین نگه داشتن خط SDA در طی یک دوره SCL HIGH توسط گیرنده تولید می شود.
در مقابل، یک بیت Not Acknowledge زمانی تولید می شود که
گیرنده خط SDA را در حالت HIGH رها کند و به هیچ درخواستی پاسخ ندهد.
این واقعیت نشان می دهد که در پاسخ به بایت آدرس، تمام SLAVE های نامربوط با عدم پاسخ دادن، یک بیت Not Acknowledge ارسال می کنند.
دریافت ACK نشان می دهد که یک بایت (آدرس یا داده) با موفقیت منتقل و دریافت شده و
انتقال بایت بعدی می تواند شروع شود و یا انتقال می تواند متوقف شده و یا تکرار شود.
به طور کلی گیرنده با فرستادن NACK نشان می دهد که آیا خطایی در جایی از انتقال داده رخ داده است یا خیر.
این بیت برای سیگنال دهی به دستگاه انتقال دهنده استفاده می شود تا
بلافاصله انتقال را خاتمه دهد یا با ارسال یک شروع مجدد تلاش دیگری انجام دهد.
بیت داده در پروتکل I2C چیست؟
بیت های داده، داده های واقعی انتقال را رمزگذاری می کنند و در قالب بایت های 8 بیتی منتقل می شوند.
هیچ محدودیتی در تعداد بایت ها در یک انتقال وجود ندارد؛
اما هر بایت باید توسط Acknowledge که توسط گیرنده داده تولید می شود، تایید شود.
برای فهم بهتر نحوه عملکرد بیت داده، باید بررسی کرد روش انتقال این بیت در I2C چیست.
برای انتقال بیت داده، گیرنده یک بیت داده را روی خط داده می خواند؛
در حالی که SCL در وضعیت بالا است و فرستنده هر بیت داده جدید را دریافت می کند؛ در حالی که SCL در وضعیت پایین است.
مزایا و معایب پروتکل I2C
I2C چیزهای زیادی دارد که ممکن است در مقایسه با پروتکل های دیگر پیچیده به نظر برسد؛
اما ویژگی هایی دارد که ممکن است شما بخواهید از I2C برای اتصال به یک دستگاه خاص استفاده کنید.
از این رو واجب است بررسی کنیم که مزایا و معایب I2C چیست؟
مزایای I2C
- فقط از دو سیم استفاده می کند.
- از چندین master و چندین slave پشتیبانی می کند.
- بیت ACK/NACK تأیید می کند که هر فریم با موفقیت منتقل شده است.
- سخت افزار نسبت به UART پیچیدگی کمتری دارد.
- پروتکل شناخته شده و پرکاربردی است.
معایب I2C
- سرعت انتقال داده کندتر از SPI است.
- اندازه فریم داده به 8 بیت محدود می شود.
- سخت افزار پیچیده تری نسبت به SPI برای اجرا لازم است.
hi!,I really like your writing very so much!
share we communicate extra about your post on AOL?
I need an expert on this house to solve my problem. May be that’s
you! Taking a look forward to look you.
I love what you guys are up too. This kind of clever work and exposure!
Keep up the awesome works guys I’ve you guys to my personal blogroll.