Forum: Mikrocontroller und Digitale Elektronik STM32: SD-Card mit SDIO


von Lasse S. (cowz) Benutzerseite


Lesenswert?

Hallo,

ich versuche gerade mit meinem STM32F103RE mittels SDIO auf eine 
SD-Karte zuzugreifen.

Dazu nutze ich erstmal das mit der Firmware mitgelieferte Beispiel. Das 
funktioniert auch gut mit verschiedenen SD-Karten. (SD_Init gibt SD_OK 
zurück).

Teste ich das gleiche mit einer microSDHC-Karte*, die über einen Adapter 
im SD-Slot steckt, so bekomme ich nur ein Timeout.


Woran kann das liegen?

Oder, was gar noch besser wäre: hat jemand ein übersichtliches Beispiel? 
Ich finde das aus der fwlib ein bisschen unübersichtlich und finde im 
Netz nur Beispiele für den SPI-Mode..


Gruß
Lasse

PS: Sollte ich was vergessen haben, bitte Bescheid sagen, wird dann 
nachgereicht :)

*Transflash, 4GB von Reichelt

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Das hier?
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_stm32

Ich selbst habe es noch nicht benutzt, weiß auch nicht ob dieser Code 
SPI oder SDIO nutzt.

So viel ich weiß gibt es einige Unterschiede zwischen dem SD und SDHC 
Standard. (Unabhängig von der Kartenbauform). Das Timing soll anders 
sein und es gibt sich ein paar Befehle mehr.
Ein gutes Dokument hab ich bisher noch nicht gefunden.

von Lasse S. (cowz) Benutzerseite


Lesenswert?

mthomas nutzt leider auch nur SPI und verweist für SDIO auf das 
fwlib-Beispiel :(

von Martin Thomas (Gast)


Lesenswert?

Timing bei SDHC-Card ist nicht so sehr anders im Vergleich zu SD-Card 
und MMC. Initialisierung von Adressberechnung bei read/write-Block(s) 
jedoch schon.
Ich habe bisher kein Board mit STM32 und SDIO-Anschluss, daher gibt es 
kein Beispiel für SDIO von mir und nur den Verweis auf die SDIO-Beispiel 
in der StdPerLib.
Ansätze zur Fehlersuche: Mit Original Eval.-Board von ST identischer 
Anschluss der Karte (inkl. CS) und Quarz? SDIO-Takt in Ordnung (evtl. zu 
schnell bei der Initialisierung)? Testweise Pullups in die 
Datenleitungen Kartenslot-STM32. Bis zu welchem Punkt läuft SD_init 
(Debugger oder "printf-Duftmarken")?

von Escamoteur (Gast)


Lesenswert?

Auf jeden Fall mal noch mit der Karte eines anderen Herstellers testen, 
ich hatte bei SD-Karten da schon lustige Ergebnisse :-(

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Hallo,

danke für die Antworten,

ich hab leider kein Original-ST-Board, werd das mit den Pullups aber mal 
ausprobieren.

An der Software (zu schneller Takt) dürfte es ja eigentlich nicht 
liegen, immerhin ist das ja das fertige Beispiel von ST, oder?

@escamoteur:
Das wäre aber arg doof, ich dachte, dass gerade dass (und die 
Geschwindigkeit) das tolle an der SDIO-Schnittstelle ist: Das eben alle 
SD-Karten (mit entsprechender Software) funktionieren. Wenn nicht: Wie 
machen dass dann die Kamera- und PC-Hersteller? Ich kann ja schlecht auf 
mein Gerät draufschreiben "Funktioniert mit einigen SD-Karten" ;)

Gruß
Lasse

von TuningFork (Gast)


Lesenswert?

Hallo,

also mit SDIO kenne ich mich nicht aus, aber über SPI gibt es 
Unterschiede zwischen SD und SDHC bei der Inititialisierung und dem 
Zugriff auf den Speicher. Eine Sonderrolle nehmen dabei SD-Karten mit 
2GB ein (sollte man vermeiden). Die Karten enthalten in entsprechenden 
Registern bzw. Blöcken(siehe SD-Spec) die notwendigen Infos und 
entsprechende Zustands- und Flußdiagramme für eine typabhängige 
Intialisierung gibt es in den Specs. Die freien Specs findet man im Netz 
oder bei der SD-Association. Komplette erforden eine Mitgliedschaft in 
eben diese Association.

Gruß

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Die Grundfunktionen, Lesen, Schreiben, Adresse setzene sollten alle 
können. Dann gibt es noch Zusatzfunktionen, Security, Herstellerinfos 
usw. da muss man erst prüfen ob der Befehl unterstützt wird. Wenn nicht 
eventuell andere Befehle verwenden.

von (prx) A. K. (prx)


Lesenswert?

Hinlänglich bekannt ist, dass SDHC Karten in den älteren SD-Slots ohne 
ausdrücklichem SDHC-Support nicht funktionieren. Ob das nur die Treiber 
sind, oder auch die Interface-Hardware Unterschiede aufweist, weiss ich 
nicht. Aber was auf die PCs zutrifft, das trifft natürlich auch für 
Controller zu. Software, die nur SD kennt, kann mit SDHC nichts 
anfangen.

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Hallo,

der STM32 hat laut Datenblatt SDHC-Support:

"The SDIO Card Specification Version 2.0 is also supported"

und sollte somit funktionieren, zumal im fwlib-Beispiel auch was von 
HighCapacity steht.

Ich werde jetzt mal Pullups einbauen und dann gucken, wo der Timeout 
auftritt.


edit: Die Pullups ändern leider nichts an der Sache, das Timeout kommt 
nach CMD8 (SEND_IF_COND). Ich hoffe, ihr könnt dabei helfen ;)

