GebraBit

I2C

متن سربرگ خود را وارد کنید

I2C

بررسی

 امروزه حتی ساده ترین  PCB علاوه بر میکروکنترلر اصلی  شامل دو یا چند مدار مجتمع دیجیتالی (IC)، است که برای کارهای خاصی انتخاب شده اند. ADC و DAC، حافظه‌های EEPROM، سنسورها، پورت‌های I/O ، کلاک‌های RTC، مدارهای RF و کنترل‌کننده‌های LCD ا، فقط فهرست کوچکی از آی‌سی‌های ممکن برای انجام یک کار مشخص هستند. طراحی مدرن الکترونیک دیجیتال در مورد انتخاب (و برنامه نویسی) صحیح آی سی های قدرتمند، خاص و در بیشتر مواقع ارزان برای استفادهروی PCB نهایی است.

بر اساس ویژگی‌ این آی‌سی‌ها، اغلب برای تبادل پیام‌ و داده‌ با یک دستگاه قابل برنامه‌ریزی (که معمولاً یک میکروکنترلر است، اما نه فقط آن) طبق یک پروتکل ارتباطی تعریف شده طراحی می‌شوند. دو مورد از پرکاربردترین پروتکل‌ها برای ارتباطات درون‌بردی I²C و SPI می باشد که هر دو به اوایل دهه 80 بازمی‌گردند، اما هنوز در صنعت الکترونیک رایج هستند، به‌خصوص زمانی که سرعت ارتباط اهمیت زیادی ندارد و ارتباطات محدود به مرزهای PCB است.

تقریباً همه میکروکنترلرهای STM32 سخت افزارهای جانبی خاصی را ارائه می دهند که می توانند با استفاده از پروتکل های I²C و SPI ارتباط برقرار کنند.در این فصل به طور خلاصه پروتکل I²C و APIهای CubeHAL مربوط به برنامه ریزی این ابزار جانبی را معرفی می کنیم. اگر علاقه مند به مطالعه عمیق تر پروتکل I²C هستید،فایل UM10204 توسط NXP² اطلاعات کامل و به روزتری را ارائه می دهد.

Introduction to the I²C specification

مدار Inter-Integrated Circuit  (معروف به I²C – تلفظ I-squared-C یا به ندرت I-two-C) یک مشخصه سخت افزاری و پروتکلی است که توسط بخش نیمه هادی فیلیپس (در حال حاضر NXP Semiconductors³) در سال 1982 توسعه یافته است.این پروتکل – multi-slave ، half-duplex ، مشخصه گذرگاه سریال 8 بیتی single-ended و تنها از دو سیم برای اتصال تعداد معینی از دستگاه های slave به یک Master استفاده می کند. تا اکتبر 2006، توسعه دستگاه‌های مبتنی بر I²C منوط به پرداخت حق امتیاز به فیلیپس بود، اما این محدودیت در حال حاضر حذف شده است.

دو سیمی که گذرگاه I²C را تشکیل می دهند، خطوط open-drain دو طرفه هستند که به ترتیب خط داده سریال Serial Data Line (SDA) و خط کلاک سریال Clock Line (SCL) نامیده می شوند (شکل 1 را ببینید). پروتکل I²C مشخص می کند که این دو خط باید با مقاومت pull up شوند. اندازه این مقاومت ها به طور مستقیم با ظرفیت خازنی و سرعت انتقال ارتباط دارد. استفاده از مقاومت هایی با مقدار نزدیک به 4.7KΩ بسیار رایج است.

میکروکنترلرهای مدرن، مانند میکروکنترلرهای STM32، اجازه می‌دهند تا خطوط GPIO را به‌عنوان pull-up open-drain پیکربندی کنیم و مقاومت‌های pull-up داخلی را فعال کنیم. با جست و جو در وب متوجه می شوید که استفاده از مقاومت‌های pull-up داخلی برای خطوط I²C بسیار رایج است. با این حال، در تمام میکروکنترلرهای STM32، مقاومت‌های pull-up داخلی مقداری نزدیک به 20KΩ دارند تا از نشت ناخواسته ولتاژ جلوگیری شود. چنین مقداری زمان مورد نیاز باس برای رسیدن به حالت HIGH را افزایش و سرعت انتقال را کاهش می دهد. اگر سرعت در برنامه شما مهم نیست و اگر (بسیار مهم) از مسیرهای طولانی بین MCU و آی سی (کمتر از 2 سانتی متر) استفاده نمی کنید، استفاده از مقاومت های pull-up داخلی برای بسیاری از برنامه ها اشکالی ندارد. اما، اگر فضای کافی روی PCB برای قرار دادن چند مقاومت دارید، اکیداً پیشنهاد می شود از مقاومت های خارجی و اختصاصی استفاده کنید.

میکروکنترلرهای STM32F1 توانایی pull-up خطوط SDA و SCL را ندارند. GPIO آنها باید به صورت open-drain پیکربندی شوند، و دو مقاومت خارجی برای pull-up خطوط I²C مورد نیاز است.

برای پروتکلی که فقط با دو سیم کار میکند، باید راهی برای آدرس دهی به یک دستگاه slave منحصربه فرد در همان باس وجود داشته باشد. به همین دلیل ، هر دستگاه slave یک slave address منحصر به فرد در buS مربوطه ارائه می دهد. این آدرس ممکن است 7 یا 10 بیتی باشد (10 بیتی عادی نیست).

