SD über USB auslesen

Guten Tag,

für ein Projekt versuche ich folgendes zu erreichen:

  • Analoge / digitale Signale und einen 16Bit AD Wandler über einen Arduino Mega auslesen,
  • Werte auf einer SD speichern und
  • SD über USB auslesen.

Dabei soll der USB-Anschluss nicht der Programmierport vom Arduino-Board sein.

Mein Problem:
Wie lese ich die SD-Karte über USB aus und lasse sie auf einem Rechner als Massenspeicher anzeigen?

Was ich bereits versucht hatte:
Parallel zur SD-Karte einen USB-Kartenleser löten, hat aber hunderte andere Probleme aufgebracht. (Daher die Frage ob es eine simple, allgemeine oder schon vorgefertigte Lösung gibt?)

Vielen Dank schon einmal im Voraus, ich bin für jede Hilfe sehr dankbar!

Cheers Serthy

Wie lese ich die SD-Karte über USB aus und lasse sie auf einem Rechner als Massenspeicher anzeigen?

Gar nicht :wink:

Wenn du einen Arduino Uno oder Mega an USB anschliesst und den richtigen Treiber installiert hast, siehst du einen Arduino (eine Serielle Schnittstelle), aber keinen Massenspeicher oder Netzwerk-Controller oder was ihr euch sonst so vorstellen könnt :wink:
Nachtrag: Ein Leonardo kann wie eine Tastatur/Maus aussehen, aber das ist nicht das was du willst.

Am einfachsten die SD Karte rausnehmen und in den Kartenleser stecken... :wink:

Lade die Datei von der SD-Karte doch per Serial, FTP oder BT auf Deinen PC - da kannst Du die dann einfach einlesen, zerlegen und auswerten.

Aber erwarte nicht daß einige MByte so schnell mal in einigen Sekunden übertragen sind. Das braucht vieeeel länger.
Grüße Uwe

Joa, schnell is' nich' :smiley:

Erst einmal vielen Dank für die sehr schnellen Antworten :slight_smile:

Ich will erreichen das man die SD Karte NICHT ausstöpselt (oder nur wenn keine andere Möglichkeit besteht)
über den Arduino-USB ausliest (das Teil ist eine Art Datenlogger für den Außeneinsatz,
und als Schnittstelle habe ich nur eine spritzwassergeschützte USB-Buchse).
Außerdem MUSS es am Ende so sein, das ich die Textdateien (ich schätze ca. 1MB klein), auf der SD-Karte mit den meisten normalen PC's öffnen kann,
ohne das eine Software installiert sein muss. Deshalb wäre es passend wenn die SD-Karte als Massenspeicher automatisch erkannt wird beim Verbinden.

Ich habe leider noch nicht so viel Erfahrung mit den ganzen Boards, gibt es denn ein Shield für Arduino, was genau das macht? Z.B. das USB-Host-Shield?

Mit Arduino geht das nicht. Die SD-Karte KANN NICHT als Laufwerk vom PC gesehen werden.

Was ist eigentlich in diesen billigen USB Card Readern ( Ab ca 1 US-$ aus China ) drin?

Parallel zur SD-Karte einen USB-Kartenleser löten, hat aber hunderte andere Probleme aufgebracht.

Glaub ich dir :wink:

Eine vorhandene Datei Seriell an den PC zu übertragen, braucht auf PC Seite passende Software und ca. 10 kB/sec ist nicht sehr schnell, heutzutage.
Das Ethernet Shield und ftp Software einbauen ???

Da ist -für mich- "umstöpseln" die einfachere Lösung...

Was ist eigentlich in diesen billigen USB Card Readern ( Ab ca 1 US-$ aus China ) drin?

Billigste USB<->RS232 o.ä. $) - funktionieren aber problemlos :slight_smile:

Den reinen EURO-Preis kannst Du geldlich nicht mit "uns" vergleichen - bei den Chinesigen verdient ein Werker pro Monat 200 EUR - und wenn der VK hier dran 30 Cent netto verdient ist das für den ein ausreichend gutes Geschäft.

Bei "uns" muss ja bei manchen Verkäufern jeder Verkauf gleich die Miete rein bringen :fearful:

Da ist -für mich- "umstöpseln" die einfachere Lösung...

Ja, einfach wäre es, nur leider nicht was ich suche.
Wenn es einfach wäre, wär es ja langweilig :wink:

