Forum: Mikrocontroller und Digitale Elektronik MCU mit USB, welcher Controller und welcher Treiber?


von Bernhard L. (bernhard_r84)


Lesenswert?

Hallo!
Auf der Suche nach einem passenden Mikrocontroller für eine 
Datenerfassung bin ich bei der Frage nach der USB Anbindung etwas ratlos 
und hoffe hier etwas Unterstützung zu finden.
Im wesentlichen geht es darum, ein vom Controller erzeugten Datenstrom 
über USB an den PC zu übertragen. Spezielle USB Endpoints sollen zur 
Steuerung des Controllers verwendet werden.
Optional sollte auch eine Übertragung eines Datenstroms vom PC an den 
Controller möglich sein - dies ist aber derzeit nicht notwendig.

Eigentlich möchte ich vermeiden, eigene Windows und Linux-Treiber für 
die Hardware schreiben zu müssen. Mitgelieferte Treiber sollten das 
Gerät richtig erkennen und der Zugriff über die standard Linux oder 
Windows API (oder IOCTL's) stattfinden.

Zur Steuerung würde ich einen CDC Endpoint implementieren. Über den 
virtuellen COM-Port kann ich die Kommendos an den MCU schicken.

-> Welcher USB Class würde sich denn für die Übertragung des Datenstroms 
eignen? Da bin ich bisher nicht auf einen grünen Zweig gekommen.


Folgende Controllertypen würde ich derzeit vorziehen:

- PIC18F4550
- ARM91SAM7
- LPC2148

Die Tendenz geht sehr stark zu einem ARM da es dafür den gcc gibt und 
die Cores sehr leistungsfähig sind. Außerdem kann der PIC nur max. 
2MBaud bei SPI @ 48MHz

Ist der LPC2148 immernoch sehr buggy oder kann man den mittlerweile 
bedenkenlos einsetzen? Wie siehts hinsichtlich Dokumentation, Beispiele 
und Libs aus?

Würde mich über Tipps und praktische Erfahrungsberichte sehr freuen!
Vielen Dank!
Grüße,
Bernhard

von Martin S. (drunkenmunky)


Lesenswert?

Von Microchip gibts ein kostenloses USB Framework für HID, CDC und 
Microchip Custom Driver. Auch alles mit Beispielen.

Also entweder auf der Microchip Homepage (auch mal die Application Notes 
ansehen) oder auf http://www.sprut.de/electronic/interfaces/usb/usb.htm

Schau dir mal den PIC18F27J53 oder den PIC18F47J53 an. Die sind 
günstiger und können für USB ohne externen Quarz betrieben werden. Und 
auch viel Peripherie wie 10/12-bit ADC, 7 PWM, 2 UART, RTCC, 2 MSSP/I2C.

von Michael H. (morph1)


Lesenswert?

Also ich kann dem Vorposter nicht zustimmen.

Wenn du mit USB arbeiten willst, Finger weg von der 18er Serie! Die ist 
arg schwach auf der Brust.

Der Stack von Microchip ist allerdings sehr gut! Würde dir also entweder 
zu einem PIC24F (eventuell PIC32) oder den anderen von dir genannten 
Chips raten.

von Stefan R. (kroko)


Lesenswert?

Das die 18F PICs schwächer als die anderen genannten sind ist ja 
logisch.
Ein 8 zu 32 Bit uC Vergleich ist ja echt sinnvoll @Michael. Es kommt 
darauf an was das Ding alles machen soll.
Die veralteten ARM7 Typen würde ich nicht empfehlen, falls es ein ARM 
werden soll nimm einen Cortex-M3.

Mfg Kroko

von Bernhard L. (bernhard_r84)


Lesenswert?

@Stefan R.:

Danke für den Tipp! Die Einarbeitung in eine neue CPU macht bei 
aktuellen Typen mehr Sinn.
Habe den LPC1343 genauer ins Visier genommen.
Beispiele für den GCC gibts hier 
http://code.google.com/p/32bitmicro/wiki/LPC13xxSampleSoftware

Die Entwicklung wird auf einer Ubuntu-Workstation (Lucid) vorgenommen, 
arm-gcc frisch aus den Quellen kompiliert.

Als Board klingt das nicht schlecht:

http://www.microbuilder.eu/Store/DevBoards/LPC1343.aspx

Als JTAG Adapter habe ich einen USBprog hier den man mit einer OpenOCD 
Firmware bespielen kann. Wird eigentlich nur für den Notfall benötigt da 
der LPC1343 bereits einen USB Bootloader drauf hat.


Andererseits: Die STM32 CPU's mit der ST Lib sind auch nicht zu 
verachten.

Im Grunde möchte ich schnell loslegen können und erstmal ein SPI EEPROM 
über USB vom PC aus auslesen können ;)

