Einfache Anbindung

Die Initialisierung des SPI-Mode von SD-Karten

19. Januar 2023, 9:30 Uhr | Heinz Arnold
Glyn
© Glyn

Zur Anbindung von SD- oder microSD Karten genügt oft der simple SPI-Bus, er kann sogar nur mit I/O-Pins auf Softwarebasis nachgestellt werden. Doch dabei sind einige Besonderheiten zu beachten.

Besonders vorteilhaft ist diese Anbindung, wenn es um Systeme mit einfachen Mikrocontrollern und limitierten Ressourcen geht. Wenn der SPI-Bus auf Basis von I/O-Pins nachgestellt wird, steht er immer zur Verfügung.

SD und microSD Karten verfügen aktuell meist über zwei verschiedene grundsätzliche Bussysteme: SD-Bus und SPI-Bus. Über zusätzliche Pins gibt es auch UHS-II/III und ganz neu SD Express mit 2 Lane PCIe-Bus. Je nach Verwendung haben die Pins der Karte unterschiedliche Bedeutung. Nach einem Power-On arbeitet die Karte im SD-Modus.

Der SD-Modus verwendet das proprietäre SD-Bus-Protokoll. Dabei ist zu beachten, dass dafür Gebühren anfallen können oder eine Mitgliedschaft bei der SD Association erforderlich ist. Auch aus diesem Grund wird bei vielen einfacheren Projekten auf den frei verwendbaren SPI-Bus zurückgegriffen. Den SPI-Bus stellen fast alle Microcontroller zur Verfügung, er gehört zu den am weitest verbreiteten Bussen in diesem Bereich. Allerdings stellt der SPI-Modus bei SD-Karten nur eine Untermenge des SD-Modus bezüglich Übertragungsgeschwindigkeit und Anzahl der verwendeten Funktionen dar. Die angegebenen Geschwindigkeitsklassen werden nur mit dem SD-Bus erreicht.

 

Anbieter zum Thema

zu Matchmaker+
Glyn
Die SPI-Pin-Belegung
© Glyn

Der SPI-Mode ist das zweite Kommunikationsprotokoll der SD-Karte und enthält nur einen Teil des SD-Protokolls. Das SPI-Interface wird nach einem Power-On durch den ersten Reset-Command (CMD0) aktiviert und kann danach bis zum nächsten Power-On nicht mehr verändert werden. Befehle und Funktionen die nach der SD-Version 2.00 definiert wurden, unterstützt der SPI-Mode nicht. SDUC-Karten unterstützen ebenfalls keinen SPI-Mode.

Der Vorteil des SPI-Modus liegt in der großen Verbreitung dieses Bustyps bei fast allen handels-üblichen CPUs und MCUs. Als Nachteil zeigt sich die geringere Performance und der eingeschränkte Befehlssatz. 

Glyn
Im SPI-Mode steht nur ein 1-Bit SPI-Bus zur Verfügung. Dieser hat folgende Pins:
© Glyn
Glyn
SD und microSD Karten werden momentan entsprechend ihrer Speicherkapazität in 4 Kartenstandards (Std.) unterteilt:
© Glyn

Besonderheiten des SPI-Modus

Während der SD-Speicherkartenkanal auf Befehls- und Datenbitströmen basiert, die durch ein Startbit eingeleitet und durch ein Stoppbit beendet werden, ist der SPI-Kanal Byte-orientiert.

Jeder Befehls- oder Datenblock besteht aus 8-Bit-Bytes. Der Host startet jede Bustransaktion, indem er das CS-Signal auf Low setzt. Per Default sind im SPI-Modus die CRC-Bits auf »OFF« gesetzt. Ein CRC-ON-Mode ist möglich. Der SPI-Modus kann nur durch einen Power-On Reset beendet werden. Im Gegensatz zum SD-Modus antwortet die ausgewählte Karte immer auf den Befehl.

Wenn die Karte bei einem Lesevorgang auf ein Problem beim Abrufen von Daten stößt, antwortet sie mit einer Fehler-Antwort (die den erwarteten Datenblock ersetzt) und nicht mit einem Timeout wie im SD-Modus.

Außerdem wird jeder Datenblock, der bei Schreibvorgängen an die Karte gesendet wird, mit einem Datenantwort-Token beantwortet.

