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!
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
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.
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?
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.
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.
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.
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.
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)
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
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!
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.