در دنیای سیستمهای دیجیتال و ریزپردازندهها، ارتباط بین اجزای مختلف، یکی از چالشهای مهم و اساسی است. میکروکنترلرها، سنسورها، حافظهها و دیگر واحدهای جانبی نیازمند تبادل داده با یکدیگر هستند و برای این منظور، پروتکلهای ارتباطی گوناگونی توسعه یافتهاند. سه نمونه رایج از این پروتکلها عبارتاند از:
در این میان، I2C که در دهه ۸۰ میلادی توسط شرکت Philips معرفی شد، نوعی ترکیب هوشمند از دو پروتکل قبلی محسوب میشود. این پروتکل نهتنها توانسته است ویژگیهای مثبت SPI و USART را با هم تلفیق کند، بلکه به دلیل سادگی و کارایی بالا، به یکی از پرکاربردترین روشهای ارتباطی در طراحی سیستمهای امبدد تبدیل شده است.
شرکت Philips که امروزه با نام NXP Semiconductors شناخته میشود، در سال ۱۹۸۲ پروتکل I2C را معرفی کرد. هدف اصلی این پروتکل، سادهسازی ارتباط بین آیسیها روی یک برد مدارچاپیPCB) ) بود. در آن زمان، افزایش تعداد تراشهها در سیستمهای دیجیتال باعث شد طراحان با مشکل شلوغی مسیرهای ارتباطی مواجه شوند. I2C با استفاده از تنها دو خط سیگنال، به نامهای SDA (Serial Data Line) و SCL (Serial Clock Line)، راهحلی جمعوجور، اقتصادی و قابلاعتماد برای این مشکل ارائه داد.
در مقایسه با SPI که حداقل به چهار سیم نیاز دارد و USART که نیازمند تنظیم دقیق پارامترهای آسنکرون است، I2C راهی میانبر و منعطف فراهم میکند. به همین دلیل، میتوان آن را بهنوعی ادغام مفهومی از دو پروتکل USART و SPI دانست که در قالبی سادهتر ارائه شده است.
پروتکل I2C یک باس سریال از نوع سنکرون است، یعنی ارسال و دریافت دادهها در آن با کمک یک سیگنال کلاک مشترک انجام میشود. برخلاف پروتکل SPI که تنها اجازه میدهد یک دستگاه بهعنوان Master و بقیه بهعنوان Slave عمل کنند، و همچنین متفاوت از USART که بیشتر برای ارتباط مستقیم بین دو دستگاه به کار میرود، I2C امکان ارتباط چند دستگاه Master با چندین دستگاه Slave را فراهم میکند. این یعنی چند دستگاه میتوانند بهطور همزمان به این باس متصل باشند و داده رد و بدل کنند. جالبتر اینکه خود پروتکل I2C مکانیزمی برای مدیریت اولویتها و جلوگیری از تداخل بین Masterها دارد، بهطوریکه اگر دو Master بخواهند همزمان شروع به ارسال داده کنند، پروتکل بهطور خودکار تشخیص میدهد کدامیک باید ادامه دهد و کدامیک صبر کند.
هر دستگاهی که روی باس I2C قرار دارد، دارای یک آدرس منحصربهفرد است که معمولاً ۷ بیتی (و گاهی ۱۰ بیتی) است. Master برای آغاز ارتباط، آدرس دستگاه موردنظر را روی باس ارسال میکند و تنها دستگاهی که این آدرس را شناسایی کند، پاسخ میدهد. این مکانیزم آدرسدهی، امکان ارتباط با دهها دستگاه مختلف را تنها با دو خط سیگنال فراهم میسازد.
یکی از نکات برجسته I2C، وجود مکانیزم تأیید دریافت یا به اصطلاح ACK/NACK است. پس از ارسال هر بایت، گیرنده با ارسال یک بیت ACK (Acknowledgement) تأیید میکند که داده را دریافت کرده است. در غیر این صورت، با NACK پاسخ میدهد که نشاندهنده خطا یا اتمام تبادل داده است. این مکانیزم به بالارفتن قابلیت اطمینان در تبادل اطلاعات کمک میکند.
برای درک بهتر جایگاه I2C، لازم است نگاهی دقیقتر به تفاوتهای مفهومی آن با دو پروتکل دیگر بیندازیم.
USART که در بسیاری از میکروکنترلرها وجود دارد، میتواند هم بهصورت سنکرون و هم آسنکرون عمل کند. ارتباط آسنکرون در USART نیازی به خط کلاک ندارد و از بیتهای شروع و توقف برای تشخیص بستههای داده استفاده میکند. این نوع ارتباط برای مسافتهای طولانیتر یا ارتباط بین سیستمهای مستقل مناسب است، ولی تنظیم دقیق نرخ تبادل (Baud Rate) بین دو طرف میتواند پیچیده باشد. همچنین USART اغلب برای ارتباط دو دستگاه (نقطهبهنقطه) استفاده میشود، و گسترش آن برای اتصال چند دستگاه نیازمند سختافزار جانبی است.
در سوی دیگر، SPI یک پروتکل کاملاً سنکرون است که با استفاده از چهار سیم (MISO، MOSI، SCLK و SS) ارتباط بسیار سریعی بین Master و Slave فراهم میکند. در SPI، هر دستگاه Slave نیازمند یک خط انتخاب جداگانه (Chip Select) است که این موضوع در طراحیهای پیچیده یا چندسویه، باعث افزایش چشمگیر تعداد سیمها میشود.
I2C با استفاده از فقط دو سیم و قابلیت آدرسدهی داخلی، یک راهحل بهینه برای بسیاری از نیازهای ارتباطی فراهم میکند. گرچه سرعت آن نسبت به SPI کمتر است و تأخیر بیشتری دارد، ولی این ضعف در بسیاری از کاربردهای معمول، بهویژه در ارتباط با سنسورها یا EEPROMها، محسوس نیست. در حقیقت،I2C تعادلی بین سادگی، کارایی، و توسعهپذیری ایجاد کرده است که آن را برای سیستمهای نهفته ایدهآل میسازد.
پروتکل I2C در نسخههای مختلفی ارائه شده که از نظر سرعت انتقال داده با یکدیگر تفاوت دارند. حالتهای متداول عبارتاند از:
هرچند سرعتهای بالا ممکن است وسوسهکننده به نظر برسند، ولی در عمل، بسیاری از تراشهها فقط از حالت استاندارد یا سریع پشتیبانی میکنند. بهعلاوه، افزایش سرعت نیازمند طراحی سختافزاری دقیقتر و مقاومتهای pull-up بهینه روی خطوط باس است.
نکته مهم دیگر در پیادهسازی I2C، استفاده از مقاومتهای pull-up بر روی خطوط SDA و SCL است. این مقاومتها برای ایجاد سطح ولتاژ بالا در زمانی که خطوط آزاد هستند، ضروریاند. معمولاً مقاومتهایی بین ۲.۲ تا ۱۰ کیلو اهم برای این منظور استفاده میشوند.
سادهترین دلیل برای انتخاب I2C، صرفهجویی در تعداد سیمها و پایههای میکروکنترلر است. با تنها دو خط میتوان دهها دستگاه را کنترل کرد که این امر برای طراحی سیستمهای کوچک و قابلحمل، بسیار حیاتی است.
در حوزه کاربرد،I2C تقریباً در تمامی زمینههای سیستمهای تعبیهشده (Embedded) حضور دارد. از ماژولهای سنجش دما، فشار و رطوبت گرفته تا نمایشگرهای LCD، چیپهای حافظه EEPROMو مدارهای ساعت RTC همگی به کمک این پروتکل به میکروکنترلر متصل میشوند. پلتفرمهایی مانند Arduino و Raspberry Pi نیز با کتابخانههای آماده برای استفاده از I2C، یادگیری و پیادهسازی آن را برای مهندسان و دانشجویان ساده کردهاند.
همچنین در صنعت، بسیاری از ماژولها و بردهای توسعه، مانند ماژولهای GPS، مغناطیسسنجها و شتابسنجها، بهصورت پیشفرض با I2C کار میکنند. این گستردگی پشتیبانی باعث شده است که I2C به یک استاندارد غیررسمی در بسیاری از طراحیها تبدیل شود.
پروتکل I2C که توسط Philips طراحی شد، گامی مؤثر در جهت سادهسازی ارتباطات در سیستمهای دیجیتال بود. این پروتکل با ترکیب مزایای SPI و USART، راهکاری فراهم کرده است که در آن سادگی، قابلیت توسعه و مقیاسپذیری در کنار هم قرار گرفتهاند. درحالیکه SPI در سرعت برتر است و USART در مسافت و پایداری،I2C تعادلی طلایی بین این دو فراهم میکند. همین ویژگیها، آن را به انتخاب اول برای بسیاری از پروژههای الکترونیکی و سیستمهای امبدد تبدیل کردهاند.
در نهایت، موفقیت I2C بیش از آنکه به قدرت فنی آن وابسته باشد، مدیون طراحی مینیمالیستی و درعینحال هوشمندانهاش است. این پروتکل، اثباتی است بر این واقعیت که گاهی سادهترین راهحلها، پایدارترین و کاربردیترین هستند.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.