SD kart komut seti

Başlatan z, 15 Kasım 2013, 15:29:50

z

Garip bir sorunla karsilastim.

2GB SD karti 0...118 sektorlerini okuyabiliyorum. 119 da takiliyor.
8GB SD kartin ise sadece 0. sektorunu okuyabiliyorum.

Bu sorun hakkinda ne dusunuyorsunuz?

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

RaMu

WinHex (HxD) programıyla pcde okurken mi çıkıyor sorun
öyleyse küreklemeniz gerekebilir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Tabi ya belirtmeliydim.

Kendi islemcim (STM32F103) icin yazdigim programda bu sorunu yasiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

8Gbyte için bişey diyemeyeceğim ben sadece 2 GB ile çalışmıştım
öncelikle bence okuyamadığınıza kesin karar verelim
winhex crackli değilse pcde kart üzerinde nokta değişiklik yapılamıyor (neyse)
bir txt açıp sd kart içine, winhex ile adresini bulup (118 den sonraki bir sector e denk gelecek şekilde)
txt nin içine belli bir karakter doldurup
stm ile okumayı denemek iyi olur,
yoksa genelde sectorler 00h dolu oluyor zaten.

Bunun yanında birçok sebep olabilir
ama ben nedense belli bir kısımdan sonrasını hiç okuyamamak gibi bir sorunla karşılaşmamıştım,
aklıma gelenler sd kart fiziksel kilidi kapalı olabilir (8gb hiç boot sector (sector 0) hariç okunamıyorda bu özellikle olabilir)
veya sd karta yazılımsal kilidi yanlışlıkla açmış olabilirsiniz
yanlış hatırlamıyorsam kısmi kilitlemede yapılabiliyordu buda 2gb için durumu açıklayabilir
böyle ise
başka kartlarla deneme yapıp gerçekten böylemi anlamaya çalışabilir,
veya pc için sd kart formatlama sağlam formatlama ( sd associations unda var ) programı ile sd kartı fabrika ayarlarına getirmek iyi olur,
ayrıca winhexde bu gibi birçek şeyi yapabiliyor,
hatta bir seferinde fill disk ile sd kartı sector 0 dahil 00 ile doldurmuş ve
daha sonra boot sectorü başka bir sd karttan alıp sildiğim sd karta yazmak zorunda kalmıştım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

#49
Tek blok okuma komutu CMD17den sonra sektor no ve Dummy CRC gonderiyorum.

Ilk cevabin 0x00 sonraki cevabin ixe 0xFE olmasi gerekiyor. Daha sonra ise 512 adet data ve 2 byte CRC okuyorum.

2GB kartta 118. sektore kadar her sey yolunda.

119. sektoru okumak istedigimde 0x00 cevabi ardindan bir turlu oxFE cevabi gelmiyor surekli oxFF geliyor.

119..255 sektorlerinde ayni sorun devam ediyor. 256 dan sonra gene sektorler okunuyor. Taaki 256+119a kadar.

0x000...0x076 ok
0x076...0x0ff  sorun
0x100 ..0x176 ok
0x177...   sorun

------------------------------------------

8GB kartda sifirinci sektorde sorun yok.

Fakat 1. sektoru okumak istedigimde 0x00 dan sonra oxFE degil ox08 aliyorum. 0x08 i error token olarak dusunursek bunun anlami out of range demek.



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

Burak B

Şöyle anlatayım; bazı çinli zibidiler 2Gb lik flashi sdkartın içine koyduktan sonra SD kontrolcüsünün veya flash kontrolcüsünün diyelim konfigürasyonunu 8GB gibi ayarlıyor. Sonra sizin elinize geliyor bu kart 8gb diye alıyorsunuz yani. 1,2,3 dosya yüklüyorsunuz hiç 2Gb' yi geçmediğiniz için sorunsuz gibi duruyor. Ama günlerden bir gün 2Gb aşılınca işin pis yüzü çıkıyor ortaya. Bu bahsettiğim yöntemi flash disklerde daha çok uyguluyorlar. SD kartlar içinde geçerli bir yöntemdir. Çünkü SD kartların kontrolcülerini üreten firmalar aynı zamanda flash disklerin kontrolcülerini üreten firmalar. Yani 100' lerce ürünü aynı anda programlayabilecek yazılımlar geliştirip ürünlerini konfigüre ediyorlar. Sonra bu yazılımlar bahsettiğim zibidi çinlilerin eline geçiyor. Sonuç durum ortada. 16GB diye flash bellek al 256MB çıksın. :)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

