Inter-Integrated Circuit, seri haberleşme türlerinden senkron haberleşmeye bir örnektir. Haberleşme için toprak hattı dışında SDA ve SCL olmak üzere iki hatta ihtiyaç duyulmaktadır. Hat sayısının fazla olması nedeniyle, uzun mesafeli haberleşmelerde tercih edilmez. Genellikle kısa mesafeli ve düşük veri aktarım hızının yeterli olduğu yerlerde kullanılır.
I2C haberleşmesinde, haberleşmeyi kontrol eden master cihazı bulunur. Her haberleşmede bir tane master bulunmalıdır. Haberleşmenin sağlanabilmesi için haberleşme hattına en az bir adet slave cihaz bağlanmalıdır. Hatta bağlanan birden fazla slave cihazlardan hangisinin veri aktaracağına, master cihaz karar verir. Böylece hat sayısında bir değişiklik olmadan birden fazla cihazla haberleşme sağlanır.
Master ve slave cihazların aynı besleme hattına bağlanmasına gerek yoktur. Fakat iletişimin sağlanması için toprak hatlarının aynı olması gerekir. Bunun yanında veri aktarımı için SDA (Serial Data Line) ve SCL (Serial Clock) olmak üzere iki adet haberleşme hattı bulunur. Bu hatlardan SDA, cihazlar arasındaki veri aktarımının sağlandığı hattır. Bu hatta çift yönlü veri aktarımı olur. Hatta aktarılan verilerin senkronizasyonu, SCL hattı tarafından gerçekleştirilir. SCL hattında master cihaz tarafından üretilen saat sinyali bulunur. SDA hattındaki haberleşme, bu sinyale göre düzenlenir.
Haberleşmenin tüm hat boyunca hatasız bir şekilde sağlanabilmesi için SDA ve SCL hatları, pull-up dirençlerle VCC hattına bağlanmalıdır.
I2C haberleşmesinin nasıl çalıştığını şu şekilde özetleyebiliriz:
1. Öncelikle mikrodenetleyici SDA hattından “Start” biti gönderir. Bu durumda tüm slave IC’ler kendilerini alınacak adres bilgisi için hazırlarlar.
2. Mikrodenetleyici, haberleşmek istediği slave IC’nin adresini ve yapılacak işlemin yazma veya okuma olup olmadığını 1 bayt halinde SDA hattından I2C veriyoluna aktarır. Slave IC’ler SDA hattından gelen adres bilgisini alırlar ve bunun kendi adresleri olup olmadığına karar verirler.
3. Masterın gönderdiği adrese sahip IC kendisinin veri yolunda olduğunu ve haberleşmeye hazır olduğunu bildirmek üzere SDA yoluna bir ACK sinyali gönderir. Diğer IC’ler mikrodenetleyiciden gelecek “Stop” bitini beklemeye koyulurlar ki , bu haberleşme tamamlanana kadar müdahalede bulunmasınlar ve bir sonraki haberleşmede kendileri çağrılabilirler.
4. Veri transferi gerçekleşir. İşlem yazma ise master’dan slave’e doğru, okuma ise tersi yönde veri transferi gerçekleşir. Transfer tamamlandıktan sonra Master (yani örneğimizde mikrodenetleyici) Stop bitini SDA hattından aktarır ve haberleşme sona erer.
Ardunio’da I2C: SDA ve SCL pinleri, kullanılan Arduino türüne göre değişiklik göstermektedir. Arduino türlerine göre SDA ve SCL pinleri aşağıdaki tabloda gösterilmiştir.
Arduino türü | SDA Pin | ACL Pin |
UNO | A4 | A5 |
MEGA | 20 | 21 |
LEONARDO | 2 | 3 |
DUO | 20 | 21 |
NEO | A4 | A5 |