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"
Habe ich auch schonmal probiert, mit dem selben Ergebnis. Scheinbar unterstützen einige (vielleicht alle?) SDXC Karten das SPI Protokoll nicht.
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...
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"
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.