Zur Zeit habe ich die SD über zwei 6-Kanal Multiplexer mit dem Kartenleser und dem Arduino verbunden
(entweder Arduino beschreibt die SD oder man liest per Kartenleser von ihr, gleichzeitig geht beides nicht, was auch nicht muss)
Jedoch gibt es da auch wieder hunderte Probleme, viel zu viel um sie zu beschreiben.. Ich versuch es mal kurz zusammenzufassen: theoretisch sollte es gehen, die Spannungen sehen zuversichtlich aus, auch auf einem Oszi scheint es OK zu sein, es funktioniert halt nicht. Getrennt alle Systeme (Kartenleser + SD oder SD + Arduino) gehen einwandfrei.

Du kannst nicht 2 Geräte die unabhängig voneinander und ohne rücksicht auf die SD zugreifen wollen. Du DARFST nicht 2 Ausgänge ( vom Arduino und vom Kartenleser) Paralellschalten.
Du könntest über Analogmultiplexer oder Buffer die Signale mal mit dem Arduino und mal mit dem Kartenleser verbinden aber ich weiß nicht ob der Multiplexer für die Signalfrequenz des Kartenlesers geeignet ist.
Grüße Uwe

Ja genau - die funken sich dann gegenseitig in die Signale.
Deshalb darf man nicht beides gleichzeitig in Benutzung haben:
ENTWEDER der Arduino ist an, loggt und schreibt auf die SD,
ODER der Arduino ist aus, und man greift nur mit dem PC über den Kartenleser auf die SD.
Um beide Zugriffe zu managen sind 2 Multiplexer dazwischen, die auf den 5V High-Pegel des USB-Kartenlesers reagieren.
Außerdem soll vom Benutzer von außen sichergestellt sein, das nur ein Zugriff gleichzeitig stattfindet (Arduino ODER PC).

Wie schon geschrieben, klappt soweit theoretisch ganz gut (Spannungen und Signale sehen normal im Vergleich zu einer einzelnen SD-Karte aus, nur funktioniert es halt nicht, was bedeutet entweder wird die Karte nicht im Pc erkannt oder man kann nicht auf sie schreiben)

Gibt es eine Möglichkeit die SD-Karte komplett wegzulassen und beispielsweise durch einen USB-Stick zu ersetzen, der dann über ein HUB entweder mit dem PC oder mit dem Arduino verbunden ist?
Gibt es eine Möglichkeit einen USB-Stick ähnlich einer SD-Karte zu beschreiben?

serthy:
Gibt es eine Möglichkeit einen USB-Stick ähnlich einer SD-Karte zu beschreiben?

Das müßte über das USB-Host-Shield möglich sein. Siehe Meldung:
http://www.circuitsathome.com/mcu/mass-storage-support-for-usb-host-library-2-0-released
Unterstützung aber wohl nur für die "dicken" Arduino-Boards mit viel RAM wie "MEGA2560".

A.R.Ty:

Was ist eigentlich in diesen billigen USB Card Readern ( Ab ca 1 US-$ aus China ) drin?

Billigste USB<->RS232 o.ä. $) - funktionieren aber problemlos :slight_smile:

Den reinen EURO-Preis kannst Du geldlich nicht mit "uns" vergleichen - bei den Chinesigen verdient ein Werker pro Monat 200 EUR - und wenn der VK hier dran 30 Cent netto verdient ist das für den ein ausreichend gutes Geschäft.

Bei "uns" muss ja bei manchen Verkäufern jeder Verkauf gleich die Miete rein bringen :fearful:

Da hast du mich falsch verstanden. Ein USB Card Reader für 1 USD aus China funktioniert vermutlich, und den gleichen hier bei ebay mit 3 Tagen Lieferzeit, Widerrufsbelehrung und 14tägigem deutschen Rückgaberecht für 2,50 EUR incl. Versand ist voll in Ordnung. Selbst dass pearl 3,90 + 4,90 Versand haben will, was solls.

Meine Frage war: Was ist da technisch drin, und wie kann man das hacken, damit man mit einem Arduino was davon hat ...
Spielt so ein Card Reader Adapter eigentlich überhaupt SPI Master, wie ein Arduino ?

serthy:
Ja genau - die funken sich dann gegenseitig in die Signale.
Deshalb darf man nicht beides gleichzeitig in Benutzung haben:
ENTWEDER der Arduino ist an, loggt und schreibt auf die SD,
ODER der Arduino ist aus, und man greift nur mit dem PC über den Kartenleser auf die SD.
Um beide Zugriffe zu managen sind 2 Multiplexer dazwischen, die auf den 5V High-Pegel des USB-Kartenlesers reagieren.
Außerdem soll vom Benutzer von außen sichergestellt sein, das nur ein Zugriff gleichzeitig stattfindet (Arduino ODER PC).

