Ist es möglich, den 4-Pin-Modus für eine SD-Karte mit einem Mikrocontroller anstelle des SPI-Modus zu verwenden?

7

Ist es möglich, den 4-Pin-Modus einer SD-Karte beim Entwerfen einer Schnittstelle mit einem Mikrocontroller zu verwenden, oder müssen Sie immer den SPI-Modus verwenden? Ich denke besonders an einen Mikrocontroller wie einen PIC24. Der SPI-Modus ist offensichtlich langsamer, und ich versuche, bessere Möglichkeiten zu finden, um den Durchsatz des Geräts zu verbessern.

James
quelle

Antworten:

6

Das habe ich gefunden:

Das SD 1-Bit-Protokoll ist ein synchrones serielles Protokoll mit einer Datenleitung, die für Massendatenübertragungen verwendet wird, einer Taktleitung für die Synchronisation und einer Befehlszeile, die zum Senden von Befehlsrahmen verwendet wird. Das SD 1-Bit-Protokoll unterstützt explizit die Busfreigabe. Ein einfaches Single-Master-Arbitrierungsschema ermöglicht es mehreren SD-Karten, einen Takt und eine DAT0-Leitung gemeinsam zu nutzen. Das SD 4-Bit-Protokoll ist nahezu identisch mit dem SD 1-Bit-Protokoll. Der Hauptunterschied besteht darin, dass Bulk-Datenübertragungen mit Busbreite über einen 4-Bit-Parallelbus anstelle eines einzelnen Kabels erfolgen. Bei ordnungsgemäßem Design kann dies den Durchsatz für Massendatenübertragungen vervierfachen. Sowohl das SD 1-Bit- als auch das 4-Bit-Protokoll erfordern standardmäßig einen CRC-Schutz für Massendatenübertragungen. Ein CRC oder Cyclic Redundancy Check, ist eine einfache Methode zum Erkennen des Vorhandenseins einfacher Bitinversionsfehler in einem übertragenen Datenblock. Im SD-4-Bit-Modus werden die Eingangsdaten über die vier Busleitungen (DAT) gemultiplext, und die 16-Bit-CRC wird unabhängig für jede der vier Leitungen berechnet. In einer All-Software-Implementierung kann die Berechnung des CRC unter diesen Bedingungen so komplex sein, dass der Rechenaufwand die Vorteile des breiteren 4-Bit-Busses verringern kann. Eine parallele 4-Bit-CRC ist jedoch in der Hardware trivial zu implementieren, sodass benutzerdefinierte ASIC- oder programmierbare Logiklösungen eher vom breiteren Bus profitieren. In einer All-Software-Implementierung kann die Berechnung des CRC unter diesen Bedingungen so komplex sein, dass der Rechenaufwand die Vorteile des breiteren 4-Bit-Busses verringern kann. Eine parallele 4-Bit-CRC ist jedoch in der Hardware trivial zu implementieren, sodass benutzerdefinierte ASIC- oder programmierbare Logiklösungen eher vom breiteren Bus profitieren. In einer All-Software-Implementierung kann die Berechnung des CRC unter diesen Bedingungen so komplex sein, dass der Rechenaufwand die Vorteile des breiteren 4-Bit-Busses verringern kann. Eine parallele 4-Bit-CRC ist jedoch in der Hardware trivial zu implementieren, sodass benutzerdefinierte ASIC- oder programmierbare Logiklösungen eher vom breiteren Bus profitieren.

http://alumni.cs.ucr.edu/~amitra/sdcard/Additional/sdcard_appnote_foust.pdf

Ich glaube, Sie hätten nicht genug Leistung, um crc32 im 4-Bit-Modus zu berechnen. Aber ohne CRC könnte es möglich sein.

