Forum: Mikrocontroller und Digitale Elektronik Für Datenlogger: uC soll Dateisystem per USB bereitstellen


von Bierschinken (Gast)


Lesenswert?

Guten Tag,
ich möchte einen Datenlogger bauen, welcher zum Auslesen direkt an die 
USB-Schnittstelle des PC angeschlossen werden soll. Er soll sich als 
USB-Stick ausgeben, auf dem eine .txt-Datei mit den geloggten Daten 
liegt. Das loggen der Daten bekomme ich hin. Ich bin auf der Suche nach 
einem geeigneten Controller, welche möglichst viel von den benötigten 
USB-Funktionen schon mitbringt. Leider weiß ich nicht genau, welches die 
Stichworte sind, nach denen ich suchen muss, daher meine Bitte an euch, 
dass ihr mir sagt, mit welcher Funktion ich sowas realisieren kann.

Bisher habe ich AVR (Atmega328P, Atmega128A) und STM32L152 programmiert 
und für beide auch die ISP-Programmer hier. Daher wäre es gut, wenn es 
etwas aus einer kompatiblen Familie wäre.

Danke & Gruß!
Georg

von Pandur S. (jetztnicht)


Lesenswert?

Soweit ich weiss eher nicht. Das Massenspeicherinterface auf USB wird 
bei den Controllern USB-OTG (on the go) genannt. Also nach diesem 
Kuerzel beiden CPUs schauen. Es gibt einige PIC die das koennen. Das ist 
im Wesentlichen ein Satz faehiger Pins, und eine Library, die zugelinkt 
wird.

von Olaf (Gast)


Lesenswert?

Renesas hat das mal bei einem M16C gezeigt. Der hat sich bei anstecken 
als USB-Stick mit 10kB internem Speicher gemeldet.

Olaf

von Tux (Gast)


Lesenswert?

Oh D. schrieb:
> Soweit ich weiss eher nicht. Das Massenspeicherinterface auf USB wird
> bei den Controllern USB-OTG (on the go) genannt.

Nö. OTG bedeutet dass das Gerät als Master sowie als Slave fungieren 
kann und hat nichts mit der gesuchten funktion zu tun.

Was der TO sucht ist ein beliebiger Controller mit USB-Schnittstelle + 
eine passende Bibliothek. AtMega16/32U... kommt mir da in den Sinn.

von Karl (Gast)


Lesenswert?

STM32 können das (fast?) alle. Du willst ja nicht auf einem stick 
speichern, sondern dass sich dein Logger als Stick meldet.

Je nach Geschwindigkeitsanforderungen brauchst einen F2, F4 oder F7 für 
High-Speed. Sonst geht jeder.

NXP haben die dafür nötige SW in einem ROM.
NXP und Atmel haben welche mit integriertem High-Speed Phy, falls von 
interesse.

von Tux (Gast)


Lesenswert?

AVR273: USB Mass Storage Implementation on megaAVR with USB

... könnte interessant sein.

von Bierschinken (Gast)


Lesenswert?

Hallo,
um es nochmal deutlicher zu machen: Die Funktion soll ähnlich wie diesem 
Teil sein: 
http://www.atp-messtechnik.de/product/USB-Datenlogger-fuer-Temperatur/5005-0170.html
Also nach der Loggingphase soll sich das Gerät als Massenspeicher am 
USB-Port melden und mir eine Datei präsentieren (im Beispiel PDF, mir 
reicht txt mit CSV-Werten). Alles andere kommt später (Dem Ding die 
Uhrzeit mitteilen etc.).

VG
Georg

von Jim M. (turboj)


Lesenswert?

Bierschinken schrieb:
> Bisher habe ich AVR (Atmega328P, Atmega128A) und STM32L152 programmiert

Von den Atmegas gibts auch welche mit USB, und der STM32 hat IMO bereits 
USB.
V-USB geht nicht als Mass Storage - und wäre auch sehr lahm.

Aber: Ich würde Dir eher zu einer SDHC Karte raten.
Die genannten µCs können alle höchstens USB Full Speed,
da ist jeder SDHC Kartenleser schneller - die können alle mindestens 
High Speed.

