ارتباط دو سيمه (TWI or I2C)
ارتباط سریال دو سیمه یک پروتکل ارتباطی سریال است که توسط شرکت philips ارايه شده است که قابلیت های آن بصورت زیر است:
- یک واسطه ارتباطی بسیار ساده و در عین حال انعطاف پذیر و قدرتمند که تنها به دو خط باس نیاز دارد.
- می تواند بصورت MASTER و SLAVE کار کند.
- وسیله می تواند بصورت فرستنده و یا گیرنده عمل کند..
- با داشتن فضای آدرس 7 بیتی می تواند تا حداکثر 128 وسیله slave را آدرس دهی کند.
- از وجود چند master حمایت می کند.
- حداکثر سرعت آن می تواند تا 400 کیلو هرتز برسد.
- به مدار حذف کننده نویز داخلی که اسپایکهای موجود بر روی خطوط باس را حذف می کند مجهز است.
- امکان تنظیم کامل آدرس slave و و حمایت از فراخوانیهای عمومی را دارد.
- در صورتی که آدرس مربوط به خود را تشخیص دهد می تواند AVR را از حالت sleep بیدار کند.
عموما" واسطه ارتباط دو سیمه برای کار با میکروکنترلرها مناسب است ، پروتکل TWI این امکان را به طراح می دهد تا حداکثر 128 وسیله مختلف را تنها با استفاده از دو خط باس دو طرفه ،یکی برای پالس ساعت (SCL) و دیگری برای داده (SDA) ، به یکدیگر متصل کند.تنها سخت افزار خارجی که برای ایجاد این باس مورد نیاز است یک مقاومت بالاکش (pull up) برای هر یک از خطوط باس است.تمامی وسایل متصل به باس ،آدرس های خاص خود را دارند و نحوه ارتباط بیت آنها نیز توسط پروتکل TWI مشخص می شود.
در تمامی وسایلی که از TWI حمایت می کنند ،درایورهای باس بصورت open-drain یا open collector می باشند. این ویژگی موجب می شود تا آنها بصورت wire-AND عمل کنند، که این برای عملکرد صحیح
باس ضروری است.بنابراین یک سطح پایین در خط باس TWI ،زمانی تولید می شود که خروجی یک یا چند وسیله صفر باشد و سطح بالای آن نیز تنها زمانی که تمام وسایل TWI در حالت امپدانس بالا باشند،حاصل می گردد.
تعداد وسایل مجز برای اتصال به یک باس تنها توسط محدودیت ظرفیت باس که حداکثر باید 400pf باشد و نیز فضای آدرس 7 بیتی slave ،مشخص می گردد.
به ازای هر بیت داده که بر روی باس TWI فرستاده می شود ،یک پالس در خط کلاک آنرا همراهی می کند.
زمانی که خط کلاک بالاست ،سطح خط داده باید ثابت باقی بماند .تنها استثنای این قانون در تولید حالتهای شروع و توقف است.
آغاز و توقف ارسال داده توسط Master صورت می گیرد ، زمانی که Master ، حالت شروع را روی باس ایجاد می کند ،ارسال آغاز می شود و زمانی که حالت توقف را ایجاد می کند ، ارسال پایان می پذیرد.در بین حالتهای شروع و توقف ، باس مشغول ، در نظر گرفته می شود و Master دیگری نباید سعی در کنترل باس نماید.یک حالت خاص زمانی رخ می دهد که در بین یک حالت شروع و توقف ،حالت شروع جدیدی ایجاد شود.
به این حالت ، حالت شروع مکرر (Repeated start) گفته می شود و زمانی اتفاق می افتد که Master بخواهد بدون از دست دادن کنترل باس ،ارسال جدیدی آغاز کند.بعد از یک شروع مکرر، باس تا حالت رسیدن حالت توقف بعدی ،مشغول در نظر گرفته می شود.
همانطور که در شکل زیر نشان داده شده است ،حالتهای شروع و توقف با تغییر سطح خط SDA در زمانی که خط SCL بالاست ،انجام میشود.
تمامی بسته های آدرس فرستاده شده بر روی باس TWI ، نه (9) بیت طول دارند که از هفت بیت آدرس ،یک بیت کنترل خواندن/نوشتن و یک بیت تصدیق (Acknowledge) تشکیل شده اند.
اگر بیت خواندن/نوشتن یک شود،پس از آن عمل خواندن انجام میشود و در غیر اینصورت عمل نوشتن انجام میگیرد.زمانی که Slave تشخیص دهد که آدرس روی باس به آن تعلق دارد ، باید در سیکل نهم SCK ،با زمین کردن SDA با آن پاسخ دهد.اگر Slave آدرس دهی شده مشغول باشد و یا به هر دلیلی نتواند به درخواست Master پاسخ دهد،خط SDA باید در سیکل کلاک ACK بالا باقی بماند. پس از آن Master می تواند یک حالت توقف ، یا یک حالت شروع مکرر را برای آغاز یک ارسال مجدد بفرستد.
یک بسته آدرس که شامل یک آدرس Slave و یک بیت خواندن و نوشتن باشد ، به ترتیب به صورت SLA+R و SLA+W نشان داده می شود.در ارسال آدرس Slave ابتدا بیت MSB ارسال می گردد. آدرسهای Slave می توانند هر یک از مقادیر 1 تا 127 را به خود بگیرند ولی از آدرس صفر برای فراخوانی عمومی استفاده می گردد. زمانی که یک فراخوانی عمومی انجام می شود،باید تمامی Slave ها در سیکل ACK با زمین کردن خط SDA به آن پاسخ دهند. هنگامی که Master بخواهد تا یک پیغام را برای تمامی Slave های موجود ارسال کند، از یک فراخوانی عمومی استفاده می کند.در صورتی که یک آدرس فراخوانی عمومی و به دنبال آن یک بیت نوشتن ارسال گردد، تمامی Slave هایی که می توانند به فراخوانی پاسخ دهند ، در سیکل ACK خط SDA را زمین می کنند.در این صورت بسته های داده بعدی توسط تمامی Slave هایی که به فراخوانی عمومی پاسخ داده اند ، دریافت می گردد.باید توجه شود که ارسال آدرس فراخوانی عمومی و به دنبال آن ، یک بیت خواندن ، بدون معناست. چرا که در اینصورت چندین Slave داده های مختلفی را بر روی باس قرار می دهند که باعث مختل شدن باس میشود. تمام بیت های داده که بر روی باس TWI ارسال می شوند 9 بیتی هستند که شامل یک بایت داده و یک بیت تصدیق (Acknowledge) می باشند.
اگر دریافت کننده دریافت را بدرستی انجام ندهد ، خط SDA را در حالت بالا رها میکند (NACK). زمانی که دریافت کننده آخرین بایت را دریافت کند یا به هر دلیلی نتواند بایت دیگری را دریافت کند ، باید با ارسال یک NACK بعد از آخرین بایت با خبر کند.
اصولا" یک ارسال ، از یک حالت شروع ، یک SLA+R/W و یک یا چند بسته داده تشکیل شده است. یک پیغام تهی که از یک حالت شروع و به دنبال آن یک حالت توقف تشکیل شده باشد غیر قانونی است.