حتی اگر تراشه‌هایی باشند که بتوانند با سرعت‌های سفارشی (و اغلب مبهم) کار  کنند سرعت گذرگاه I²C به خوبی توسط مشخصات پروتکل تعریف شده است. سرعت های رایج باس I²C  کیلوهرتز 100 ( حالت استاندارد standard mode ) و 400 کیلوهرتز ( حالت سریع fast mode ) هستند.در ویرایش‌های اخیر استاندارد ،پروتکل I²C می‌تواند با سرعت‌های بالاتری اجرا شود (1 مگاهرتز، معروف به حالت fast mode plus ، و 3.4 مگاهرتز، معروف به حالت high speed mode ، و 5 مگاهرتز، معروف به حالت ultra fast mode).

رابط I²C یک پروتکل ساده است به طوری که اگر میکروکنترلر آن را نداشته باشد می توان یک واحد جانبی اختصاصی I²C را «شبیه سازی» کرد، این تکنیک bit-banging نامیده می شود و معمولاً در معماری های 8 بیتی ارزان که رابط I²C اختصاصی را برای کاهش تعداد پین و/یا هزینه IC ارائه نمی کنند ، استفاده می شود.

The I²C Protocol

 در پروتکل I²C همه تراکنش ها همیشه توسط Master شروع و تکمیل می شوند. این یکی از معدود قوانین پروتکل ارتباطی I²C است که باید هنگام برنامه‌نویسی ( مخصوصاً اشکال‌زدایی debugging) دستگاه‌های I²C به خاطر داشت. همه پیام‌های مبادله شده از طریق گذرگاه I²C به دو نوع فریم تقسیم می‌شوند: یک فریم آدرس address frame ، که در آن master نشان می‌دهد که پیام به کدام slave ارسال می‌شود، و یک یا چند فریم داده data frames ، که پیام‌های داده ی 8 بیتی هستند که از master به slave یا برعکس ارسال می‌شوند. داده ها پس از low شدن SCL روی خط SDA قرار می گیرند و پس از high شدن خط SCL نمونه برداری می شوند. زمان بین لبه‌های کلاک و خواندن/نوشتن داده‌ها، توسط دستگاه‌های روی گذرگاه تعریف می‌شود و از تراشه به تراشه دیگر متفاوت است.

همانطور که قبلاً گفته شد، هم SDA و هم SCL خطوط دو طرفه هستند که از طریق یک منبع جریان یا مقاومت های pull-up به مثبت ولتاژ تغذیه متصل می شوند (شکل 1 را ببینید). وقتی گذرگاه آزاد است، هر دو خط HIGH هستند. بخش های خروجی دستگاه های متصل به باس باید open-drain یا open-collector برای انجام عمل wired-AND باشد. ظرفیت خازنی باس تعداد رابط های متصل به باس را محدود می کند. در کاربردهایی که فقط یک master وجود دارد، اگر دستگاهی که کلاک را کش دهد در باس وجود نداشته باشد خروجی SCL Master می تواند یک درایور push-pull باشد (در ادامه در مورد این موضوع بیشتر توضیح خواهیم داد).

اکنون ما قصد داریم مراحل اساسی ارتباط I²C را تجزیه و تحلیل کنیم.

START and STOP Condition

 همه تراکنش ها با یک START شروع و با یک STOP خاتمه می یابند (شکل 2 را ببینید). یک انتقال HIGH به LOW در خط SDA در حالی که SCL HIGH است یک شرایط START را تعریف می کند. انتقال LOW به HIGH در خط SDA در حالی که SCL  HIGH است یک شرایط STOP را تعریف می کند.

شرایط START و STOP همیشه توسط Master ایجاد می شود. گذرگاه پس از شرط START مشغول در نظر گرفته می شود. گذرگاه در زمان مشخصی پس از شرط STOP دوباره آزاد در نظر گرفته می شود. اگر یک START تکراری (که شرط RESTART نیز نامیده می شود) به جای شرط STOP ایجاد شود، گذرگاه مشغول می ماند (به زودی در این مورد بیشتر توضیح خواهیم داد). در مورد شرایط START و RESTART  ،از نظر عملکردی یکسان هستند.

Byte Format

هر داده ای که در خط SDA ارسال می شود باید هشت بیت طول داشته باشد و این موضوع شامل فریم آدرس address frame نیز می شود که مدتی دیگر خواهیم دید. تعداد بایت های قابل انتقال نامحدود است. هر بایت باید توسط یک بیت تصدیق Acknowledge (ACK) دنبال شود. داده ها ابتدا با مهم ترین بیت Most Significant Bit (MSB) منتقل می شوند (شکل 2 را ببینید). اگر Slave به دلیل انجام تسک دیگری ، به عنوان مثال سرویس دهی به یک وقفه داخلی ، نتواند بایت کامل داده را دریافت یا ارسال کند، می‌تواند با LOW نگه داشتن خط کلاک SCL  ، Master را در حالت انتظار قرار دهد. زمانی که Slave برای بایت دیگری از داده آماده شد ، خط کلاک  SCL را آزاد می کند و انتقال داده ادامه می یابد.

این مقاله را با دوستانتان به اشتراک بگذارید!

Be the first to write a review

لطفا با ارسال دیدگاه و امتیاز دهی تیم جبرا را در بهبود کیفیت همیاری کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Shopping cart
Start typing to see posts you are looking for.

Sign in

No account yet?