İnternette bulduğum bir örnekten sonra hatamı anladım.

Okuma yaparken CMD17 + 32 bit adres yolluyordum. Bu durumda

0. sektörü okumak için  CMD17 + 0x00000000 gönderirken
1. sektörü okumak için  CMD17 + 0x00000001 gönderiyorum.

Halbuki;

0. sektörü okumak için  CMD17 + 0x00000000 gönderirken
1. sektörü okumak için  CMD17 + 0x00000200 göndermem gerekiyor.   512 adresini oku diyor.

-----------------

Evde card okuyucum olmadığı için işyerine gelince şöyle bir sorun farkettim.

0 sektörü okuduğumda PC nin okuduğu ile benim okuduğum uyuşmuyor.

Winhex logical sektor 0'ı okuyor. Physical sector seçeneği kapalı.

Muhtemelen ben fiziksel 0 sektörünü okuyorum. PC ise lojik 0 sektörü.


Bu aşamadan sonra MBR ve FAT yapısına girmek gerekecek.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

#52
 Bir kaç hatırlatmam olacak.

Piyasadaki SD veya microSD kart girişli dijital fotoğraf makinesi, kamera, mp3 player, telefonların eski olanlarında max: 2GB, 4GB, 16GB, 32GB gibi limitler var. (Windows Mobile bir telefonum vardı. max: 2GB destekliyordu. Fazlasını tanımıyordu. Bir yama ile 8GB kart kullanıyordum.)
FAT16'nın max:2GB ve max:4GB desteklere sahip bir kaç sürümü var. Daha fazlasını desteklemiyor.
FAT32 max: 2TB ve 16TB destekler.
Şu karakerleri dosya adlarında kullanmamalısınz. / \ : * ? " < > |

SD-SC (Standart Capacity) kart max:2 GB destekliyor. (4GB olanlarıda varmış.)
SD-HC (High Capacity) 4-32GB arasını destekliyor. (SD Versiyon 2.0)
SD-XC max: 32GB üstü

SD ile microSD sadece arasındaki fiziksel farktan fazlasıda var. Örneğin SDXC max:256GB destekler. microSDXC max:128GB destekler. Bu yüzden SD microSD arasında başka farklar da olabilir.

http://en.wikipedia.org/wiki/Secure_Digital
http://en.wikipedia.org/wiki/Comparison_of_file_systems

mesaj birleştirme:: 27 Kasım 2013, 13:22:04

Disk için bir HEX editor buldum. Güzel araçlara sahip. Renklendirme olayı işi kolaylaştırıyor. Active@ Disk Editor 3

http://www.disk-editor.org/


z

Evet nihayet 2GB SD kart okuma işlemi ile sorunum kalmadı. Yaptığım en büyük hata CMD16 ve CMD17 komutlarının parametrelerindeymiş.

SD kart okuma işlemi ile ilgili yazımı pdf olarak da hazırladım.

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

serhat1990

Hocam emeğinize sağlık . Teşekkürler bu güzel paylaşım için . Bende bu konu ile uzun zamandır bir çalışma yapmak istiyordum fakat döküman eksikliği ve yeterli zaman bulamama nedeniyle erteliyordum . Dökümanı inceleme fırsatım oldu gerçekten çok basitçe fazla kafa karıştırmadan anlatılmış .  Bu konuda çok iyi bir kaynak olmuş .

İyi çalışmalar dilerim , saygılarımla ...

sseedat

merhabalar

4GB'lık  bir sd card dan veri okumaya çalışıyorum ama nedense istediğim adresten bir türlü data okuyamadım.

kartın 0x00000000 adresinde başlayarak dataları okuyabiliyorum fakat  0x00000040 gibi bir adresten başlayarak nedense data okuyamadım




adresi bu şekilde gönderiyorum

        SpiWriteData(0x00);
   SpiWriteData(0x00);
   SpiWriteData(0x00);
   SpiWriteData(0x40);
Görünmez bir mezarlıktır Zaman...

RaMu

Birkaç mesaj yukarıda (mesaj 51)
z hocanın mesajını okudunmu
o mesajdaki gibi dene.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html