SDHC Karten können relativ leicht über SPI angesprochen werden, oftmals 
gibt es fertigen Beispielcode.

von Bierschinken (Gast)


Lesenswert?

Hallo,
da kommen nicht viele Megabytes zusammen, Geschwindigkeit ist somit fast 
egal. Nutzerkomfort ist wesentlich wichtiger. Und der ist mit dem 
einfachen Anstecken eines Massenspeichers, auf dem dann die Daten liegen 
halt höher als das raus und reinprökeln einer SD-Karte, für die sowieso 
nicht an jedem PC ein Lesegerät vorhanden ist.


VG
Georg

von Dr. Sommer (Gast)


Lesenswert?

Jim M. schrieb:
> Die genannten µCs können alle höchstens USB Full Speed,
Nö, die dicken STM32 können auch High-Speed, externen "ULPI" Transceiver 
vorausgesetzt.

Für die STM32 gibt es auch Beispiele, wie man mit dem Hardware-USB ein 
Mass Storage Device programmiert. Von V-USB ist eher abzuraten, warum 
sollte man sich die Mühe mit so einer Popelei machen wenn man auch 
richtiges Hardware-USB nutzen kann?
Das Problem ist im Endeffekt das Dateisystem - willst du das komplette 
Dateisystem (z.B. FAT32) mit auf deinen Datenträger speichern, oder soll 
das beim Auslesen emuliert werden? Alternativ kann man MTP nutzen, dann 
verhält sich das wie ein neueres Android-Handy - man kann per Explorer 
zugreifen ohne Treiberinstallation, aber du brauchst kein Dateisystem.

von Bierschinken (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Das Problem ist im Endeffekt das Dateisystem - willst du das komplette
> Dateisystem (z.B. FAT32) mit auf deinen Datenträger speichern, oder soll
> das beim Auslesen emuliert werden?

Das weiß ich noch nicht. Derzeit speichere ich die Messwerte auf einem 
per SPI angeschlossenen EEPROM. Das funktioniert soweit (ist ja auch 
keine Kunst). Sensoransteuerung, Auswertung & Speicherung sind fertig 
(auf einem atmega328P). Der Sensor ist relativ komplex, daher habe ich 
das zu erst gebaut. Das ganze soll im "Nicht-USB-Modus" natürlich auch 
wenig Strom verbrauchen. Daher legt sich der AVR momentan schlafen und 
wartet auf einen Interrupt. Dieser wird von der analogen Schaltung (der 
Sensor ist etwas mehr als nur ein i2c-Bauteil...) generiert. Dann wacht 
der AVR auf und ließt vier ADC-Eingänge ein. Das liegt jetzt alles in 
einem selbst erdachten Format im EEPROM. Vielleicht bin ich mit meinem 
Lösungsweg auch ganz falsch... Aber da es diese Geräte ja zu Hauf zu 
kaufen gibt, bin ich nicht der erste, der sowas bauen will, irgendwie 
wird es ja elegant gehen. Diese Temp-Logger haben nicht sehr viele 
Messpunkte, meist so um die 32k, daher haben die auch keinen GB-Flash 
verbaut, denke ich.

So richtig einen Plan habe ich von dem möglichen Lösungsweg noch nicht. 
Daher schreiben die meisten Leute wohl auch auf SD-Karten... :-)

VG
Georg

von Dr. Sommer (Gast)


Lesenswert?

Bierschinken schrieb:
> Daher schreiben die meisten Leute wohl auch auf SD-Karten... :-)
Nicht ohne Grund - die Teile haben riesige Kapazitäten, sind winzig, 
leicht austauschbar (z.B. wenn der Flash abgenutzt ist), und an jeder 
Ecke kaufbar. Auf einer SD-Karte kannst (und solltest) du ja problemlos 
ein Dateisystem nutzen. Dank Libraries wie FatFs ist das schreiben kein 
großes Problem, und den Zugriff darauf lässt sich auch per USB Mass 
Storage Class bewerkstelligen. Der User muss ja gar nicht sehen, dass da 
eine SD-Karte eingebaut ist, sofern er sie nicht tauschen möchte.
Der Nachteil wird hier für dich sein, dass SD-Karten nicht gerade 
energie-sparsam sind. Aber man kann die natürlich abschalten solange 
keine neuen Daten anliegen.

