Forum: Mikrocontroller und Digitale Elektronik microSD - Karte mit SPI?


von Oliver B. (irq)


Lesenswert?

Hallo,

ich bin auf der Suche nach einer microSD-Karte die man im SPI-Modus 
betreiben kann. Mit meiner Testschaltung/Code funktionieren diverse 
normale SD-Karten und auch eine 128mb noname microSD (mittels Adapter 
für den Slot) die bei meinem Nokia Handy dabei war.

Leider ist das kostbare Stück die einzige microSD, die tut. Ich habe 
z.B. hier noch eine neu gekaufte von SanDisk (1GB), die lässt sich 
einfach nicht initialisieren.

Ein Mitarbeiter eines anderen Herstellers meinte auf Anfrage:
"Konsumer-Karten, zu denen auch alle micro-SD Karten gehören, sind einem 
kurzen Produktionszyklus unterworfen, so dass sich das Innenleben
häufiger ändern kann, was sich vor allem im SPI Modus bemerkbar machen 
kann."

Meine Fragen:
 - Muss ich microSDs anders behandeln / mache ich was falsch?
 - Wo bekomme ich Karten mit SPI Unterstützung her?

Ich habe mal gegoogelt, es gibt ein paar unbekannte Hersteller, die 
geben das explizit mit an, aber die sind hierzulande nicht oder nur 
schlecht erhältlich.

von C. H. (hedie)


Lesenswert?

hallo

ich habe gerade eben SD Karten verwendung meinem controller 
beigebracht... auch SPI modus...

Dies funktioniert bei mir mit allen Karten, Normale SD, mini SD micro sd 
mit und ohne adapter egal..

habe etwa 10 verschiedene getestet... es müsste also an deinem code 
etwas nicht stimmen... zeig den doch mal her... also die 
intitialisierung etc

von Parascientist (Gast)


Lesenswert?

Die meisten Karten bis 2GB ohne SDHC sollten gehen. Habe mehrere 1GB und 
2GB Kingston Micro-SDs hier, die keine Probleme am Atmega machen. 
Eventuell solltest Du Deinen Code nochmal prüfen. Vielleicht entspricht 
die Initialisierung der Karte nicht ganz den Spezifikationen.

von C. H. (hedie)


Lesenswert?

ich habe auch 8GB SDHC und 16GB micro SD SDHC karten verwendet...

lief alles problemlos

von Oliver B. (irq)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die Antworten. Ich habe mich am Code von Martin Thomas 
in seinem Beispielprojekt für das FatFS Modul orientiert.

Ich habe die relevanten Codeteile angehängt, vielen Dank an diejenigen, 
die mal kurz drübergucken möchten.

Wie gesagt, der Code tut mit normalen SDs und auch einer einzigen 
microSD, was aber nicht heißen soll, dass er völlig korrekt ist.

von R. W. (quakeman)


Lesenswert?

Du solltest dir von http://www.sdcard.org/developers/tech/sdcard/pls die 
offzielle Spezifikation für SD-Karten herunterladen. Auf S.95 ist der 
Ablauf der Initialisierung im SPI-Modus dargestellt. Dort siehst du, daß 
in deiner Init Routine ein paar Schritte fehlen. Du solltest z.B. 
zwischen Karten nach Spezifikation 1.0 und 2.0 unterscheiden beim 
Initialisieren. Ebenso gibt es dann eine Unterscheidung zwischen SD und 
SDHC. Ich habe vor kurzem eine eigene Init Routine geschrieben, welche 
sich genau an diesen Ablauf hält und ich kann damit bisher erfolgreich 
diverse µSD Karten betreiben. Darunter sind 64MB, 512MB, 1GB, 2GB, 4GB, 
8GB Karten mit Spec v1 und v2 sowie SD und SDHC.
Ich weis zwar nicht, ob diese fehlenden Zwischenschritte die Ursache 
deines Problems sind, aber schdaden kanns nicht. Der Vorteil davon ist 
auch, daß du nach dem Initialisieren genau weist, um welchen Typ von 
Karte es sich handelt. :)

