I2C (Inter-Integrated Circuit) protokolü, mikrodenetleyiciler ve diğer entegre devreler arasında veri iletimi için kullanılan yaygın bir iletişim protokolüdür. Düşük hızlı veri iletimi gerektiren uygulamalarda, özellikle sensörler, bellek modülleri ve diğer çevresel birimlerle iletişimde tercih edilmektedir. Gemstone geliştirme kartında 40 pin header pinlerinde 1 adet I2C (I2C1) çıkışı bulunmaktadır. Harici olarak kullanılmak istenen I2C cihazları bu pinler aracılığıyla bağlanılabilir. Ayrıca Gemstone üzerinde i2c ile haberleşen ICM-20948 9 eksen MEMS sensörü ve HDC2010 sıcaklık ve nem sensörü bulunmaktadır.

I2C Kullanımı

Gemstone işletim sistemine bağlandıktan sonra I2C adreslerine veri yazabilmek ve veri okuyabilmek için i2c-tools paketinin kurulumunu yapınız.
sudo apt install i2c-tools
Bulunan I2C hatlarını görüntülemek için ls /dev/i2c-* komutunu çalıştırınız. i2c-2 hattına bağlı olan cihazların bağlı olduğu adresleri görüntülemek için aşağıdaki komutu çalıştırınız.
gemstone@t3-gem-o1:~$ sudo i2cdetect -y -r 2
#      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
# 00:                         -- -- -- -- -- -- -- -- 
# 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
# 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
# 30: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
# 40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
# 50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
# 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
# 70: -- -- -- -- -- -- -- -- 
Yukarıdaki komut çıktısında görünen UU o adreste bir I2C cihazının bulunduğunu ve bu cihazın sistem tarafından kullanıldığını gösterir. 40 ise o adreste bir cihazın bulunduğunu ifade eder. Örneğin 0x30 adresi için okuma ve yazma işlemi yapılamazken 0x40 adresi için bu işlemler yapılabilmektedir.
i2c-2 hattının 0x40 adresine bağlı olan cihazın 0x00 adresinden veri okuyabilmek için aşağıdaki komutu çalıştırınız.
sudo i2cget -y 2 0x40 0x00
i2c-2 hattının 0x40 adresine bağlı olan cihazın 0x07 adresine 0x80 verisi yazabilmek için aşağıdaki komutu çalıştırınız.
sudo i2cset -y 2 0x40 0x07 0x80
Verilen örnekteki I2C adresleri (0x40, 0x00 ve 0x07 gibi) örnekleme amacıyla kullanılmıştır. Yapacağınız uygulamalarda I2C cihazlarının adresleri farklılık gösterebilir. Kullanılan cihazların dökümanlarına başvurarak doğru adreslerin belirlenmesi önemlidir.