I2C یک پروتکل ارتباطی است که ۱۲۸ وسیله را از طریق تنها ۲ خط داده با هم ارتباط میدهد.
در هر لحظه از استفاده از این پروتکل همواره یک ماژول master (ماژول مدیر)و ماژولهای دیگر slave(ماژول فرمانبر یا برده) میتوانند استفاده کنند یعنی ما در لحظه فقط یک مدیر داریم .
قطعه Master ( مدیر ) می تواند از نوع میکروکنترلر ، میکرو پروسسور و حتی کامپیوتر باشد. این قطعه باید قابلیت تولید کلاک پالس ( Clock Pulse ) را داشته باشد.
روش کار به این صورت است که به تمام قطعات Slave یک آدرس اختصاص داده می شود این آدرس به صورت یک کد هگز است و آن قسمت از حافظه برای آن Slave در نظر گرفته میشود برای مثال وقتی 0x44را برای یک slaveدر نظر میگیریم هم در master و در slave این آدرس نوشته میشود و هنگامی که master میخواهداطلاعات به slaveبفرستد یا از آن بگیرد ابتدا آن آدرس را داده(0x44)سپس slaveها این آدرس را با آدرس خود چک میکنند هر slaveکه آدرسش با ادرس ارسالی از طرف slaveیکی بود یک پالس به اسم پالسackارسال میکند و master پس از دریافت این پالس می تواند اطلاعات را به slave فرستاده یا از آن ها درخواست اطلاعات کند.
این انتقال تنها با دو خط انتقال انجام می گیرد. یکی SDA ( خط ارسال داده = Serial Data Line ) و دومی SCL ( خط سریال کلاک = Serial Clock Line ).
قطعات Slave بدون اینکه بر Slave های بعدی تاثیر بگذارند روی گذرگاه قرار می گیرند و زمانی که اطلاعات برای یکی از Slave های خاص فرستاده می شود تابع زیر اجرا خواهد شد :
1 - Starting Condition : قطعه Master کلاک را تولید کرده و مقدار خط SCL = 1 می شود. همچنین سطح ولتاژ SDA از High به LOW توسط Master تغییر وضعیت می دهد و در این صورت هر دو خط مشغول می شوند.
2 - Address Transfer : پس از ارسال سیگنال کلاکCLK آدرس Slave مورد نظر توسط Master به تمام Slave ها ارسال می شود.
3 -Acknowledgement From Slave : در این مرحله هر کدام از Slave ها آدرس را چک کرده و این آدرس برای هر کدام که باشد به سمت Master یک تصدیق ارسال می کند.
4 - Data Transfer : هنگامی که تصدیق از سمت Slave رسید Master یک بایت از دیتا را ارسال می کند. ( حتی ممکن است پشت سر هم چند بایت ارسال شود. )
5 - Stop Condition : وقتی عمل ارسال اطلاعات پایان پذیرفت Master دیتایی به جهت اطلاع رسانی پایان انتقال به سمت Slave می فرستد و عمل ارسال پایان می پذیرد.
نکته پر اهمیت این است که در هنگام انتقال باید توجه کرد که اطلاعات از بین نرود و تصادم بین اطلاعات Master و Slave ایجاد نشود.
نکته پر اهمیت دیگر این است که سیگنال کلاک کاملا سنکرون ( Synchronization ) باشد و به طور هم زمان به Slave ها برسد.
در پست بعدی طریقه اتصال دو آی سی (مثلا atmega8)از طریق I2C buss و همچنین source code را برای علاقه مندان ارسال میکنم