Hilfe :)

von Bernhard L. (bernhard_r84)


Lesenswert?

http://www.olimex.com/dev/stm32-h103.html sieht für den Einstieg sehr 
gut aus.

von Guest (Gast)


Lesenswert?

Hallo Bernhard,

ein CDC Endpunkt (ich nehme mal an Du meinst einen virtuellen COM-Port) 
ist denkbar ungeeignet zur Steuerung, da Du ohne .inf-Datei nicht 
auskommst. Ich empfehle Dir HID zur Ansteuerung (wenig Traffic) und auch 
zur Datenübertragung (bis ca. 30-40 kByte/s).

Auch die 18er PIC finde ich ganz gut, z.B. den 18F14K50. Der ist in 
Sachen Preis/Leistung hervorragend und kommt mit einigen fertigen 
USB-HID Beispielen daher (was allerdings für alle PIC's mit USB 
zutrifft)! Bleibt die Frage, ob er auch für Deine Anwendung geeignet 
ist. Das läßt sich aber einfach aus dem Datenblatt herauslesen.

Für dei Ansteuerung eines HID Gerätes auf Host-Seite (PC) gibt es auch 
einige Libraries die man sofort verwenden kann. So enthält der 
Microchip-Stack auch fertige Host Treiber oder Du schaust mal bei 
www.lvr.com oder www.embedded24.net.

Gruß Potter

von Bernhard L. (bernhard_r84)


Lesenswert?

Hallo!

Die Erstellung einer .INF-Datei sollte kein Problem sein, ich wollte 
eigentlich nur das Schreiben eigener Treiber (.SYS) vermeiden um den 
Wartungsaufwand so überschaubar wir möglich zu halten.

Die USB Unterstützung der PIC's ist wirklich sehr gut, nur befürchte ich 
das mir der Kleine zu langsam ist. Über SPI gehen bei 48MHz nur max. 
2MBit

Ob HID oder CDC zur Steuerung (Parameter setzen, EEPROM auslesen usw.) 
werde ich im Detail noch recherchieren, vielen Dank!

Bei der Übertragung von Nutzdaten (z.B. eines Sensors über SPI) benötige 
ich einen weiteren Endpunkt der mit hohe Datenraten zulässt. Quasi ein 
Stream von Daten vom Mikrocontroller zum PC.

Was würde sich hier am Besten eignen? Ein Mass-Storage oder USB Audio 
interface könnte man eventuell dafür missbrauchen um den Stream am PC 
einzulesen und zu verarbeiten.

Grüße,
Bernhard

von Arc N. (arc)


Lesenswert?

1. Aufgrund des guten USB-Stacks würde ich auch PIC24 oder PIC32 
empfehlen
2. Kommerzielles Projekt? Falls ja, kann man bei Microchip 1) eine 
USB-VID-Sublizenz erhalten (falls die Stückzahlen <10000 sind), bei NXP 
und Atmel afair nicht (usb.org -> 
http://www.usb.org/developers/vendor/VID_Only_Form_withCCAuth_02042009.pdf 
-> $2000)
3. Falls auch 64-Bit-Windows-Versionen unterstützt werden sollen, ist je 
nach USB-Klasse, u.U. ein signierter Treiber nötig d.h. Zertifikat + 
WHQL-Signierungs-Kosten mit einrechnen 
(http://www.microchip.com/forums/m485159-print.aspx)

http://ww1.microchip.com/downloads/en/AppNotes/Application%20for%20USB%20Vendor%20ID%20Sublicense.pdf

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.