Forum: Mikrocontroller und Digitale Elektronik USB vs. SD Card an Microcontroller


von Asker (Gast)


Lesenswert?

Hallo,

ich fange neu mit der Programmierung von Microcontrollern an, kenne mich 
mit C und C++-Bereich aber schon sehr gut aus.
Nun möchte ich auch die Möglichkeit haben, Daten extern zu speichern.
Meine Frage: soll ich dafür lieber USB-Sticks oder SD Cards nehmen? Daa 
Dateisystem ist erst einmal zweitrangig, ich würde aber gerne FAT32 
verwenden.
Ist das mit akzeptablem Aufwand machbar? Und gibt es ansonsten bessere 
Lösungen?

Wenn ihr eine der beiden angedachten Speichermedien bevorzugt, könnt ihr 
mir dann nach Möglichkeit bitte auch noch sagen, wie man das konkret am 
besten verwendet? Die Lösung soll letztendlich auf eine 
Lochrasterplatine aufgelötet werden. Es reicht vermutlich nicht, einfach 
die vier Pins einer USB-Buchse mit VCC, GND und zwei I/O-Ports zu 
verbinden und mithilfe von C eine Datei zu erstellen, oder? Wenn doch, 
was ist der Pfad?
Nach dem, was ich bisher gelesen habe, muss ich einen Host-Controller 
einbauen. Hat da jemand ein Beispiel, den man auch auflöten kann?
Ich möchte den Microcontroller auch nicht direkt mit einem PC verbinden. 
Deswegen sind Device-Controller wohl für meine Zwecke nicht zu 
gebrauchen.

Auf jeden Fall danke schon einmal im Voraus!

von Sebastian V. (sebi_s)


Lesenswert?

