Bazen bir sensörün sürücüsünü kurmadan iletişim kurup kuramadığımızı ya da adresi değişebilen sensörlerde ayarlı adresi görmek isteyebiliriz. Bu yazıda Raspberry Pi ya da Jetson cihazlarınızda I2C arabirimlerine bağlı donanımları taramanın üzerinde duracağız.

Raspberry Pi 2, 3 ve 4'de GPIO headera bağlı iki I2C arabirimi bulunuyor. I2C0, Raspberry Pi HAT'lerinin üretici ve elektronik özelliklerini taşıyan hafızalara erişmek için kullanılıyor, kullanıcıya açık değil. I2C1 ise kullanıcının sensör, ekran sürücü, motor sürücü gibi donanımlarla iletişim kurmasını sağlar.

NVIDIA Jetson'da modeline göre değişen sayıda I2C arabirimi bulunuyor. Bunlardan örneğin biri M.2 slotunun iletişiminde, diğerleri kullanıcının belirlediği işlerde kullanılabiliyor.

I2C Tarama için "I2C Tools" uygulamasını kullanıyoruz. Kurulum için SSH ile cihazınıza bağlanın ve aşağıdaki satırı çalıştırın.

sudo apt-get install -y i2c-tools

Kurulumdan sonra, I2C hattınızdaki cihazları görmek için aşağıdaki komutu kullanabilirsiniz.

sudo i2cdetect -y 1

Son karakter "1", I2C1'in sorgulanacağını belirtir. Cihazınızdaki I2C sayısına göre 0, 1, 2 gibi değerler verebilirsiniz. Raspberry Pi'da I2C0'a ulaşmak için yönetici olmanız gerekebilir. Yukaridaki komutu çalıştırdığınızda bağlantı kurulabilen I2C adreslerini listeleyecek.

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f                             
00:          -- -- -- -- -- -- -- -- -- -- -- -- --                             
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --                             
20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- --                             
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --                             
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --                             
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --                             
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --                             
70: -- -- -- -- -- -- -- --   

I2C Tools ile belirli I2C adresinden 1 ya da 2 byte (word) veri okuyabilirsiniz.

i2cget <bus> <chip> <register>
i2cget -y 1 0x28 0x10 b -> 0x28 cihazının 0x10 adresinden 1 byte okur.
i2cget -y 1 0x28 0x10 w -> 0x28 cihazının 0x10 adresinden 1 word okur.

Benzer şekilde, I2C adresine byte ya da word veri yazabilirsiniz.

i2cset <bus> <chip> <register> <value>
i2cset -y 1 0x28 0x10 0x22 b -> 0x28 cihazının 0x10 adresine 0x22 yazar.
i2cset -y 1 0x28 0x10 0x2222 w -> 0x28 cihazının 0x10 adresine 0x2222 yazar.

I2C Tools yavaş çalışıyorsa, cihazınızın yapılandırma dosyalarından I2C hızını ayarlayabilirsiniz.