Gruß
Lasse

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Um es für die Nachwelt festzuhalten: Das Problem lag am Olimexboard, das 
auf zwei Pins weitere Features hatte, die die SDIO-Sache stören.

Kappt man den LED_E Jumper und entlötet man R27, so läuft es wunderbarst 
:)

Gruß
Lasse

von Thomas F. (tf0815)


Angehängte Dateien:

Lesenswert?

Lasse S. schrieb:
> Um es für die Nachwelt festzuhalten: Das Problem lag am Olimexboard, das
> auf zwei Pins weitere Features hatte, die die SDIO-Sache stören.
>
> Kappt man den LED_E Jumper und entlötet man R27, so läuft es wunderbarst
> :)
>
> Gruß
> Lasse

Hallo Lasse,

Um welches OLIMEX-Board handelt es sich?
Ich nutze ein STM32-LCD "Development board for STM32F103ZE and 3.2" 
color LCD with touchscreen".
Dieses Board hat einen Steckplatz für (mini-)SD-Karten. Mit der 
mitgelieferten Software (sdcard.c, sdcard.h) kann ich die Karte 
initialisieren, aber nicht Lesen/Schreiben. Der Versuch wird immer mit 
einem TimeOut abgebrochen.
Danke für´s Lesen ...
Thomas

von Pieter (Gast)


Lesenswert?

auf ein frohes Neues....

...muß mich mal hier einklinken.
Ich benutzt ein Olimex-E407 Board mit STM32F407 und habe dafür einen 
kleinen SDIO-Treiber von C nach Pascal umgeschrieben. Geht soweit auch 
ganz gut. Lese- und Schreibgeschindigkeit scheint von der SD-Card 
abzuhängen.
Beim lesen komme ich bis auf 4,8MByte/s, beim schreiben nur auf 
220kByte/s.
Liegt es am verwendeten SingleBlockModus oder hat wer schon selbige 
Erfahrung gemacht?

Mit Gruß
Pieter

von Martin Beuttenmüller (Gast)


Lesenswert?

@ Thomas Frenzel:

(Die Rückfrage kommt etwas spät - bin gerade erst über diesen Tread
gestolpert.)

Im angefügten Bild hat der µ-SD-Connector einen WP-Schalter integriert.
"HW-Writeprotection" kenne ich so nur von ("normalen") SD-Karten,
bei µSD hab' ich das noch nie gesehen.

Entweder ist das Schaltbild oder aber die Beschriftung unrichtig.
Alternative: ich selbst liege voll daneben ...

Grüße von der Spree
Martin

von W.S. (Gast)


Lesenswert?

A. K. schrieb:
> Hinlänglich bekannt ist, dass SDHC Karten in den älteren SD-Slots ohne
> ausdrücklichem SDHC-Support nicht funktionieren. Ob das nur die Treiber
> sind, oder auch die Interface-Hardware Unterschiede aufweist, weiss ich
> nicht.

Es ist ein REINES Treiberproblem. Die daten werden bei SD in Bytes 
adressiert und bei SDHC in Blöcken zu 512 Bytes. Abgesehen davon 
verstehen SD Karten einige wenige SDHC-Kommandos nicht, die aber NUR 
beim Initialisieren gebraucht werden, um herauszufinden, ob es ne SD, 
SDIO oder SDHC Karte ist.

Ich hatte doch hier vor Monaten schon mal meinen SDIO-Treiber gepostet, 
der übrigens sowohl auf STM32F103 als auch auf LPC2478 läuft. Die 
SDIO-Cores beider µC sind weitestgehend gleich.

W.S.

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.