Wie du schon richtig erkannt hast brauchst du einen Mikrocontroller der 
als USB Host arbeiten kann, wenn du einen USB Stick benutzen möchtest. 
Mir scheint daher der Weg über SD Karten einfacher, denn SD Karten 
unterstützen einen SPI Modus und SPI hat nun wirklich jeder 
Mikrocontroller. Wenn es schnell werden soll haben einige ARM 
Mikrocontroller auch ein SDIO Interface. Zum ansprechen bietet sich die 
FatFs Bibliothek (http://elm-chan.org/fsw/ff/00index_e.html) an. Da hast 
du dann auch dein gewünschtes FAT Dateisystem. Hier im Wiki sind auch 
noch einige vermutlich hilfreiche Links: 
https://www.mikrocontroller.net/articles/MMC-_und_SD-Karten

von Hmm (Gast)


Lesenswert?

Meine Empfehlung ist klar die SD-Karte.

Hierfür gibt es folgendes:
http://www.elm-chan.org/fsw/ff/00index_e.html

Eigentlich ist das ja eine Unterstützung für FAT32, aber da ist das 
SD-Karten-Handling mit dabei.

Hardwaremässig hat die SD-Karte den riesigen Vorteil, dass sie nur eine 
SPI-Schnittstelle benötigt, und die ist sehr gängig. USB-Host nicht.

µSD-Slots sind dazu recht klein. Ich nehm gern den:
https://eu.mouser.com/ProductDetail/Hirose-Connector/DM3D-SF/?qs=nSryOFbzj8L3f0GFYlvXkw==
Der ist in Eagle und KICAD schon drin.

von Asker (Gast)


Lesenswert?

Danke schon einmal für die schnelle Antwort.
Das Problem ist, dass ich irgendwie absolut keinen SD Card Reader zum 
Auflöten finde. Hast du da einen Link für mich, bevorzugt bei reichelt?
Externe libs lassen sich dabei wohl auch nicht vermeiden, oder?

Ich habe bereits einen ATmega8A da. Die ARMs sind aber auch insgesamt 
für meinen Geschmack zu teuer. Dafür zerlege ich die Dinger zu oft. Gibt 
es sonst einen IC, um den ATmega8A entsprechend um USB zu erweitern? 
Weshalb kann man denn nicht einfach den USB-Slot verbinden und mit 
Softwarelösungen (dafür gibt es doch mit Sicherheit libs) den USB-Stick 
ansteuern?

von avr (Gast)


Lesenswert?

Asker schrieb:
> Das Problem ist, dass ich irgendwie absolut keinen SD Card Reader zum
> Auflöten finde.

Die SD-Karte bietet SPI und SDIO als Schnittstelle an. Beide können von 
Mikrocontrollern bedient werden. Bei SDIO sollte diese aber auch 
hardwareseitig unterstützt werden. Ein SD-Card-Reader ist auch nur ein 
SDIO<->USB Umsetzer.

Asker schrieb:
> Weshalb kann man denn nicht einfach den USB-Slot verbinden und mit
> Softwarelösungen (dafür gibt es doch mit Sicherheit libs) den USB-Stick
> ansteuern?

USB Fullspeed (brauchst du für einen USB-Stick) arbeitet mit 12 MHz. Das 
macht man nicht per Software und ein AVR schafft das auch nicht einmal 
ansatzweise.

Schau dir am besten FatFS an und versuche das zum Laufen zu bringen. Das 
ist um Längen einfacher als ein USB-Host.

von Sebastian V. (sebi_s)


Lesenswert?

Asker schrieb:
> Das Problem ist, dass ich irgendwie absolut keinen SD Card Reader zum
> Auflöten finde. Hast du da einen Link für mich, bevorzugt bei reichelt?

Bei Reichelt gibts schon ein paar: 
https://www.reichelt.de/Connectoren-fuer-Speicherkarten/2/index.html?ACTION=2&LA=2&GROUPID=7432

Allerdings sind die nicht wirklich optimal zum auflöten auf Lochraster. 
Alternativ kann man sich auch selbst aus Stiftleisten was basteln oder 
ein Breakout Board kaufen:

http://www.instructables.com/id/Cheap-DIY-SD-card-breadboard-socket/
https://eckstein-shop.de/Adafruit-MicroSD-card-breakout-board-

Das Breakout Board ist jetzt MicroSD, hat aber immerhin einen 
Pegelwandler drauf. Man findet im Internet aber auch noch einen Haufen 
ähnlicher Adapter.

von Harald (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

Quick and Dirty: Man kann SD Karten zwischen die Stifte einer 
zweireihigen Stiftleiste klemmen.

Ansonsten sind diese SD Kartenslots auch Breadboard und Lochraster 
tauglich: 
https://www.roboter-bausatz.de/media/image/b7/b9/fe/Micro-SD-Card-Adapter-Arduino.jpg

Es gibt übrigens SD Karten, die auf der anderen Seite einen USB 
Anschluss haben.

von Sebastian V. (sebi_s)


Lesenswert?

Asker schrieb:
> Externe libs lassen sich dabei wohl auch nicht vermeiden, oder?

Wenn man alles selbst schreibt kann man das schon vermeiden aber eine 
Library zum einlesen eines FAT Dateisystems ist mal nicht an einem 
Nachmittag geschrieben.

Asker schrieb:
> Ich habe bereits einen ATmega8A da.

Der dürfte schon recht knapp sein mit seinen 8KB Flash. Die Variante von 
der FatFS Library für kleine 8Bit Mikrocontroller spricht von 2K-4K 
Flash bedarf. Je nachdem was du da sonst noch an Code drauf hast sind 
die 8KB schnell voll.

Asker schrieb:
> Die ARMs sind aber auch insgesamt für meinen Geschmack zu teuer.

Was heißt denn zu teuer? Einen STM32f103c8t6 Beispielsweise kriegt man 
bei Reichelt für 3,50€, in China sogar für 1,50€ das Stück. Das Problem 
ist wohl eher, dass es die meist nur als SMD Variante gibt.

von c-hater (Gast)


Lesenswert?

Sebastian V. schrieb:

> Bei Reichelt gibts schon ein paar:
> 
https://www.reichelt.de/Connectoren-fuer-Speicherkarten/2/index.html?ACTION=2&LA=2&GROUPID=7432
>
> Allerdings sind die nicht wirklich optimal zum auflöten auf Lochraster.

Diese hier von Pollin hingegen sind dafür sehr gut geeignet, (fast) wie 
extra dafür gemacht:

https://www.pollin.de/p/sd-speicherkarten-sockel-attend-104h-tda0-r-451147

Man muss nur die beiden Bohrungen, wo die Fixierungsnasen reinkommen, 
etwas aufbohren und den Sockel ganz minimal abweichend von der 90°-Lage 
reinsetzen, dann liegen alle Kontakte sauber über Kupfer. Natürlich 
jeder über "eigenem". ;o)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Der Einsatz einer SD Card wurde ja hier schon empfohlen. Für den Einsatz 
eines USB Sticks an einem Mikrocontroller eignet sich ein VNC2 [1] sehr 
gut. Für diesen IC gibt es diverse Beispiele wie u.a. SPI to USB Memory 
Sample Application ROM [2]


[1] http://www.ftdichip.com/Products/ICs/VNC2.htm
[2] http://www.ftdichip.com/Firmware/Precompiled.htm

von nixundnul (Gast)


Lesenswert?

zum Basteln kann man auch einen Adapter SD zu Micro_SD direkt einlöten 
und dann die Micro_SD karte tauschen wie man will.
libs gibt es einige, erste Testläufe habe ich an einem Feierabend 
hinbekommen. Ist aber schon eine Weile her.
Aufpassen ist: Das ganze gilt nur für SD-Karten bis max. 2GB Größe. Die 
anderen heißen SDHC undsoweiter. Da ist der Anschluß hardwareseitig 
anders, das geht so also nicht!

von Volker S. (vloki)


Lesenswert?

Asker schrieb:
> Nun möchte ich auch die Möglichkeit haben, Daten extern zu speichern.

Das solltest du etwas genauer beschreiben. Wenn du z.B. kontinuierlich 
Daten erfasst und die dann auf die SD Karte schreiben willst, dann musst 
du wissen, dass diese Karten Auszeiten von bis zu 500ms nehmen können, 
in denen du nicht schreiben kannst und die Daten zwischenspeichern 
musst.
Bei einigermaßen hohen Datenanfall und 8-Bit Controllern mit doch eher 
kleinem RAM kann das schnell mal zum Problem werden. (Ging mir gerade so 
mit ~11kB Daten/s und etwas weniger als 4kB RAM)

von Jim M. (turboj)


Lesenswert?

nixundnul schrieb:
> Aufpassen ist: Das ganze gilt nur für SD-Karten bis max. 2GB Größe. Die
> anderen heißen SDHC undsoweiter. Da ist der Anschluß hardwareseitig
> anders, das geht so also nicht!

Nö der ist gleich, zumindest bei SPI. Die Unterschiede sind "nur" in 
Software. D.h. man nimmt (oder portiert) das neueset Chan FATFS und hat 
SDXC Support.

Allerdings ist der SPI Modus bei MicroSDHC/MicroSDXC optional, ich habe 
hier aber noch keine Karte ohne SPI Mode gesehen. Dafür allerdings 
Karten mit Bedenkzeiten von ca. 1 Sekunde, aber das mit dem großen 
Puffer im RAM haben ja schon andere hier angesprochen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.