BarsMonster
quelle
Einige der PIC24F-Serien verfügen über 16-Bit-CRC-Generatoren. Ich stelle mir vor, dass es möglich wäre, diese auf irgendeine Weise zu kombinieren, um 32-Bit-CRCs zu erhalten.
Thomas O
Tatsächlich wird hier CRC-16 benötigt, sodass es viel besser aussieht.
BarsMonster
3
Eine Bit-Banged-4-Bit-SD-Schnittstelle ist nicht schneller als eine hardwareunterstützte SPI-Schnittstelle. (Laut Wikipedia kann eine SD-Karte mit 208 MHz getaktet werden. Diese Geschwindigkeit wird für einen PIC-Mikroprozessor schwierig sein.)
Markrages
@markrages: Ich denke, man könnte mit Lesevorgängen im 4-Bit-Modus ohne CRC etwa dreimal so schnell wie SPI durchführen. Stecken Sie den Taktdraht auf einen PWM-Pin und stellen Sie die Dinge so ein, dass bei wiederholter Ausführung der Sequenz swapf PORTC,w,c / iorwf PORTA,w,c / movwf POSTINC0,cdie SD-Karte während jedes Takts getaktet wird movwf. Das richtige Timing für den Beginn und das Ende jedes Bursts zu finden, könnte schwierig sein (natürlich müssten Interrupts unbedingt deaktiviert werden), aber wahrscheinlich nicht unmöglich. Das Anvisieren einer Rate von einem Byte pro vier Zyklen könnte die Dinge vereinfachen.
Supercat
Das Hinzufügen einer CRC-Berechnung würde wahrscheinlich die Geschwindigkeit um etwa die Hälfte reduzieren (das Hinzufügen xorwf crc,w,c / movf PLUSW1,w,c / movwf crc,f,csollte zu einem Preis von 3 weiteren Zyklen / Byte funktionieren, wenn eine geeignete 256-Byte-Tabelle im RAM vorhanden ist; wenn man mit Byte-Paaren arbeitet, könnte man dies möglicherweise besser machen.
Supercat
6

Verbesserung des Durchsatzes im 1-Bit-Modus

Die Leistung von SD-Karte zu SD-Karte ist sehr unterschiedlich.

(a) Alle Karten geben eine "Besetzt" -Antwort auf einen Befehl, bis er bereit ist, den nächsten zu verarbeiten. Eine Karte kann den Standards auch dann noch entsprechen, wenn das Schreiben eines Datenblocks eine Sekunde dauert. Vielleicht könnten Sie ein paar verschiedene Karten ausprobieren und herausfinden, welche für Sie am besten geeignet ist - der beste Nettodurchsatz, die geringste Latenz, die geringste Energiemenge, um die Daten aufzuwecken und zu speichern und wieder einzuschlafen, oder was auch immer am meisten ist wichtig für Ihr Projekt. Wenn der Durchsatz am wichtigsten ist, sollten Sie die entsprechende Geschwindigkeitsklasse für SD-Karten auswählen - die höchste Geschwindigkeit, die Sie sich leisten können, oder zumindest die niedrigste Klasse, die eine angemessene Leistung bietet.

(b) Während der Standard verlangt, dass alle SD-Karten im 1-Bit-Modus Kommunikationen mit bis zu 25 Mbit / s verarbeiten, scheinen einige Karten mit viel höheren Bitraten zu funktionieren - vielleicht könnten Sie ein paar verschiedene Karten ausprobieren und die Daten erhöhen Ihre Bitrate auf etwas schnelleres, das mit dieser bestimmten Karte funktioniert. (Gibt es so etwas wie "automatische Baudratenerkennung", um automatisch die maximale Geschwindigkeit zu verwenden, die von der aktuell angeschlossenen Karte unterstützt wird?)

im 4-Pin-Modus

Ein Mikrocontroller kann die Verwendung des Vier-Bit-SDI-Übertragungsmodus unterstützen. Die 2 Optionen, die ich kenne, sind:

(a) Stecken Sie die Karte in einen USB-SD-Kartenadapter, der den Vier-Bit-SDI-Übertragungsmodus verwendet. Stecken Sie den Adapter in einen USB-Host-Anschluss, der an einen Mikrocontroller angeschlossen ist, der als USB-Host fungieren kann, z. B. den PIC24FJ32GB002.

(b) Stecken Sie die Karte in einen SD-Kartensteckplatz, der direkt an einen Mikrocontroller angeschlossen ist. Muss ich Lizenzgebühren an die SD-Karten-Benutzer zahlen, wenn mein Gerät „zufällig“ mit SD-Karten kompatibel ist? Verschiedene Patente und Geschäftsgeheimnisse erforderten lange Zeit, dass eine Person, die eine solche Host-Controller-Schnittstelle entwarf, eine NDA unterzeichnete und eine Patentlizenz von der SD Card Association kaufte. Aber ich höre, dass der SD-Schnittstellenstandard seit 2006 offener wird .

Davidcary
quelle