SPI modundaki bir SD kart çip seçimine / ikincil seçimine uyuyor mu? Uygulamamda sıfırlanıyor gibi görünüyor


9

Bir FPGA 16-bit SPI ile bağlı bir mikrodenetleyici (NXP LPC1343 ) olduğu bir uygulama var . Aynı SPI bağlantı noktasını (MISO / MOSI) kullanan ancak farklı bir CS / SS pinine sahip bir SD kart vardır (her ikisi de SPI spesifikasyonuna göre aktif düşüktür). Yapmam gereken şeylerden biri, FAT32'yi kullanarak FPGA'dan SD Karttaki bir dosyaya veri yazmak ve bu mikrodenetleyicinin işi. Mikrodenetleyici, tek başına güvenilir bir şekilde çalıştığım FatFS'yi çalıştırıyor .

Mikrodenetleyici sadece az miktarda RAM içerdiğinden, aynı anda sadece az miktarda veri arabelleğe alınabilir. Bu nedenle, mikro FPGA'dan bir tampon okumak, SPI modunu 8 bit olarak değiştirmek ve daha sonra bu verileri FATFS'ye yazmak zorundadır. SD kartı SPI modu için yapılandırmak için, SPI veriyolu 400 kHz'de çalışırken bir komutun gönderilmesi gerektiğini ve belirli bir bekleme süresinin olması gerektiğini hatırlayın. Bu nedenle, başlatmayı yalnızca bir kez yapmak istiyorum.

Ancak, CS'yi SD kartta yüksek tutarken bile FPGA'da işlem yapmak, SD kartı garip bir duruma sokuyor gibi görünüyor, böylece yeniden başlatmadan geçmesi gerekiyor. Tabii ki bu arzu edilmez, çünkü başlatma sadece 4 kB veya daha fazla veri yazmak için birkaç milisaniye sürebilir (yine mikro bilgisayarımın küçük RAM kapasitesi ile sınırlıdır). Mümkün olduğunca çabuk birkaç megabayt yazmam gerektiğinden bu, performansı yaklaşık 500 kB / s'den 100 kB / s'den daha düşük bir seviyeye düşürür.

SD kartların teknik olarak tam olarak SPI uyumlu olmadığını biliyorum, ancak bu sorun nasıl çözülebilir?


Bildiğim kadarıyla onurlandırmalı. Belki farklı bir SD kart deneyin?
Marko

Bu harika bir soru. Sorduğunuz (ve cevapladığınız) için teşekkürler.
markrages

Yanıtlar:


7

Tamam, aslında anladım. Biraz daha derine inmeliydim. MMC / SDC Nasıl Kullanılır'a göre bir veri yolunu paylaşırken SD kartların SPI cihazları gibi davranmadığı ortaya çıkıyor :

SPI veriyolunda, her bağımlı cihaz ayrı CS sinyalleri ile seçilir ve birden fazla cihaz bir SPI veriyoluna takılabilir. Genel SPI bağımlı cihazı, bir SPI veriyolunu paylaşmak için DO sinyalini eşzamanlı olarak CS sinyaliyle çalıştırır / serbest bırakır.

Ancak, MMC / SDC, SCLK ile senkronizasyonda DO sinyalini çalıştırır / serbest bırakır. Bu, MMC / SDC ve bir SPI veriyoluna bağlı diğer SPI slave'leri ile veriyolu çakışması olasılığı olduğu anlamına gelir. Sağdaki görüntü MMC / SDC'nin sürücü / serbest bırakma zamanlamasını gösterir ( veri yolu durumunu görmek için DO sinyali 1/2 V cc'ye çekilir ). Bu nedenle MMC / SDC serbest bırakma DO sinyali vermek için, ana cihaz CS sinyali dağıtıldıktan sonra bir bayt göndermelidir.

SD kart ve FPGA muhtemelen DO'yu sürmeye çalışıyordu ve SD kart kayboldu, bu yüzden sıfırlandı. Fazladan bir bayt göndermek sorunu çözmüş görünüyor.


Bu, FPGA ve kart arasında geçiş yapmanızı sağlar, değil mi? Ayrıca veri aktarımı ve devam ettirme sırasında kesintiye uğratabileceğinizi buldunuz mu? Elm-chan'da söylediklerinden, bu mümkün değil gibi görünüyor, ancak onaylayıp onaylamadığınızı bilmek isterim.
krs013

1
Evet, FPGA ve SD arasında geçiş yapmak için beklendiği gibi çalışıyor, ancak FatFS çağrıları arasındaki aktarımı kesintiye uğratamazsınız. En azından bunu çalıştıramadım. Bu, paylaşılan SPI veri yolunu kullanarak bir sensörden dosya yazma ve sensörden okuma sırasında bir kesmeye yanıt veremeyeceğiniz anlamına gelir.
Zuofu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.