I2C یا (IIC (Inter integrated circuits یک نوع گذرگاه رابط است که در بسیاری از مدارهای مجتمع از جمله سنسورها، حافظه ها و rtc ها جهت تبادل داده پیاده سازی شده است. بسیاری این رابط را رابط دو سیمه یا (TWI(Two Wire Interfaceمی نامند.در میکرو کنترلر AVR دو پایه با نامهای SCK و SDA به این گذرگاه اختصاص داده شده است. پایه( SCK(serial clock برای ایجاد پالس جهت همزمانی ارتباط بکار می رود و پایه (SDA(serial data جهت ارسال و دریافت داده بکار می رود. پایه های مذکور از لحاظ الکتریکی کلکتور باز هستند.یعنی برای استفاده از آنها باید با یک مقاومت ۴٫۷ کیلو اهمی به مثبت مدار متصل شوند. اگر چندین دستگاه توسط دو خط مربوط به i2c به یکدیگر متصل شوند هر خط تنها وقتی یک می ماند که هیچکدام از دستگاه های متصل، آن را یک نکرده باشند. هنگامی که خط در حالت بیکاری باشد دو پایه i2c در حالت یک قرار می گیرند. در avr تا ۱۲۰ دستگاه مختلف می توانند از طریق رابط i2c به آن متصل شوند که به هر کدام از این اتصال ها یک گره میگویند. هرکدام از این دستگاه ها می توانند یا فرمانده باشند و یا فرمانبر.دستگاه فرمانده گره ای است گه وظیفه تولید پالس ساعت و آغاز و پایان تبادل داده را بر روی خط به عهده دارد. گره فرمانبر دریافت کننده پالس ساعت است و توسط فرمانده آدرسدهی می شود.هر فرمانبر و فرمانده می توانند در دو حالت دریافت کننده یا ارسال کننده عمل کنند.یعنی چهار حالت پیش می آید که عبارتند از: فرمانده ارسال کننده، فرمانده دریافت کننده، فرمانبر ارسال کننده، فرمانبر دریافت کننده.
ساختار داده در i2c
ساختار بیت
i2c یک پروتکل همزمان است و انتقال هر بیت بر روی خط داده بوسیله یک لبه پایین رونده خط ساعت همزمان می شود.بر اساس قوانین i2c تنها در زمانی می توان سطح منطقی خط داده را تغییر داد که سطح منطقی خط ساعت در حالت صفر باشد. البته حالتهای آغاز و پایان از این قانون مستثنی هستند.
حالت آغاز و حالت پایان
I2C یک پروتکل ارتباط محور است یعنی هر فرایند انتقال داده با یک حالت آغاز شروع شده و با یک حالت پایان خاتمه می یابد. توجه داشته باشید که ایجاد حالت آغاز و پایان تنها توسط گره فرمانده انجام می شود. به دلیل اینکه ارسال داده و ایجاد حالت های آغاز و پایان، همه بر روی خط داده انجام می شوند پس باید مابین آنها تفاوت هایی باشد. حالت های آغاز و پایان تنها در زمان بالا بودن خط ساعت ایجاد می شوند.حالت آغاز زمانی ایجاد می شود که در زمان بالا بودن خط ساعت یک لبه پایین رونده در خط داده ایجاد شود و حالت پایان هنگامی ایجاد می شود که در هنگام بالا بودن خط ساعت یک لبه بالا رونده در خط داده ایجاد شود.
قضیه از این قرار است که هنگامی که فرمانده بخواهد داده ای را به فرمانبر مشخصی ارسال کند ابتدا حالت آغاز را بر روی خط ایجاد میکند و پس از آن آدرس فرمانبر را بر روی خط داده قرار می دهد. در صورتیکه فرمانبر آدرس خود را دریافت کند بیت Ack را بر روی خط داده قرار می دهد. بیت ACK بیتی است که جهت تایید صحت دریافت آدرس و یا داده مابین فرمانده و فرمانبر مبادله می شود و مقدار آن صفر است.در مقابل بیت NACK وجود دارد که عدم صحت دریافت داده یا آدرس و یا عدم آمادگی برای تبادل را به اطلاع طرفین می رساند و مقدار آن یک است.مثلا فرمانده برای ارسال آدرس ۸ پالس ساعت ایجاد می کند و برای اطلاع از تایید دریافت آدرس یک پالس اضافی نیز تولید می کند(یعنی ۹ پالس) در این صورت در پالس نهم اگر فرمانبری آدرس خود را دریافت کرده باشد خط را صفر(acknowledge=ACK) می کند و در غیر این صورت خط در حالت یک(not acknowledge=NACK) می ماند. اگر فرمانده بیت ack را بر روی خط داده ببیند داده هشت بیتی را برای ارسال به فرمانبر با ایجاد ۸پالس ساعت بر روی خط قرار می دهد و برای اطمینان از اینکه فرمانبر داده را دریافت کرده و آماده دریافت داده بعدی هست با ایجاد پالس نهم بیت ACK یا NACK را از فرمانبر در یافت می کند.که اگر ACK دریافت شود به ارسال داده بعدی می پردازد و اگر NACK دریافت شود با ایجاد حالت پایان به ارتباط خاتمه می دهد. پس ساختار بسته داده و آدر س در I2C نه بیتی است که هشت بیت برای داده یا آدرس و یک بیت برای تایید یا عدم تایید دریافت(ACK/NACK) می باشد.
بسته آدرس در I2C که برای آدرس دهی فرمانبر ها استفاده می شود هشت بیتی است که بیت A0 از این ۸ بیت کنترل کننده عملیات خواندن یا نوشتن است. با ۷ بیت باقیمانده می توان تا حد اکثر ۱۲۸ فرمانبر مختلف را آدرس دهی کرد. با توجه به اینکه آدرس ۰۰۰۰۰۰۰ به فراخوانی عمومی اختصاص دارد و نیز آدرس هایی به صورت ۱۱۱XXX در AVR قبلا رزرو شده اند و قابل دسترسی نیستند پس در عمل در مجموع می توان ۱۱۹ فرمانبر مختلف را بر روی یک گذرگاه قرار داد.توجه داشته باشید که در I2C ابتدا بیت پرارزشتر ارسال می گردد. شروع ارتباط همیشه بوسیله دستگاه فرمانده و با ایجاد حالت آغاز بر روی خط انجام می شود. اگر بر روی یک خط چندین فرمانده وجود داشته باشد تنها یک فرمانده می تواند خط را در اختیار بگیرد. اگر دو یا چند فرمانده به طور همزمان حالت آغاز را بر روی خط ایجاد کنند طبق فرایندی به نام داوری(Arbitration) به یکی از فرمانده ها اولویت داده می شود و مابقی فرمانده ها تازمانی که خط اشغال باشد منتظر می مانند. تا زمانی که فرمانده غالب حالت پایان را ایجاد نکند خط اشغال محسوب می شود. اگر فرمانده غالب بخواهد بدون آزاد کردن خط فرمانبر جدیدی را آدرس دهی کند می تواند بدون ایجاد حالت پایان حالت آغاز دوباره ای را ایجاد کند. اگر یک فرمانبر نتواند با سرعتی که فرمانروا پالس ساعت را فراهم می کند اطلاعات را پردازش و آماده کند پس از دریافت و ارسال هر بیت از اطلاعات، فرمانبر می تواند خط scl را صفر کند. در این صورت فرمانروا قادر نخواهد بود که خط scl را یک کند(چون دستگاه ها باهم Wire-and شده اند). بنابراین فرمانروا مطلع می شود که فرمانبر به زمان بیشتری برای پردازش اطلاعات نیاز دارد. به این شیوه بسط دادن زمان یا Clock Stretching گفته می شود.
فهرست مطالب:
تاریخچه
منافع طراح
منافع تولید کننده
خلاصه ای بر I2C و مشخصات کلی آن
مقدمه
بحث های مطرح در حالت چند Master بودن
Arbitration
Synchronization
Bus Hardware
سرعت داده ها بر روی باس
مشخصات کلی
رنج فرکانسی
رنج تغذیه
رنج دمایی
پهنای آدرس سخت افزاری
پکیج های ارائه شده
پروتکل انتقال داده در I2C
انتقال بیت
تعیین اعتبار یک بیت
وضعیت های Start و Stop
تشخیص وضعیتهای Start و Stop
تولید پالس ساعت و مسئله Arbitration
استفاده از همزمان سازی پالس ساعت به عنوان Handshake
آدرس دهی به صورت 7 بیتی
ترکیب های مختلف برای آدرس دهی
General Call Address
بایت Start
تحولات در I2C
توسعه خصوصیات باس
Fast-Mode
Hs-Mode
فرمت ارسال داده های سریال در Hs-Mode
و...
پاورپوینت کامل و جامع با عنوان رابط I2C در میکروکنترلر AVR در 117 اسلاید