von dumdum (Gast)


Lesenswert?

Schau dir mal die MBED an. Einfacher gehts kaum.

https://developer.mbed.org/handbook/LocalFileSystem

Ein NUCLEO-F303K8 liegt unter 10 Euro.

http://www.mouser.de/ProductDetail/STMicroelectronics/NUCLEO-F303K8/?qs=%2fha2pyFaduj0LE%252bzmDN2WEfD4jjhPqalHeHSOUpHh23T5GNnpBTASg%3d%3d

Damit hast du ein Enticklungssystem das so klein ist das du es dann auch 
gleich direkt verbauen kannt.

von c-hater (Gast)


Lesenswert?

Bierschinken schrieb:

> So richtig einen Plan habe ich von dem möglichen Lösungsweg noch nicht.

Warum? Dir wurden zwei gangbare Wege präsentiert:

1) MTP
2) Storage (das in zwei Varianten:)
   a) Exponierung eines physisch vorhandenen Filesystems
   b) Emulation eines virtuellen Filesystems

wobei 2)a) für dich nicht in Frage kommt, weil du nach eigener Aussage 
auf dem "Massenspeicher" etwas selbstgefrickeltes verwendest.

Was also bleibt, ist:
- Du brauchst ein USB-Interface mit mindestens FullSpeed, weil die
  entsprechenden USB-Klassen genau dies erfordern, weil sie Burst-
  Transfers erfordern. Damit scheidet der Mega328 aus. Der hat kein 
echtes
  USB-Interface und kann mittels V-USB maximal LowSpeed und damit darf 
er
  eben keine Burst-Transfers machen. Heutige Betriebssysteme legen da 
auch
  tatsächlich Wert drauf. Allerdings nur deshalb, weil der Standard es 
so
  fordert, einen echten physikalischen Grund für diese Kastration gibt 
es
  nicht...
- Die Wahl eines µC, der das kann. Es bietet sich der Mega32U4 förmlich
  an. Wurde dir auch bereits empfohlen.
- Implementierung des Protokolls, für das du dich entscheidest. Genau da
  wird die Säge wohl klemmen...

> Daher schreiben die meisten Leute wohl auch auf SD-Karten... :-)

Das liegt daran, dass die meisten davon AUCH zu faul/doof zum selber 
Programmieren sind und dementsprechend nur fremden Code zusammenleimen 
wollen oder können. Und die, bei denen das nicht zutrifft, wollen wohl 
offensichtlich ihren Code nicht unbedingt für die vielen Nassauer 
veröffentlichen...

von Frank K. (fchk)


Lesenswert?

PIC24 Controller mit der Typenbezeichnung PIC24FJ???GB??? haben OTG-USB. 
Du kannst diese Controller sowohl als Mass Storage benutzen als auch 
selber Mass Storage (USB-Sticks) ansteuern.

Hier bekommst Du die MLA Microchip Libraries for Applications:
http://www.microchip.com/mplab/microchip-libraries-for-applications

Hier bekommst Du:
- USB Device Stack
- USB Host Stack
- FAT File System
- MMC/SD Card Treiber

Damit sind eigentlich alle Probleme bereits gelöst.

fchk

von vorticon (Gast)


Lesenswert?

Einfachste Lösung ist die, einen USB-UART chip zu nehmen (bzw. fertiges 
Modul mit Atmega328 + usb-uart) und mithilfe eines einfachen ascii- oder 
binärprotokolls die Daten rüberzuschicken. Noch einfacher ist dann nur 
noch die Lösung mit SD-Karte und Kartenleser

c-hater schrieb:
> Das liegt daran, dass die meisten davon AUCH zu faul/doof zum selber
> Programmieren sind

ganz besonders doof ist es, das Rad zum 100. mal zu erfinden

von Draco (Gast)


Lesenswert?

Atmega32u4... die beste Wahl dafür, natives USB an Board. Und du kannst 
dir erstmal so nen Arduino Clone besorgen und vergewaltigen zum 
ausprobieren. Dein ISP kannste dafür natürlich auch nehmen.

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.