SD-Karte binär auslesen

Gast #4400097
Vielleicht hatte schon mal jemand ein ähnliches Problem:
SD-Karten sind bei uns auf Baugruppen eingesetzt. Sie enthalten 
Konfigurationsdaten oder werden im Zusammenhang mit dem Sammeln von 
Daten (Datenlogger) benutzt.
Dabei werden die SD-Karten binär beschrieben - ohne Dateisystem. Sie 
werden also wie ein Flash-Speicher verwendet. Zum Beschreiben und 
Auslesen wird über SPI zugegriffen.
Es funktioniert soweit auch gut. Wenn allerdings die Daten über USB in 
einen PC eingelesen werden sollen, dann geht dies nur byteweise. Also in 
einer Schleife bei der pro Durchgang ein Byte gelesen wird. Das 
funktioniert sehr gut - ist aber langsam.
Ich habe versucht zwei Byte gleichzeitig auszulesen - also statt 8 
Taktzyklen des SPI-CLock 16 Taktzyklen verwendet. Auch 24 und 32 Zyklen 
habe ich bereits versucht. Allerdings kamen die Daten dann mit Lücken. 
Das erste Byte wird richtig gelesen, dann kommt ein Byte oder mehrere 
Bytes mit Nullen, dann kommt das zweite richtige Byte usw.
Bisher habe ich dafür keine Erklärung gefunden.
Eigentlich müsse es möglich sein mehrere Bytes auf einmal auszulesen. 
Nur dann kann man auch die üblichen Datendurchsätze erreichen.
Hat vielleicht schon jemand dieses Problem gehabt und gelöst?
Viele Grüße
Franz Peter Zantis
Franz Peter Zantis schrieb:
> Es funktioniert soweit auch gut. Wenn allerdings die Daten über USB in
> einen PC eingelesen werden sollen, dann geht dies nur byteweise. Also in
> einer Schleife bei der pro Durchgang ein Byte gelesen wird. Das
> funktioniert sehr gut - ist aber langsam.
> Ich habe versucht zwei Byte gleichzeitig auszulesen - also statt 8
> Taktzyklen des SPI-CLock 16 Taktzyklen verwendet. Auch 24 und 32 Zyklen
> habe ich bereits versucht.

Das verstehe ich nicht. Wenn du sie auf dem PC "über USB" einliest, was 
hast du dann mit irgendwelchen SPI-Clocks am Hut?
Franz Peter Zantis schrieb:
> Es funktioniert soweit auch gut. Wenn allerdings die Daten über USB in
> einen PC eingelesen werden sollen, dann geht dies nur byteweise. Also in
> einer Schleife bei der pro Durchgang ein Byte gelesen wird. Das
> funktioniert sehr gut - ist aber langsam.

Was ist langsam? USB 1.1 Full Speed erlaubt netto ca. 1,0 MByte/sec.
Das habe ich IIRC aber nur mit >= 48 MHz Basistakt der CPU geschafft.

Franz Peter Zantis schrieb:
> Ich habe versucht zwei Byte gleichzeitig auszulesen - also statt 8
> Taktzyklen des SPI-CLock 16 Taktzyklen verwendet. Auch 24 und 32 Zyklen
> habe ich bereits versucht. Allerdings kamen die Daten dann mit Lücken.
> Das erste Byte wird richtig gelesen, dann kommt ein Byte oder mehrere
> Bytes mit Nullen, dann kommt das zweite richtige Byte usw.
> Bisher habe ich dafür keine Erklärung gefunden.

Eventuell falsche Byte Order. In meinen 16Bit SD SPI Routinen für Cortex 
M3 (Little Endian) ist jeweils ein Rev16 drin, dass die Byte Reihenfolge 
auf Big Endian tauscht. Schau Dir mal die Bytes genau an, das könnte 
auch Dein Problem sein. SPI sendet das MSB zuerst und ist damit bei 
Transfers >1 Byte immer Big Endian.
Persönliche Seite
Franz Peter Zantis schrieb:
> Eigentlich müsse es möglich sein mehrere Bytes auf einmal auszulesen.
> Nur dann kann man auch die üblichen Datendurchsätze erreichen.
> Hat vielleicht schon jemand dieses Problem gehabt und gelöst?

Du möchtest jetzt einfach deine SD-Karte am PC auslesen?
Wenn ja, dann lese deine SD-Karte mit dd aus.

Wenn du die Daten vom Controller auslesen möchtest und sie dann per µC 
über USB an den PC senden möchtest, dann lese 512Byte (immer ein Sektor) 
aus der SD-Karte aus und schicke die Daten dann an den PC.
Mit den Xmega kann man glaube ich 512Byte in einem Paket versenden, aber 
man kann ja auch in mehrere Pakete spliten und versenden.
Da gibt es extra so ein Mass-Storage-Option für die USB-Kommunikation.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.