Eeprom

Başlatan Serk@n, 08 Şubat 2021, 08:51:09

ete

Anladığım kadarı ile Cihaz kontrol adresi yada numarası ile Eprom dahili adresleri bir birine karıştırıyorsunuz.
Her bir I2C ile çalışan cihaz yada aletin bir alet numarası mevcuttur. Buna Kontrol adresi de deniyor. Öncelikle bu cihaza ulaşmak için cihazın adresini vermeniz gerekiyor. Cihaz hafızalarına yada registerlerine ulaşınca artık cihazın dahili adreslerini kullanarak hangi adresteki bilgiyi okumak yada hangi adrese bilgi yazmak istiyorsanız ona ait dahili adresi vermeniz gerekir ki bu adres epromlarda hafıza büyüklüğüne bağlı olarak 10-16 bit olabiliyor.
Cihaz adresi yada kontrol adresi benim bildiğim hep 8 bit dir. Ancak genelde 7 bit ile ifade edilir. Çünki Okuma işleminde cihaz adresine 1 eklenir yani bit0=1 olur. Yazma işleminde ise Bit0=0 olur.
Genelde derleyiciler bu işi otomatik halleder. Ancak bu cihaz adresi her zaman kullanıcıların (bende dahil) başına dert olur. 7 bitlik bilgi verilir bunu 8 bite çevirmeniz gerekir. eklenen biti sol tarafa eklerseniz sayı bozulur sağa eklerseniz doğru olur. Her neyse dikkat edilmesi gereken bir husu dur bu cihaz adresi. %1111000 şeklinde verdiğiniz bilgi cihaz adresine benziyor. Zira okuma da bu bilgi %11110001 oluyor ise kesinlikle cihaz adresidir.
Ete

Serk@n

Hocam cihaz adresinin 10 bit olduğunu o kadar ciddiye almışım ki dediğiniz hususu denemek dahi aklıma gelmemişti. Halbuki haber kaynağım alelade bir internet sitesi idi. Çok teşekkür ederim. Umarım adres sadece 0x78'dir ve yarın bir sonuca varırım.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Serk@n

Epromun adresinin 10 bit olduğundan şüphem kalmadı. 0x78 ve ardından 0x00 yazarak epromla iletişim kurdum. Data adresi olarak 8+8, yani 16 bit bir değer yazarak epromdan okuma yapabiliyorum.

Takıldığım hususlar şunlar:
--- Verileri okurken ilk data adresinini 0x01 ve 0x00 olarak yazdığımda sonuç alabiliyorum. Yani 0x00 ve 0x00 adresinden hiçbir dönüş yapmıyor.
--- Verilerin tamamını 0xFF olarak okudum.
--- Yazma işleminde ACK alıyorum. Yazma işlemini başarılı olarak gerçekleştirmişim gibi. Fakat epromun adresinden okuma yaptığımda yazmanın yapılmamış olduğunu görüyorum. Yeni ne 0xFF dönüyor.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

ete

Bir eprom ile doğru biçimde haberleşebiliyor isen o eproma hem yazıp hemde okuyabilmelisin.
Mesajından anladığımkadarı ile yazdığını geriye okuyamıyorsun. Bu haberleşme yapamadığın anlamına geliyor aynı zamanda. Biliyorsun hem data hattında hemde clk hattında pullup mevcut. Özellikle data hattındaki pullup direnci okuduğun bilgilerin hep $FF olmasını sağlamaktadır. Muhtemelen ACK alacak kadar bir irtibat kuruyorsun ancak adres ve control kodu yanlışlığından dolayı sonuç hep $FF olarak sana yansıyor. Kısaca o epromu henüz kontrol edemiyorsun.

Ete

ete

Bir şey daha ekleyeyim.
Device adresini 0x78 ve ardından 0x00  şeklinde vermekle şunu yapıyorsun bence,
Device adresi 0x78 veriyorsun device içinde erişim adresinide 0x00 vermiş oluyorsun. Bunun başka bir izahı yok. Şimdiye kadar hiç bir şekilde 10 bitlik device adresi (kontrol kod) görmedim ben. Hepsi 8 bittir. Sen sürekli olarak işe Device ADres+dahili_Adres=0 şeklinde işe başlıyorsun.

Device Kod yada adres her neyse genelde 7 bit üzerinden verilir. Çünki Bit sıfır (Bit0) yazma yada okuma durumuna göre 1 veya sıfır olarak değişir. Buda genellikle kullanıcıları şaşırtmaktadır.
Okumada bit0=1 olur yazmada Bit0=0 olur.
Bu hususu dikkate alıyorsundur umarım.

Tavsiyem şu şekilde
I2CREAD $78,0,[OKUNAN]  komutunu ver ve OKUNAN değişkenine ne yerleşmiş bir bakıver.
Daha sonra ;
YAZILAN=$11
I2CWRITE $78,0,[YAZILAN]  komutunu ver ve sonra tekrar,
I2CREAD $78,0,[OKUNAN]  komutu ile yazılanı geri oku bakalım ne okuyacaksın.
Her şey doğru ise okuduğun $11 olmalıdır elbette. Okuyamıyorsan büyük ihtimalle device adres yanlıştır. Yada pinler yanlıştır. CLK ve DATA pinlerinde pullup olduğundan emin olman gerekiyor ayrıca.

Elbette bu işi kolayca yapmasınlar diye adamlar epeyce şeytanlık düşünmüşler. GND yi yok etmek gibi.

Kolay Gelsin
Ete

Powered by EzPortal