SD Kart PIC SPI haberleşme

Başlatan Ali_54, 09 Ocak 2014, 20:07:02

Ali_54

evet resmidüzelttim tekrar. bana matıklı gelmiyo ama deniyeceğim. her fikre açığız. matıklı gelmemesinin sebebi kart hattı 1 e çektiğinde 47 k dan dolayı yine 3.3Volt baskın gelecektir diye düşünüyorum. hadi pull-up tan dolayı 3.4 oluversin.
1 harf öğretenin 4 gün kölesi olurum.

Elektroemre

SD kart "1" göndereceği zaman hattı boş bırakıyor (open collector) ve pull-up ile HIGH'a çekilmiş oluyor  :)
Netti bazı şemalarda bu pull-up'u görmemenizin sebebi dahili pullup'ın kullanılmış olması.

Kolay gelsin.

Ali_54

#17
doğru ya SD kart iç şemasını bilmeyince benimki sallama bir tahmin gibi oldu. şimdi aklıma yattı işte. Hocam yanlız daHİLİ PULL-UP tan kastınız sanırım işlemci tarafında yazılımsal ayarlanabilen dahili pull-up lar filan var. onu diyorsunuz sanırım. sd kartlarda dahili pull-up yok. durum buysa sanırım matığı kaptım
1 harf öğretenin 4 gün kölesi olurum.

Elektroemre

Aynen öyle. İster dışarıdan normal dirençle PULL-UP yaparsın. İster MCU'nun içerisindeki yazılımla aktif edilebilen PULL-UP'ları kullanırsın.
Zamanında bu pull-up direnci yüzünden bende günlerce SD kartı çalıştıramamıştım  :)

Ali_54

#19
bağlantı yanlışken 0x00 0x01 okumuşum. yani CMD0 için 0x01 okuyamadı farzedin. SDkart 7.pin pul-up ta yaptım. şimdi bağlantılarım doğru ama 0XFF ten başka cevap gelmiyor.

yani,  setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_16);  ayarları da doğru olması lazım.

yazılımda mı hata yapıyorum ben?

0XFF dışında bir yanıt bekleyen  while() döngüsü var ya, orda çakılıp kalıyor.  yani  sadece 0xff geliyor. kart takılı. lütfen hatamı söyleyin?
0xff gelmesi normal ama 9-10 okuma içinde 0x01 gelmesi gerekmez mi
1 harf öğretenin 4 gün kölesi olurum.

Ali_54

İsiste olayı simulsyon yaptım. matnık karmaşık gelmiyor, anladım. hatta isiste simulasyon yapıp çalıştırdım. CMD0 için 0x01 ardından CMD1 için 0x00 alabiliyorum.

Ama gerçek devreden sadece 0xFF geliyor. günlerdir içinden çıkamıyorum. Lütfen yardım edin.
1 harf öğretenin 4 gün kölesi olurum.

Elektroemre

SD karta lehim yaparken bozmuş olabilirsin. SD kartın hemen dibine beslemesine 100nF at ayrıca.
SPI hızın şuan ne kadar bilmiyorum ama ilk etapta 250KHz gibi bir değerde tut.
Oda olmadı, PIC16F877 3.3v ile çalışabiliyorsa, SD kartı direkt bağlayıp (gerilim bölücüler olmadan) dene.
Oda olmazsa mevcut hazır netten bir şemayı tatbik edip, direkt hazır hex kodu at. Oda çalışmazsa SD kart bozulmuş olabilir.
Başka SD kart ile dene.
Oda olmadı kafayı yemek istemiyorsan üzerinde SD kart yuvası bulunan, örnek kodları olan hazır PIC ya da ARM kiti al  :)

Ali_54

Hocam kafayı yemedim daha ama ne olursa olsun bunu halletmek zorundayım. vazgeçmeyeceğim. sonuncu hariç dediklerinizin her birini uygulayacağım. kendim yapmadıkça hazır kitleri sevmem. sonuçta daha sonra zaten pcb sini hazırlayacağım.

spi ayarında clk_div_64 kodda var. 4MHz kristal kullanıyorum. 64 te biriyse 125kHz yapar. sanırım SPI hızım bu.

Ha bide sd kartı LM1117 yle besliyorum ve 3.3V çıkışına bağlı 220uF var zaten.
1 harf öğretenin 4 gün kölesi olurum.

mcn

 877 yerine 18f serisi 3.3 V ile çalışan bir pic ile çalışın. yoksa daha çok uğraşırsınız. bu setup la olacağını hiç zannetmiyorum.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

Ali_54

SPI haberleşmede sorun yaşıyorum.
ccs c deki spi ayarım böyle

   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);

şimdi
877 den spi okuma pinini toprağa bağlasam 0x00 okurum beslemeye bağlasam 0xff okurum değil mi? C5 pininden (24 nolu SDO pini) ve simulasyonda da denedim öyle görünüyor. Ama gerçekte bu pini beslemeye de bağlasam daima 0x00 okuyor. bu nasıl mümkün olabilir? bırakın spi iletişimi daha bu noktada çıkmaza düştüm ben.

Not:daha önce hiç spi tecrübem olmadı ilk defa kullanmaya çalışıyorum.
1 harf öğretenin 4 gün kölesi olurum.

z

Çipinin dokümanına bakmadım ama;

SDO (Serial Data Output) senin cihazın çıkışı değil mi? Neden bunu toprağa bağlıyorsun?
SDI pinini toprağa bağlaman gerekir.

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

Ali_54

#26
Alıntı yapılan: z - 23 Ocak 2014, 18:37:51
Çipinin dokümanına bakmadım ama;

SDO (Serial Data Output) senin cihazın çıkışı değil mi? Neden bunu toprağa bağlıyorsun?
SDI pinini toprağa bağlaman gerekir.


Z hocam SDO SDI yer değitirdim şimdi beklenilen yanıtı veriyor şükür. Sanırım bir de dikkatsizliğim üzerine bir konu açmalıyım ben. teşekkür ederim. stresten olsa gerek

mesaj birleştirme:: 23 Ocak 2014, 19:11:29

İşlemci spi okuması tamam. şimdi SD Kartta

CMD1 e ve CMD0 a karşılık 0x80 okuyor. (yani 10000000) R1 yanıt formatına göre bu anlamsız. acaba 0x01h okuyacakken bit sırasını tersten mi okuyorum?
1 harf öğretenin 4 gün kölesi olurum.

z

Scopun yoksa bir tane al. Bu meslek scopsuz yapılmaz.

Yıllarca ben de scopsuz çalıştım. O yıllar boşa geçmiş.

Şimdiki aklım olsaydı borç harç alırdım.

Üstelik günümüzde fiyatlar çok düştü.

Hiç bir şey alamıyorsan 20Mhz analog scop al.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Ali_54

#28
dijital scop araşırmaya başladım hocam. sd kart mevzusunuda direk 3.3V ta haberleştirmek amacıyla 18F4685 e geçtim. birde böyle deneyeceğim. hazırlıyorum.

mesaj birleştirme:: 24 Ocak 2014, 10:46:36

bağlantılar temiz olsun diye sadece sd kart için  şöyle bir ara devre hazırladım. iki türlü deneyebilmek için hem 5V  data giriş çıkışı verdim hem 3.3V. Bastım kartı. ama 0x80 cevabı dışında haberleşemedim.


1 harf öğretenin 4 gün kölesi olurum.