پروتکل I2C چیست؟ مبانی پروتکل ارتباط سریال I2C
اگر با دنیای دیجیتال سروکار داشته باشید، حتما نام I2C را شنیده اید و برایتان سوال پیش آمده که I2C چیست؟
I2C ترکیبی است از دو پروتکل پر استفاده SPI و UART که بهترین ویژگی های این دو پروتکل را در خود ایجاد کرده است.
برای مثال، همچون پروتکل SPI قابلیت کنترل چند Slave توسط یک master را فراهم می کند و
از سیستم چند master و چند slave نیز پشتیبانی می کند.
از این رو، بررسی ویژگی های آن، امری ضروری برای علاقه مندان این حوزه می باشد.
با ما همراه باشید تا به بررسی این پروتکل پرکاربرد بپردازیم.
در پاسخ به این سوال که 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 یک پروتکل ارتباطی سریال است ، بنابراین داده ها نوبتی در امتداد یک سیم (خط SDA) منتقل می شوند.
مانند SPI ، ارتباط I2C نیز همگام است ، بنابراین خروجی بیت ها با نمونه برداری از بیت ها توسط یک سیگنال ساعت مشترک بین Master و Slave هماهنگ می شوند. سیگنال ساعت همیشه توسط Master کنترل می شود.
در برد موبایل از پروتکل I2C برای ارتباط بسیاری از آی سی ها و قطعات با یکدیگر استفاده می شود.مثلا برای ارتباط IC CODEC با CPU، ارتباط دوربین با CPU ,… استفاده می شود.
منظور از پروتکل انتقال داده در I2C چیست؟
در این بخش می خواهیم انتقال داده در I2C را بررسی کنیم و بدانیم که ساختار پروتکل انتقال در I2C چیست؟
با آموزشگاه تعمیر موبایل شیراز ،اموزشگاه تعمیر موبایل شیراز طیف همراه باشید.
در پروتکل I2C انتقال داده در قالب پیام اتفاق می افتد.
پیام ها به فریم های داده تقسیم می شوند.
اجزای هر پیام عبارتند از یک فریم آدرس و یک یا چند فریم داده.
این پیام همچنین شامل شرایط شروع و توقف، بیت های خواندن/نوشتن و بیت های ACK/NACK بین هر قاب داده است.
بسته های داده I2C در بایت های 8 بیتی انجام می شود.
این بایت ها شامل آدرس slave، شماره رجیستر و داده های منتقل شده می باشند.
این انتقال از طریق باس به معنی یک عمل خواندن یا نوشتن است.
پروتکل های خواندن و نوشتن بر اساس یک سری از پروتکل های فرعی مانند شرایط شروع و توقف، بیت های تکراری شروع، بایت آدرس، بیت های انتقال داده و بیت های تأیید و عدم تأیید ساخته می شوند.
برای تعمیر موبایل و طراحی برد های الکترونیکی آشنایی با این پروتکل و مسیر های آن و نحوه عملکرد I2C الزامی است.
در ادامه به بررسی نحوه عملکرد این پروتکل ارتباطی میپردازیم.
پروتکل I2C چگونه کار می کند؟
با استفاده از I2C ، داده ها در پیام ها منتقل می شوند. پیام ها به فریم های داده تقسیم می شوند. هر پیام دارای یک فریم آدرس است که شامل آدرس باینری Slave و یک یا چند فریم داده است که حاوی داده های منتقل شده است. این پیام همچنین شامل شرایط شروع و توقف ، بیت های خواندن / نوشتن و بیت های ACK / NACK بین هر قاب داده است:
- شرایط شروع: خط SDA از سطح ولتاژ بالا به سطح ولتاژ پایین تغییر می کند قبل از اینکه خط SCL از بالا به پایین تغییر کند.
- شرایط توقف: خط SDA پس از اینکه خط SCL از کم به زیاد تغییر می کند از سطح ولتاژ پایین به سطح ولتاژ بالا تبدیل می شود.
- فریم آدرس: توالی 7 یا 10 بیتی منحصر به فرد برای هر Slave که وقتی که Master می خواهد با آن صحبت کند ، Slave را مشخص می کند.
- بیت خواندن / نوشتن: یک بیت واحد که مشخص می کند Master داده را به Slave ارسال می کند (سطح ولتاژ پایین) یا از آن داده می خواهد (سطح ولتاژ بالا).
- بیت ACK / NACK: هر فریم در پیام با یک بیت تأیید / عدم تأیید دنبال می شود. اگر یک فریم آدرس یا یک فریم داده با موفقیت دریافت شود ، یک بیت ACK از دستگاه گیرنده به فرستنده بازگردانده می شود. در صورت عدم تایید، بیت NACK فرستاده میشود.
آدرس دهی در پروتکل I2C
I2C خطوط انتخاب Slave (مانند خط SS در SPI) را ندارد ، بنابراین به راه دیگری نیاز دارد تا Slave بداند داده ها برای Slave مورد نظر ارسال می شود و نه Slave دیگری. این کار را با آدرس دهی انجام می دهد. فریم آدرس همیشه بعد از بیت شروع قرار دارد.
Master آدرس Slave را که می خواهد با آن ارتباط برقرار کند برای هر Slave ای که با آن ارتباط دارد ارسال می کند. سپس هر Slave آدرس ارسالی از Master را با آدرس خود مقایسه می کند. اگر آدرس مطابقت داشته باشد ، یک بیت ولتاژ پایین ACK را به Master ارسال می کند. اگر آدرس مطابقت نداشته باشد ، Slave کاری انجام نمی دهد و خط SDA همچنان بالا میماند.
بیت خواندن/نوشتن در پروتکل I2C
فریم آدرس شامل یک بیت واحد در انتها است که به Slave اطلاع می دهد آیا Master می خواهد برای آن داده بنویسد یا از آن داده بگیرد. اگر Master بخواهد داده ها را به Slave ارسال کند ، بیت خواندن / نوشتن یک سطح ولتاژ پایین است. اگر Master درخواست داده از Slave را دارد ، بیت یک سطح ولتاژ بالا است.
فریم داده ها در پروتکل I2C
بعد از اینکه Master بیت ACK را از Slave تشخیص داد ، اولین فریم داده آماده ارسال میشود.
فریم داده همیشه 8 بیت است و ابتدا با مهمترین بیت ارسال می شود. هر فریم داده بلافاصله با یک بیت ACK / NACK دنبال می شود تا بررسی شود که فریم با موفقیت دریافت شده است یا خیر. قبل از ارسال فریم داده بعدی ، بیت ACK باید توسط Master یا Slave دریافت شود (بسته به اینکه چه کسی داده ها را ارسال می کند).
مراحل انتقال داده در پروتکل I2C
1. Master قبل از تغییر خط SCL از بالا به پایین ، با شروع تغییر خط SDA از سطح ولتاژ بالا به سطح ولتاژ پایین ، شرایط شروع را برای هر Slave متصل ارسال می کند:
2. Master به هر Slave آدرس 7 یا 10 بیتی Slave را که می خواهد با آن ارتباط برقرار کند ، همراه با بیت خواندن / نوشتن ارسال می کند:
3- هر Slave آدرس ارسالی از Master را با آدرس خود مقایسه می کند. اگر آدرس مطابقت داشته باشد ، Slave با پایین آوردن خط SDA برای یک بیت ، ACK را برمی گرداند. اگر آدرس ارسالی با آدرس خود Slave مطابقت نداشته باشد ، Slave خط SDA را بالا میبرد.
4. Master فریم داده را ارسال یا دریافت می کند:
5. پس از انتقال هر فریم داده ، دستگاه گیرنده بیت ACK دیگری را به فرستنده بازمی گرداند تا دریافت موفقیت آمیز فریم را تأیید کند:
6. برای متوقف کردن انتقال داده ، Master با تغییر دادن SCL بالا قبل از تغییر SDA بالا، یک حالت توقف برای Slave ارسال می کند:
از آنجا که I2C از آدرس دهی استفاده می کند ، Slave های متعدد را می توان از یک Master کنترل کرد. با یک آدرس 7 بیتی ، 128 آدرس منحصر به فرد در دسترس هستند. یعنی میتوان بیشتر از 100 Slave را به یک Master متصل کرد. برای اتصال چندین Slave به یک Master واحد ، آنها را به این صورت سیم کشی کنید. با مقاومت های پول آپ 4.7K اهم خطوط SDA و SCL را به Vcc متصل کنید.
اتصال یک Master به چند Slave در پروتکل I2C
چندین Master می توانند به یک Slave یا چند Slave متصل شوند. اما مشکل چندین Master در یک سیستم زمانی ایجاد می شود که دو Master سعی می کنند همزمان داده را از طریق خط SDA ارسال یا دریافت کنند. برای حل این مشکل ، هر Master باید قبل از ارسال پیام تشخیص دهد که آیا خط SDA کم است یا زیاد. اگر خط SDA کم باشد ، این بدان معناست که Master دیگری کنترل مسیر را دارد و Master باید منتظر ارسال پیام باشد.
اگر خط SDA زیاد باشد ، انتقال پیام ایمن است. برای اتصال چندین Master به چندین Slave ، از مدار زیر با مقاومت های پول آپ 4.7K اهم استفاده کنید که خطوط SDA و SCL را به Vcc متصل می کند:
مزایا و معایب پروتکل I2C
I2C چیزهای زیادی دارد که ممکن است در مقایسه با پروتکل های دیگر پیچیده به نظر برسد ، اما دلایل خوبی وجود دارد که باعث شود شما از I2C برای اتصال به یک دستگاه خاص استفاده کنید:
مزایا ارتباط I2C:
فقط از دو سیم استفاده می کند.
پشتیبانی از چندین Master و چندین Slave
بیت ACK / NACK تأیید می کند که هر فریم با موفقیت منتقل می شود.
سخت افزار نسبت به UART پیچیدگی کمتری دارد.
معایب ارتباط سریال I2C:
سرعت انتقال اطلاعات کندتر از SPI است
اندازه فریم داده به 8 بیت محدود می شود
سخت افزار پیچیده تری نسبت به SPI برای اجرا نیاز است.
بعد از خواندن این مقاله پیشنهاد میکنم مقاله ارتباط UART و ارتباط SPI را نیز بخوانید.
از این نکات می توان فهمید که I2C به ویژه هنگامی که شبکه ارتباطی پیچیده ، متنوع یا گسترده ای داشته باشید ، مناسب است. از ارتباط UART معمولاً برای اتصالات نقطه به نقطه استفاده می شود زیرا روش استانداردی برای آدرس دهی دستگاه های مختلف یا اشتراک پین وجود ندارد. SPI زمانی عالی است که شما یک Master و چند Slave داشته باشید ، اما هر کاربر به یک سیگنال جداگانه “SS” احتیاج دارد ، که منجر به استفاده از پین های زیادی میشود. همچنین ارتباط SPI از چند Master پشتیبانی نمیکند.
پروتکل I2C درنقشه های موبایل
در شماتیک گوشی در مسیر های I2C مقامت های PULL UP I2C را مشاهده میکیند.
همانطور که مشاهده میکنید ولتاژ VCC این مقوامت ها 1.8 ولت است و ر مسیر SCL , SDA قرار دارد.
کلام آخر
در دوره های آموزش تعمیرات موبایل شیراز طیف که در آموزشگاه تعمیرات موبایل شیراز طیف برگزار می گردد مسیر ها و عیب یابی مسیر های بین آی سی ها مثل SPI I2C , UART را به صورت کامل آموزش میدهیم برای شرکت در دوره های آموزشگاه تعمیرات موبایل شیرازطیف با ما از طریق :
پیج اینستا
@teifmobile
یا شماره 09176000411 با ما در تماس باشید.
آموزشگاه تعمیر موبایل طیف شیراز بعنوان اولین و مجهزترین آموزشگاه فوق تخصصی تعمیر موبایل در جنوب ایران تمامی دوره های مقدماتی تا پیشرفته تعمیر موبایل را برگزار می کند.