Wie schon geschrieben, klappt soweit theoretisch ganz gut (Spannungen und Signale sehen normal im Vergleich zu einer einzelnen SD-Karte aus, nur funktioniert es halt nicht, was bedeutet entweder wird die Karte nicht im Pc erkannt oder man kann nicht auf sie schreiben)

Gibt es eine Möglichkeit die SD-Karte komplett wegzulassen und beispielsweise durch einen USB-Stick zu ersetzen, der dann über ein HUB entweder mit dem PC oder mit dem Arduino verbunden ist?
Gibt es eine Möglichkeit einen USB-Stick ähnlich einer SD-Karte zu beschreiben?

USB Stick oder Sd-Karte ist kein Unterschied. Die müssen beide entfernt werden um sie auszulesen, wobei ich nicht sicher bin ob Du einen USB-Stick per Arduino beschreiben kannst. Ich habs noch nie gesehen.

Die SD-Karte funktioniert mit 3,3V nicht 5V.

Grüße Uwe

uwefed:
Die SD-Karte funktioniert mit 3,3V nicht 5V.

Ja genau, das hab ich schon berücksichtigt :slight_smile:

michael_x:
Meine Frage war: Was ist da technisch drin, und wie kann man das hacken, damit man mit einem Arduino was davon hat ...
Spielt so ein Card Reader Adapter eigentlich überhaupt SPI Master, wie ein Arduino ?

Gute Frage... deshalb der Umweg über einen Multiplexer der je nach Aktivität des Kartenlesers schaltet (5V), nur schade das es (für mich unerklärlicherweise) nicht funktioniert..

Ich hab schon einmal grob über das USB Host Shield geschaut, sieht gut aus, muss aber noch einmal alles genauer durchlesen.
Vielen dank für den Tipp!

michael_x:
Meine Frage war: Was ist da technisch drin, und wie kann man das hacken, damit man mit einem Arduino was davon hat ...
Spielt so ein Card Reader Adapter eigentlich überhaupt SPI Master, wie ein Arduino ?

SD-Karten bieten zwei komplett unterschiedliche Bus-Systeme an, mit unterschiedlichen Geschwindigkeiten und Möglichkeiten. Je nach Initialisierung läuft eine SD-Karte entweder im:

  • SPI Modus
    oder
  • SD Bus Modus

Kartenleser steuern SD-Karten natürlich im SD Bus Modus an, sonst würden die ja nur auf dieselben niedrigen Datenraten kommen (z.B. Lesen max. weniger als 300 kB/s) wie ein Arduino im SPI-Modus.

Im SPI Modus stehen nur extrem eingeschränkte Möglichkeiten zur Verfügung, im wesentlichen gibt es nur die zwei Funktionen "Sektor lesen" und "Sektor schreiben". Und die Datenrate ist schnarchlangsam.

Im nativen SD Bus Modus stehen alle Möglichkeiten zur Verfügung, da hierbei nicht nur Bits hin- und hergeschoben werden, sondern "Befehle" in einem proprietären Befehlsformat über den Bus ausgetauscht werden. Nur im nativen SD Bus Modus ist der Betrieb als "Mass Storage Device" möglich.

serthy:
Ich hab schon einmal grob über das USB Host Shield geschaut, sieht gut aus, muss aber noch einmal alles genauer durchlesen.

Nur hast Du damit - wie Michael schon schrieb - qualitativ nichts gewonnen. Der einzige Unterschied ist, dass Du statt eine SD-Karte aus dem Arduino zu entfernen, um sie am PC einzustecken und auszulesen, dann einen USB-Stick aus dem Arduino entfernst, um ihn am PC einzustecken und auszulesen. Vom Prinzip her ist das kein Unterschied, nur vom Steckplatz her.

Der einzige Unterschied ist, dass Du statt eine SD-Karte aus dem Arduino zu entfernen, um sie am PC einzustecken und auszulesen, dann einen USB-Stick aus dem Arduino entfernst, um ihn am PC einzustecken und auszulesen

Ist das aber nicht genau das was ich suche? Ein Hub dazwischen und dann über ein Kabel auslesen - wenn das möglich ist?!

Meines Wissens kann man nicht 2 Hosts an einen Hub anchließen.
Grüße Uwe