Forum: Mikrocontroller und Digitale Elektronik SDXC Karte per SPI?


von Uwe (Gast)


Lesenswert?

Hallo zusammen.

Ich bin dabei, (micro)SD-Karten in mein Projekt zu integrieren. 
Anbindung klassisch per SPI, Systemspannung 3,3V. Eine 2GB SDSC, sowie 
eine 8 und eine 32GB SDHC-Karte funktionieren auch einwandfrei.

Nur eine 64GB SDXC-Karte will nicht: Ich bekomme beim Initialisieren 
(CMD0) über DO/MISO nur endlose 0xFF zurück, also offenbar absolut keine 
Aktivität auf der Leitung von Seiten der Karte.

Hat jemand schonmal SDXC mit SPI zum Laufen gebracht? Gibt es da etwas 
Besonderes zu beachten im Vergleich zur SDHC?

Viele Grüße
 "Uwe"

von Stefan F. (Gast)


Lesenswert?

Habe ich auch schonmal probiert, mit dem selben Ergebnis. Scheinbar 
unterstützen einige (vielleicht alle?) SDXC Karten das SPI Protokoll 
nicht.

von Norbert T. (atos)


Lesenswert?

Bei mir laufen drei SDXC (64 GB von Samsung) ohne weiteres...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Uwe schrieb:
> Anbindung klassisch per SPI, Systemspannung 3,3V. Eine 2GB SDSC, sowie
> eine 8 und eine 32GB SDHC-Karte funktionieren auch einwandfrei.
> Nur eine 64GB SDXC-Karte will nicht: Ich bekomme beim Initialisieren


 64GB mit SPI ?
 Bist du sicher, dass du auf dem richtigen Weg bist ?

 Abgesehen davon, 64GB kostet ziemlich genau das Doppelte von 32GB und
 0.5E für zusätzliches SD-Card Modul ist wirklich nicht viel...

von Uwe (Gast)


Lesenswert?

Update:
Habe heute eine andere 64GB-Karte ("Sandisk Ultra", wie die andere, 
evtl. etwas neuer) probiert. Mit der hat's sofort funktioniert.

@Marc Vesely:
Natürlich hast du Recht mit deinen Anmerkungen. Und im Moment brauche 
ich nichtmal annähernd die 2GB externen Speichers. Trotzdem möchte ich 
meinen Code möglichst "komplett" haben, sodass er (vllt. in späteren 
Projekten) mit möglichst vielen "Eventualitäten" zurechtkommt.

Danke jedenfalls für's Feedback.

Viele Grüße
 "Uwe"

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Uwe schrieb:
> @Marc Vesely:
> Natürlich hast du Recht mit deinen Anmerkungen. Und im Moment brauche
> ich nichtmal annähernd die 2GB externen Speichers. Trotzdem möchte ich
> meinen Code möglichst "komplett" haben, sodass er (vllt. in späteren
> Projekten) mit möglichst vielen "Eventualitäten" zurechtkommt.

 Ich dachte dabei in erster Linie auf Geschwindigkeit. Für solche
 Kapazitäten ist SPI einfach zu langsam.
 Mehr als 200KB/s beim schreiben sind kaum zu erreichen, jedenfalls
 habe ich es nie geschafft (und das auch noch ohne Umweg über FAT).
 Und dann sind da noch die Schreib-Verzögerungen...

 Kenne zwar deinen uC nicht, aber selbst die billigen STM32 haben
 mindestens 2 SPIs, damit gewinnst du sowohl an Geschwindigkeit als
 auch an Sicherheit.

 War nur ein Vorschlag...

von Uwe H. (uwehermann) Benutzerseite


Lesenswert?

Man könnte auch einfach in die Spec schauen.

https://www.sdcard.org/downloads/pls/click.php?p=part1_500.jpg&f=part1_500.pdf&e=EN_SS1

Bist du sicher, dass du den Init-Ablauf aus Kapitel "7.2.1 Mode 
Selection and Initialization" (und "Figure 7-2: SPI Mode Initialization 
Flow") korrekt einhälst?

Nach kurzem Überfliegen der Spec sieht es für mich schon so aus als wäre 
SPI Mode für SDXC prinzipiell möglich, wobei sich diverse Kommandos 
schon unterscheiden. Am besten einfach mal im ganzen Dokument nach 
"SDXC" suchen und die relevanten Stellen lesen.

Z.B. "3.9.4 UHS-I Bus Speed Modes Selection Sequence" könnte auch 
relevant sein, falls du nach Spannung anlegen absichtlich oder 
versehentlich die Karte auf 1.8V schaltest kommst du da nicht mehr raus 
und kannst nicht auf SPI Mode schalten:

  "After Switching 1.8V singling, the card cannot be changed to SPI 
mode."

Auch interessant: "3.10.5 Summary of Bus Speed Mode for UHS-II Card", 
"Table 3-10 : Bus Speed Mode Option / Mandatory". Nach dieser Tabelle zu 
urteilen ist SPI Mode für SDSC, SDHC, und SDXC mandatory (M).

Oder Kapitel "6.4.1.1 Power Up Time of Card":

"The host shall supply power to the card so that the voltage is reached 
to VDD min within 250ms and start to supply at least 74 SD clocks to the 
SD card with keeping CMD line to high. In case of SPI mode, CS shall be 
held to high during 74 clock cycles."

Hälst du diese (und alle anderen) Anforderungen sicher korrekt ein? Am 
Oszi / Logic Analyser konkret nachgeprüft? Hardware-Anschlüsse sicher 
alle korrekt? Mit welcher Spannung wird die Karte von dir versorgt? Wie 
schnell ist dein SPI Clock?

usw. usw.

von Jim M. (turboj)


Lesenswert?

Uwe schrieb:
> Update:
> Habe heute eine andere 64GB-Karte ("Sandisk Ultra", wie die andere,
> evtl. etwas neuer) probiert. Mit der hat's sofort funktioniert.

Dann solltest Du Dir mal dein SPI Timing in der Initialisierungsphase 
anschauen. Eventuell hältst Du die <400 kHz nicht ein - da sind einige 
Karten weniger empfindlich als andere. Ich fürchte, Du musst uns mal 
Deine disk_initialize() Implementierung zeigen.

Mich würde es aber auch nicht sonderlich wundern wenn einige SDXC Karten 
SPI nicht mehr implementieren. Die Datenübertragung von GBs würde mit 25 
MHz ewig dauern...

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.