Bei einer Speicherkarte mit Standardkapazität kann ein Datenblock so groß wie ein Kartenschreibblock und so klein wie ein einzelnes Byte sein. Lese-/Schreiboperationen in Teilblöcken werden durch Kartenoptionen ermöglicht, die im CSD-Register angegeben sind.

Im Falle von SDHC- und SDXC-Karten ist die Blocklänge auf 512 Byte festgelegt. Die mit CMD16 eingestellte Blocklänge wird nur für CMD42 verwendet und nicht für die Speicherdatenübertragung genutzt. Daher sind partielle Block-Lese-/Schreiboperationen ebenfalls deaktiviert. Außerdem werden die schreibgeschützten Befehle (CMD28, CMD29 und CMD30) nicht unterstützt.

Hardwareseitig arbeitet die SD-Karte im SPI-Modus ausschließlich mit 3,3-V-I/O-Signalen. Mit dem CMD8 (Command 8) kann der zulässige Bereich der Versorgungsspannung der Karte abgefragt werden, standartmäßig sind das 2,7V – 3,6V.

Initialisierung des SPI-Modes

Nach einem Power-On oder einem Einstecken der Karte müssen folgende Aktionen (Power-On Sequenz) erfolgen. Der SPI-Clock muss auf eine Taktrate zwischen 100 kHz und 400 kHz gestellt werden. Nachdem die Versorgungsspannung über 2,2 V (VDDmin) gestiegen ist, wird mindestens 1 ms gewartet. DI und CS werden auf High gesetzt und es werden mindestens 74 Clock-Takte an die Karte geschickt. Danach geht sie in ihre native Betriebsart (SD) und wartet auf Befehle.

 

Glyn
Bild 2: Power On Flow für den SPI-Mode
© Glyn

Die Karte geht ab diesem Punkt in den SPI-Mode, wenn das CS-Signal (Low) angelegt wird und dann der Reset-Befehl CMD0 geschickt wird. Weil die SD vor dem Senden des Befehls noch im SD-Modus ist, muss beim CMD0 die korrekte CRC mitgesendet werden. Im SPI-Modus ist CRC per Default deaktiviert.

Wenn der SPI-Modus akzeptiert wird und die Karte keine SDUC ist, antwortet sie im »Idle State« mit einem R1-Token (1 Byte).

Der nächste Befehl CMD8 wird verwendet, um den Betriebszustand der SD-Speicherkarten-Schnittstelle zu überprüfen. Er sendet die Versorgungsspannung (2,7 V – 3,6 V). Hier entscheidet sich, ob es eine Version 1.X oder eine Version >=2.00 Karte ist. Bei der Rückmeldung »Illegal Command« ist es V1.X oder keine gültige SD-Karte. Der kompatible Spannungsbereich wird in beiden Fällen dann mit CMD58 abgefragt.

Der folgende ACMD41 startet die Initialisierung und checkt, ob die Karte die Initialisierung erfolgreich beendet hat. Wichtig hierbei ist, dass wenn der Host SDHC und SDXC unterstützt (>=V2.00), beim ersten Aufruf von ACMD41 HCS (High Capacity Support) auf 1 gesetzt wird. Wenn es bei allen bisherigen Commands in der Antwort zu »Illegal Command« oder Errors kommt, ist die Karte nicht gültig.

Ist die Initialisierung erfolgreich (Antwort »in_idle_state=0«) sollte bei V2.00-Karten und aufwärts mit dem erneuten Senden des CMD58 das CCS abgefragt werden. Bei CCS=0 ist es eine Standard Capacity SD Memory Card (SDSC) und bei CCS=1 ist es eine SDHC oder SDXC.

 

Physical Layer Simplified Specification Version 9.00
Bild 3: SPI Mode Initialisation Flow
© Physical Layer Simplified Specification Version 9.00

Der SPI-Mode ist in der aktuellen »Physical Layer Simplified Specification Version 9.00« und früheren Versionen der SD Card Association beschrieben.

https://www.sdcard.org/downloads/pls/

Der vollständige Ablauf der Initialisierung in den SPI-Modus ist grafisch in Abbildung 3 beschrieben.

Mit diesem SUPPORT-Paper unterstützt Sie GLYN, bei der erfolgreichen Initialisierungen der SD oder microSD Karte in den SPI Modus.


Verwandte Artikel

GLYN GmbH & Co. KG