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

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

Antworten (2)

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 Synchronisierung und einer Befehlsleitung, die für das Senden von Befehlsrahmen verwendet wird. Das SD-1-Bit-Protokoll unterstützt ausdrücklich Bus-Sharing. Ein einfaches Single-Master-Arbitrierungsschema ermöglicht es mehreren SD-Karten, sich eine einzige Uhr und DAT0-Leitung zu teilen. Das SD-4-Bit-Protokoll ist nahezu identisch mit dem SD-1-Bit-Protokoll. Der Hauptunterschied besteht in der Busbreite. Massendatenübertragungen erfolgen über einen parallelen 4-Bit-Bus statt über eine einzelne Leitung. Bei richtigem Design hat dies das Potenzial, den Durchsatz für Massendatenübertragungen zu vervierfachen. Sowohl das 1-Bit- als auch das 4-Bit-SD-Protokoll erfordern standardmäßig einen CRC-Schutz für Massendatenübertragungen. Ein CRC oder Cyclic Redundancy Check, ist ein einfaches Verfahren 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 der 16-Bit-CRC wird unabhängig für jede der vier Leitungen berechnet. In einer reinen Softwareimplementierung kann die Berechnung des CRC unter diesen Bedingungen so komplex sein, dass der Rechenaufwand die Vorteile des breiteren 4-Bit-Busses mindern kann. Ein 4-Bit-Parallel-CRC ist jedoch trivial in Hardware zu implementieren, sodass kundenspezifische ASIC- oder programmierbare Logiklösungen eher von dem breiteren Bus profitieren. Das Berechnen des CRC unter diesen Bedingungen kann so komplex sein, dass der Rechenaufwand die Vorteile des breiteren 4-Bit-Busses mindern kann. Ein 4-Bit-Parallel-CRC ist jedoch trivial in Hardware zu implementieren, sodass kundenspezifische ASIC- oder programmierbare Logiklösungen eher von dem breiteren Bus profitieren. Das Berechnen des CRC unter diesen Bedingungen kann so komplex sein, dass der Rechenaufwand die Vorteile des breiteren 4-Bit-Busses mindern kann. Ein 4-Bit-Parallel-CRC ist jedoch trivial in Hardware zu implementieren, sodass kundenspezifische ASIC- oder programmierbare Logiklösungen eher von dem 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.

Einige der PIC24F-Serien haben 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.
Tatsächlich wird hier CRC-16 benötigt, daher sieht es viel besser aus.
Eine bit-banged Vier-Bit-SD-Schnittstelle wird nicht schneller sein 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: Ich denke, man könnte Lesevorgänge im 4-Bit-Modus ohne CRC ausführen, etwa dreimal so schnell wie SPI. Stecken Sie das Taktkabel auf einen PWM-Pin und stellen Sie die Dinge so ein, dass swapf PORTC,w,c / iorwf PORTA,w,c / movwf POSTINC0,cdie SD-Karte bei wiederholter Ausführung der Sequenz bei jedem 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 Ziel einer Rate von einem Byte pro vier Zyklen könnte die Dinge vereinfachen.
Das Hinzufügen einer CRC-Berechnung würde die Geschwindigkeit wahrscheinlich 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 zusätzlichen Zyklen / Byte funktionieren, wenn man eine geeignete 256-Byte-Tabelle im RAM hat; wenn man mit Bytepaaren arbeitet, könnte man es möglicherweise besser machen.

Verbesserung des Durchsatzes im 1-Bit-Modus

Es gibt große Leistungsunterschiede von SD-Karte zu SD-Karte.

(a) Alle Karten geben auf einen Befehl eine "Besetzt"-Antwort, bis sie bereit sind, den nächsten zu handhaben. Eine Karte kann immer noch den Standards entsprechen, selbst wenn das Schreiben eines Datenblocks eine Sekunde dauert. Vielleicht könnten Sie ein paar verschiedene Karten ausprobieren und sehen, welche für Sie am besten funktioniert – der beste Nettodurchsatz, die niedrigste Latenz, die geringste Energiemenge zum Aufwachen und Speichern der Daten und zum Wiedereinschlafen, oder was auch immer am meisten ist wichtig für Ihr Projekt. Wenn der Durchsatz am wichtigsten ist, sollten Sie die entsprechende SD-Karten-Geschwindigkeitsklassenbewertung 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 die Kommunikation mit bis zu 25 Mbit/s im 1-Bit-Modus verarbeiten, scheinen einige Karten mit viel höheren Bitraten zu funktionieren – vielleicht könnten Sie ein paar andere Karten ausprobieren und aufstocken 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 gerade eingesteckten Karte unterstützt wird?)

im 4-Pin-Modus

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

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

(b) Stecken Sie die Karte in einen SD-Kartensteckplatz, der direkt mit einem Mikrocontroller verbunden ist. Muss ich Lizenzgebühren an die Leute für SD-Karten zahlen, wenn mein Gerät „zufälligerweise“ mit SD-Karten kompatibel ist? Verschiedene Patente und Geschäftsgeheimnisse erforderten lange Zeit, dass eine Person, die eine solche Host-Controller-Schnittstelle entwickelt, eine Geheimhaltungsvereinbarung unterzeichnet und eine Patentlizenz von der SD Card Association kauft. Aber ich höre, dass der SD-Schnittstellenstandard seit 2006 offener wird .