I2C device adres ile ilgili bir yorum ihtiyacım var.

Başlatan ete, 31 Aralık 2011, 10:46:47

ete

Arkadaşlar,
Biliyorsunuz PBP da I2CRead ve I2CWrite şeklinde komutlarımız var ve standart I2C haberleşeme özelliğine sahip aletler ile bu komutları kullanarak haberleşebiliyoruz. En çok kullandığımız alet ise I2C ile çalışan Epromlar. Tipik bir epromun haberleşme için kullandığı bit diziliş sırasına bakarsak aşağıdakileri görebiliyoruz.



Üzerinde çalıştığım farklı bir entegre var. adı RDA1846. kısaca Walkie-Talkie yani komple bir telsiz entegresi. Çalışması hem SPI hem I2C olarak data sheet de açıklanmış. Aşağıdaki açıklamaya bakarsanız data register formatını vemişler. Her bir yazılacak bilgi 24 bit uzunluğunda bunu ilk 7 biti cihaz adres (kontrol), sonrasında tek bit R/W biti, Sonrasında adres veya data bitleri geliyor 16 bitlik. Bu açıklamaya bakarsanız ilk bit yani Bit7 R/W biti oluyor.



Aynı şekilde aşağıdaki resme bakarsanız bir timing diagramı verilmiş.


Bu timing diagramında  1-7 chip adres olarak açıklanmış ve 8 bit ise R/W biti olarak açıklanmış.
Bu alet standart bir I2C aleti ise R/W biti sonda yer alması gerekiyor. Burada da sona yazılmış ama bit 8 olarak gözüküyor. Halbuki Epromda bit0 olarak gözüküyor bu R/W biti.

Şimdi şaşırdığım nokta bu alete chaz adresini nasıl vermeliyim? Bit sırası olarak nasıl olmalıdır diye soruyorum bu soruyu.
Cihaz kodunu %0101110 olarak kullanacağım. Bu formata göre R/W bitini en başa mı eklemeliyim yoksa en sonamı eklemeliyim ikilem içinde kaldım. Diğer bir konu ise BPB da R/W bitine biz karışmayız. Komut onu okuma yapılırken "1" yazılırken ise "0" yapar. Dolayısıyla burada sorun ortaya çıkıyor. Eğer başa eklenecek ise komut sona ekleyecektir.

Siz ne düşünürdünüz acaba ne yapmalıyım.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

z

Cipin dokumanina baktim.  http://search.4shared.com/postDownload/EViXxXKm/RDA1846_Programming_manual.html

I2C ve SPI timing diyagramina bakilirsa

I2C de once adres en son R/W gidiyor.
SPI da ise once R/X sonra adres gidiyor. r/x A6,A5,A4....A0

Baktim isin icinden cikamiyorum. Geri donus degeri belli bir komut icin (okuma komutu) her ikisini de denerdim.

Mesela reset ardindan icerigi belli registeri okumayi dener okudugumla katalogdaki degerle aynimi değilmi sinardim.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ete

Bende hazırlığımı alternatifli komut şekillerine göre yapıyorum. Bakalım sonuç ne olacak.

Teşekkürler.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

askuzucu

ETE hocam son durum nedir?
Bu entegreyi nasıl temin ettiniz? Ben de bir uygulama yapmayı düşünüyorum...

ete

Maalesef epeyce uğraşmama rağmen olumlu sonuç alamadım.
Ancak hala entegreyi doğru monte ettiğime de emin olamadım.
Montajı son derece zor olan bir entegre. Bütün bacaklar altta yer alıyor ve sıcak hava metodundan başka çare yok.
Gözlerim çok iyi görse ve elimde çok ince uçlu bir havya olsa belki bir şeyler yapabilirdim ama oda mümkün değil.
Üstelik dışarı çıkan hiç bir GND bacağı yok. Entegrenin alt yüzünde ufak bir kare GND olarak kullanılıyor. Anlayacağınız zor bir entegre.
Ben hala onu yerine doğru bağlayamadığımı düşünüyorum. Birileri  doğru dürüst bir deneme kartı yaparsa onunla yeniden çalışmak isterim.

Data sheet diye verdikleri açıklamalarda bir çok çelişki var. O kadar fazla yorum yapılması gerekiyorki anlamak mümkün değil. Yüzlerce alternatif ortaya çıkıyor. Buna rağmen bir şekilde ya SPI yada I2C ile haberleştirebilmeli idim ama dediğim gibi yanıt alamadım ve pes ettim.

Entegreyi bir arkadaştan almıştım. Oda Honkong dan getirtmiş.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com


askuzucu

Biraz baktım, senkron veri aktarımı daha kolay gibi geldi.Sadece bir pin fazla kullanılacak.

ete

Önce  "RDA1846_Programming_Manual.pdf" diye bir PDF dosyası var onu bulup okumanı öneririm.
Sonra neyi nasıl kullanacağına karar verirsin.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

askuzucu

Zaten ona baktım hocam, registerlerin fazla olması göz korkutuyor ama cihaz açıldıktan sonra ilk önce bütün reisterlere değerleri atanırsa cihaz çalışırken sadece gerekli olanları gönderebiliriz.(frekans, tx on, vs.) böylece daha hızlı çalıştırabiliriz.
Dikkatli incelenince çok karışık gelmiyor. Ama mutlaka epeyce uğraştıracaktır. Önce çalışan bir devrede lojik analizorle giden veriler incelenirse çok yararı olur. Hatta deneme kartı yerine ilk zamanlarda cihazın kendisi de kullanılabilir. Gördüğüm kadarı ile bu cihazları 40-50 $ gibi fiyatlara almak mümkün.

sozkarabacak

#9
Merhaba,

Bu çiple ilgili bende araştırmalar yapıyorum burada sormak istediğim şu aşağıdaki resimde görülen 29H[13:0] ne anlama geliyor? freg<29:16> ne demek bu değerleri shiftout komutuyla bu entegreye nasıl gönderebiliriz? Örnek bir shiftout komutu verebilir misiniz?
[IMG]http://i9.photobucket.com/albums/a74/sozkarabacak/rda1846.png[/img]
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

ete

Söz konusu değerlerin yorumu şöyle,
29H  hex29 yada $29 anlamına geliyor. Bu bir register ve [13:0] ifadesi onun sıfır dan 13 e kadar bitleri olduğunu gösteriyor 13 bitlik bir register anlayacağın. Diğer ifade ise  freq <29:16> onun freq değerinin içinde 16 dan 29 a kadar olan bitler olduğunu gösteriyor. Aynı registerin 0-15 arasındaki bitler freq low byte ına ait olduğu zayen aynı tanloda görülüyor.
RDA entegresinden bahsediyor isek hem I2C hemde SPI haberleşebiliyor tercih sizin seçiminiz oluyor.
Sorduğunuz haberleşme şekli SPI ile ilgili. Freq registeri 32 bit olunca onu ya 32 bit olarak şöyle kullanabilirsiniz.   Shiftout  dta, sda , 1, [freq.byte3\5 , freq.byte2, freq.byte1, freq.byte0]
Bu kullanım şellinde enbüyük bit (29. Bit) ilk önce veriliyor. Freq.high byte kısmı 13 bit olduğu ve onu iki parçaya ayırınca 8+5 şellinde ayrılacağı için son parçayı 5 bit olarak yalladık \5 ifadesi bu iş içindir.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com