Ciao,
     Rainer

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Oliver Behr schrieb:
>...
> Ich habe mich am Code von Martin Thomas
> in seinem Beispielprojekt für das FatFS Modul orientiert.
orientiert...aber dabei auch einiges über Bord geworfen und die 
Initialisierung doch arg umgebaut.

Wie von "Fox Mulder" angemerkt, gilt es einiges zu beachten. Der 
unsprüngliche Code von ChaN - seine Initilisierungsroutine habe ich 
w.r.e. nicht verändert - tut dies auch.

Mein derzeitiger Stand STM32 + SD-Card per SPI + ChaNs FAT-Code findet 
sich unter:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html#stm32_dpf
-> Download -> darin project/Libraries/fat_sd/sd_spi_stm32.c

Mglw. auch hilfreich: Karte SO/STM32 MISO mit Pull-Up versehen (extern 
oder zumindest internen aktivieren). Sicherstellen, dass Card-Select 
richtig funktioniert (Init., select (LOW) und de-select(HIGH))

von Oliver B. (irq)


Lesenswert?

@Fox Mulder: Vielen Dank für den Hinweis mit der SD-Spec. Hatte gar 
nicht gewusst, dass die (zumindest eingeschränkt) erhältlich ist. 
Arbeite das gerade durch.

@Martin Thomas: Zwischenzeitlich habe ich auch deinen Code mehr oder 
weniger 1:1 versucht und damit erfolgreich diverse Karten initialisiert. 
Es lag tatsächlich daran, dass einige meiner Karten bereits v2 waren 
(obgleich nicht SDHC), was ich ja nicht behandelt habe.
Mittlerweile durchschaue ich auch deinen Code inkl CMD-Argumente etc. 
Was mir noch nicht klar ist, ich habe das in der SD-Spec auch noch nicht 
gefunden: Warum machst du vor jedem Command ein Deselect  Select  Wait 
Ready? Muss man die Karte wirklich jedes mal neu anwählen, genügt es 
nicht sie nach der Inititialisierung CS ständig auf 0 (selected) zu 
haben?

von I. E. (anfaenger69)


Lesenswert?

-> Fox Mulder

Rainer, wärst Du bereit die Lib zu veröffentlichen?

-> Oliver Behr

Viele Karten sind auch ekelig formatiert, sodaß die FAT information 
nicht immer sauber erkennbar sind. Verwende den Panasonic SDFormatter, 
einige Karten habe ich erst durch diesen Formatter mit dem AVR lesen 
können, obwohl auch zuvor Windows keine Probleme damit hatte.

von R. W. (quakeman)


Lesenswert?

Igor Ebner schrieb:
> Rainer, wärst Du bereit die Lib zu veröffentlichen?

Kein Problem.
Mein sämtlicher Code den ich für meine Mikrocontroller programmiere ist 
seit kurzem sowieso auf meinem SVN Server öffentlich verfügbar. Du 
kannst unter [1] das Repository ansehen und Dateien herunterladen. Im 
Speziellen sind im Verzeichnis "Library" alle meine bisher erstellten 
Bibliotheken die ich für diverse Hardware oder Software Funktionen 
benutze verfügbar. Änderungen die ich an meinen Dateien vornehme sind 
also auch dort gleich zu finden.
Dort sind auch sehr viele Test Projekte von mir mit welchen ich Sachen 
ausprobiert hatte. Also bitte nicht lachen, was dort alles für Zeugs 
herumliegt. ;)
Bei Fragen dazu am besten eine pm an mich.

Ciao,
     Rainer

[1] https://quakeman.homelinux.net/viewvc/trunk/

von R. W. (quakeman)


Lesenswert?

Fox Mulder schrieb:
> [1] https://quakeman.homelinux.net/viewvc/trunk/
Das ist nicht ganz korrekt.

Die richtige URL zum anzeigen per ViewVC lautet
https://quakeman.homelinux.net/viewvc/uVision/trunk/

Und die URL des SVN Repository zum auschecken lautet
https://quakeman.homelinux.net/svn/uVision/trunk/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.