Forum: Mikrocontroller und Digitale Elektronik Full speed USB mit mikrocontroller


von F. V. (coors)


Lesenswert?

Hi Forum,

Ich suche jetzt schon eine Weile nach einer Loesung fuer ein schnelles 
uC/USB Interface. Bisher habe ich den FT232 mit AVRs benutzt, allerdings 
wuerde ich jetzt gerne etwas schneller Daten zum PC uebertragen (Full 
speed sollte vorerst genug sein).

Da USB PICs das an sich ja koennen sollen, habe ich es mit 18F14k20 und 
18F14K50 probiert. Meine Erfahrung mit PICs war allerdings nicht 
besonders gut. Nach mehreren Monaten rumprobieren habe ich noch keinen 
Erfolg gehabt. Unter anderem fand ich es sehr nervig dass sich 
Bootloader Code von Microchip nicht fuer den 18F14k50 kompilieren laesst 
ohne dass man den teuren C18 compiler kauft und dass es sehr schwer ist 
Dokumentation fuer USB Beispiele zu finden. PIC daher eher nicht...

Hat jemand schnelle USB Uebertragungen mit Papilio FPGA boards 
hinbekommen? Bisher finde ich den Papilio gut und es ist einfach nen 
Einstieg zu finden. Das Problem ist aber das gleich wie bei AVRs - wie 
bekommt man USB mit 12 Mbit/s hin?

Hier in dem USB Artikel steht der USB960x als Full speed controller mit 
8-bit Interface gelistet - allerdings als Obsolete markiert. Gibt es da 
vielleicht eine neuere Version mit 8-bit Interface, die es einem erlaubt 
schneller zu sein als virtuelle COM ports mit dem FT232?

Bitte postet wie ihr schnelle USB Verbindungen verwirklicht habt. Ideal 
waeren Loesungen, wo man einfach evaluation boards bekommt, gute 
Dokumentation und Beispiele vorhanden sind (die sich auch compilieren 
lassen). Der Preis (sollte <100 Eur sein) und ob es eine 8-bit, 16-bit, 
32-bit oder FPGA Platform ist macht hier wenig Unterschied.

Vielen Dank an alle, die sich die Muehe machen und Antworten!

Felix

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

http://www.ftdichip.com/Products/ICs/FT240X.html
Viel mehr als 1MByte/s wirds nicht werden bei Full-Speed USB. Mit den 
Vorgängern hab ich gearbeitet und kann die Datenrate bestätigen.

Matthias

von Andreas D (Gast)


Lesenswert?

Wir verwenden die PSoCs, ich habe aber im Augenblick keine 
Bandbreitenangaben.
Die Dokumentation und die Tools sind jedenfalls sehr gut, und man 
bekommt schnell was zum Laufen.

Andreas

von Kaj (Gast)


Lesenswert?

Ein Board mit Atmega32U4 (ist z.B. auf vielen Arduino-Boards als 
USB-Seriell-Wandler verbaut). Aus dem Datenblatt des 32U4:

• USB 2.0 Full-speed/Low Speed Device Module with Interrupt on Transfer 
Completion
– Complies fully with Universal Serial Bus Specification Rev 2.0
– Supports data transfer rates up to 12 Mbit/s and 1.5 Mbit/s
– Endpoint 0 for Control Transfers: up to 64-bytes
– 6 Programmable Endpoints with IN or Out Directions and with Bulk, 
Interrupt or Isochronous Transfers
– Configurable Endpoints size up to 256 bytes in double bank mode
– Fully independent 832 bytes USB DPRAM for endpoint memory allocation

Oder aber du nimmst dir ein STM32F4-Discovery-Board (je nach Version 11 
bis 30 Euro), da ist der Debugger auch gleich mit auf dem Board. Das 
kann auch Full-/High-Speed USB. Und fuer STM32 gibt es auch viele 
Beispiele, z.B. wie man das Discovery Board als Maus nutzen kann.

von Carsten W. (eagle38106)


Lesenswert?

Da wären noch die Chips von NXP wie z.B. der LPC1768/69. Dafür gibt es 
ein sehr praktisches EVAL-Board mit angeflanschtem Debugger/Programmer 
für wenig Geld: 
http://www.embeddedartists.com/products/lpcxpresso/lpc1769_xpr.php und 
die IDE gibt es mit Debug Fähigkeiten bis zu 256 MB Code für lau von NXP 
selbst: http://www.lpcware.com/lpcxpresso/home

von Purzel H. (hacky)


Lesenswert?

Dann waer dann noch der FT245 ... der bringt 1MByte/s

von Stephan B. (matrixstorm)


Lesenswert?

Hallo.

Wie waere es mit AVR XMega (-U Versionen)?
Diesen kann mit LUFA bequem USB "begebracht" werden.

Z.B. zum testen: http://matrixstorm.com/avr/avrstick/.
Hierfuer gibt es online modifizierbare USB-Bsp:
http://matrixstorm.com/avr/avrstick/#bideavr

MfG

von F. V. (coors)


Lesenswert?

Danke fuer die Antworten!

@ Andreas D: Die sehen in der Tat sehr interessant aus. Ist der USB 
Stack frei verfuegbar und einfach zu benutzen? Der PSoC5 mit Cortex-M3 
sieht interessant aus und ist als development board erhaeltlich (~25 
Euro). Hast du zufaellig einen Link zu nem USB Beispiel welches du 
benutzt hast?

@Kaj: Ich bestelle mir mal nen Atmega32u4 board und gucke wie das so 
funktioniert. Benutzt du LibUSBdotnet fuer die Transfers? Es scheint als 
wuerden virtuelle COM ports auf jeden Fall nicht schnell genug sein.

@Kaj: Fuer das STM32F4 konnte ich keine Full Speed oder High Speed 
Beispiele finden. Kann es sein, dass da normalerweise ein virtual COM 
port benutzt wird? In dem STM Forum klingt es eher so als waere es 
schwierig das zum Laufen zu kriegen. Daher vermute ich mal, dass es 
keine fertigen Beispiele gibt (korrekt?).

@Carsten Wille: Ich habe ein LPC1769 board, allerdings habe ich da keine 
Beispiele fuer gefunden und die Idee verworfen. Es scheint als wuerden 
die mbed Beispiele auch alle den (scheinbar) langsamen virtuellen COM 
port benutzen. Hast du vielleicht ein Beispielprojekt fuer schnelleren 
USB Datentransfer?

@ Stephan B.: Tolles Projekt! Gibt es in dem AVRStick Projekt schon 
fertige Beispiele fuer schnellen USB Datentransfer? Ich bin interessiert 
daran Beispielprojekte zu entwickeln, allerdings kenne ich mich mit USB 
Stacks nicht besonders gut aus. Ich vermute allerdings, dass es schon 
eine fertige Loesung geben muss (die ich nur noch nicht gefunden habe). 
Wie weit ist das AVRStick Projekt im Bezug auf USB?

Gibt es jemanden der ein fertiges Beispielprojekt hat und Willens ist 
den Code und die Hardwarekonfiguration zur Verfuegung zu stellen? Falls 
sich jemand meldet koennte ich es hier als Artikel einstellen, so dass 
es von anderen als Referenz genutzt werden kann.

Felix

von c-hater (Gast)


Lesenswert?

F. V. schrieb:

> Es scheint als
> wuerden virtuelle COM ports auf jeden Fall nicht schnell genug sein.

Das ist doch Blödsinn. Virtuelle COM-Ports benutzen Bulk-Transfers 
(jedenfalls wenn des Device mindestens mit FullSpeed angebunden ist).

Damit erreicht man theoretisch maximal (und bei fehlerfreier Hardware 
und Programmierung auch praktisch) ca. 1MByte/s Nettodatendurchsatz. 
Mehr geht einfach nicht mit USB1.1.

> allerdings kenne ich mich mit USB
> Stacks nicht besonders gut aus.

Das merkt man. Ändere das!

> Gibt es jemanden der ein fertiges Beispielprojekt hat

Alles klar. Hauptsache nicht selbst denken oder gar lernen müssen. 
Generation Fratzenbuch. Alles wollen und zwar sofort, aber dafür 
arbeiten, ...nö. Das wäre ja viel zu anstrengend.

von Frank K. (fchk)


Lesenswert?

F. V. schrieb:

> Da USB PICs das an sich ja koennen sollen, habe ich es mit 18F14k20 und
> 18F14K50 probiert. Meine Erfahrung mit PICs war allerdings nicht
> besonders gut. Nach mehreren Monaten rumprobieren habe ich noch keinen
> Erfolg gehabt. Unter anderem fand ich es sehr nervig dass sich
> Bootloader Code von Microchip nicht fuer den 18F14k50 kompilieren laesst
> ohne dass man den teuren C18 compiler kauft und dass es sehr schwer ist
> Dokumentation fuer USB Beispiele zu finden. PIC daher eher nicht...

Du hast Dir gerade den zweitkleinstmöglichen PIC18F ausgesucht. Für eine 
Produktentwicklung ist das ok, zum Lernen eher ungünstig. Das Ding hat 
relativ wenig Flash, so dass ich ich gut nachvollziehen kannst, dass Du 
mit den Bootloader Probleme hattest. Normalerweise ist macht man das bei 
den Ding eben nicht, dieser PIC ist nicht für Anwendungen vorgesehen, wo 
man einen Bootloader braucht. Oder hast Du schon mal eine normale 
USB-Maus oder USB-Tastatur geupdated?

Dann zur Wahl des Compilers: Der C18 wird nicht mehr gepflegt, Microchip 
empfiehlt den XC8 (was früher der Hitech war). Der erzeugt in der freien 
Version nicht besonders guten Code, d.h. ein zu kleiner PIC ist erst 
recht tödlich.

Ich rate Dir zu einem PIC32MX250F128B. 28 Pins, gibts als 
lochrastergeeignetes DIL, einfach zu beschalten (wie der 18F14K50, den 
Du kennst), ABER: völlig anderer Prozessorkern. Das Teil läuft mit 50 
MHz, hat 128k Flash und 32k RAM und einen 32 Bit MIPS-Prozessorkern. Die 
direkten Vorläufer dieses Prozessorkerns liefen Anfang der 90'er Jahre 
in den dicken, fetten DEC Ultrix UNIX Workstations, dort aber nur mit 16 
bis 25 MHz.

Dann nimmst Du MPALABX, wenn Du noch das alte MPLAB8 hast, den aktuellen 
XC32 Compiler (ist ein gcc) und die aktuellen Application Libraries, die 
den Codenamen Harmony tragen.

So, damit solltest Du zum Ziel kommen. Wenn Du Fragen hast, frage nicht 
hier, sondern in den Foren auf microchip.com. Das ist zielführender, 
weil dort die Leute mit Ahnung sitzen.

Wie gesagt, Du warst nicht einfach zu blöd, sondern Du hast ganz am 
Anfang nur einige schlechte Entscheidungen getroffen, die Dir 
anschließend das Leben schwer gemacht haben.

> Hier in dem USB Artikel steht der USB960x als Full speed controller mit
> 8-bit Interface gelistet - allerdings als Obsolete markiert. Gibt es da
> vielleicht eine neuere Version mit 8-bit Interface, die es einem erlaubt
> schneller zu sein als virtuelle COM ports mit dem FT232?

Wenn es keine integrierte Lösung sein muss, dann kannst Du auch einen 
FT2232H verwenden. Das ist (a) ein High Speed Device, d.h. Du kannst 
damit >20 MByte/s übers USB blasen, und (b) es stellt nicht nur serielle 
Schnittstellen zur Verfügung, sondern hat auch parallele Modi mit 8 
Datenbits und Handshakeleitungen und einiges mehr. Vielleicht ist das 
einfacher für Dich.

fchk

PS: 
http://www.tme.eu/de/details/32mx250f128b-i_sp/mikrocontroller-microchip-32-bit/microchip-technology/pic32mx250f128b-isp/
PPS: Es gibt auch noch den PIC32MX270F256B mit doppeltem Flash+RAM, aber 
der ist bei den Händlern noch nicht so gängig.
http://www.digikey.de/product-detail/de/PIC32MX270F256B-I%2FSP/PIC32MX270F256B-I%2FSP-ND/4902630
PPPS: plus extra Boot Flash

: Bearbeitet durch User
von Andreas D (Gast)


Lesenswert?

>  Ist der USB
> Stack frei verfuegbar und einfach zu benutzen?

Ja, wenn Du im PSoC Creator ein Projekt mit USB-FS anlegst,
und die Komponente mit allen Angaben (von der Vendor-ID bis zur
Maximum Packet Size jeden Enpoints) konfigurierst,  wird der 
entsprechende
Source code generiert.

Die Benutzung ist recht einfach.

> Der PSoC5 mit Cortex-M3
> sieht interessant aus und ist als development board erhaeltlich (~25
> Euro).

Du kannst neben dem Schmartboard auch das PSoC 4 Pioneer Kit fuer den 
Anfang nehmen, da ist auch ein PSoC 5LP (als "programmer") drauf, den Du 
aber
ueber den Bootloader mit eigenem Code programmieren kannst.

> Hast du zufaellig einen Link zu nem USB Beispiel welches du
> benutzt hast?

Installier den PSoC Creator und erzeuge dann einen Workspace
fuer USBFS mit Wrapback.
Damit haben wir angefangen.

Andreas

von Ralf (Gast)


Lesenswert?

@F.V.:
> Der PSoC5 mit Cortex-M3 sieht interessant aus und ist als development
> board erhaeltlich (~25 Euro).
Kurze Frage, welches Board meinst du?

Ralf

von F. V. (coors)


Lesenswert?

@Frank K.:
Danke fuer die Erklaerung was mit dem PIC schiefgegangen ist. Die Wahl 
hatte ich getroffen, da ich den 18F14K50 in USB Beispielen gesehen hatte 
und er USB ohne externen Oszillator koennen soll. Dass der grade mal 
genug Speicher fuer den Bootloader hat war mir zu dem Zeitpunkt nicht 
klar.

Bestelle mir jetzt mal ein Paar von den PIC32MX270F256 mit und probiere 
das mit MPLABX und dem XC8 compiler. Vielen Dank fuer den Hinweis!

Hole mir auch mal das VA800A-SPI (Digikey 768-1211-ND). Das ist ein 
FT232H Modul welches USB ueber eine SPI Schnittstelle und 30Mbps koennen 
soll und daher ideal ist fuer eines meiner FPGA Projekte.

@Andreas D.:
Das Schmartboard ist dieses hier (oder?):

http://www.schmartboard.com/index.asp?page=products_dev&id=652

Ist im Moment als Backorder gelistet und generell teurer als die 
Evaluierungskarte bei Digikey (CY8CKIT-010A-ND). Denke ich probiere es 
erstmal mit dem CY8CKIT010A und hole mir dann das Schmartboard wenn es 
wieder verfuegbar ist. Danke fuer den Tip, diese Loesung hoert sich auch 
vielversprechend an!

@Ralf:
Siehe links in der Antwort an Andreas. Falls du dir was bestellst und 
Erfahrungen austauschen willst, schick mir einfach ne PM. Ich hab das 
CY8CKIT010A auf meiner Digikey Bestellung mit drauf.

Vielen Dank soweit, ich glaube ich habe jetzt erstmal einiges zu 
verarbeiten. Bei all den verschiedenen Vorschlaegen hier wird bestimmt 
was dabei sein.

Felix

von Frank K. (fchk)


Lesenswert?

F. V. schrieb:
> @Frank K.:
> Danke fuer die Erklaerung was mit dem PIC schiefgegangen ist. Die Wahl
> hatte ich getroffen, da ich den 18F14K50 in USB Beispielen gesehen hatte
> und er USB ohne externen Oszillator koennen soll. Dass der grade mal
> genug Speicher fuer den Bootloader hat war mir zu dem Zeitpunkt nicht
> klar.
>
> Bestelle mir jetzt mal ein Paar von den PIC32MX270F256 mit und probiere
> das mit MPLABX und dem XC8 compiler. Vielen Dank fuer den Hinweis!

XC32, nicht XC8!


> Hole mir auch mal das VA800A-SPI (Digikey 768-1211-ND). Das ist ein
> FT232H Modul welches USB ueber eine SPI Schnittstelle und 30Mbps koennen
> soll und daher ideal ist fuer eines meiner FPGA Projekte.

Nimm das hier:
http://www.digikey.de/product-detail/de/FT2232H%20MINI%20MODULE/768-1030-ND/2027252

Das ist kein FT232H, sondern ein FT2232H (eine 2 mehr!) Der kann alles, 
was der FT232H kann, plus JTAG (FPGA programmieren!), Parallel FIFO, CPU 
Bus Emulation und einiges mehr.

fchk

von Gerald G. (gerald_g)


Lesenswert?

Der stm32f4 kann nachweislich 7MBit/s über USB CDC.
Fertiges Beispiel unter:
http://mikrocontroller.bplaced.net

von c-hater (Gast)


Lesenswert?

Gerald G. schrieb:

> Der stm32f4 kann nachweislich 7MBit/s über USB CDC.

Das ist aber eigentlich eine eher schwache Leistung. Das sind nur etwa 
90% dessen, was für ein CDC-Device über USB1.1 möglich ist.

von Gerald G. (gerald_g)


Lesenswert?

c-hater schrieb:
> Gerald G. schrieb:
>
>> Der stm32f4 kann nachweislich 7MBit/s über USB CDC.
>
> Das ist aber eigentlich eine eher schwache Leistung. Das sind nur etwa
> 90% dessen, was für ein CDC-Device über USB1.1 möglich ist.

Soweit ich weiß ist Full Speed USB- Versionsunabhängig mit 12 MBit/s 
spezifiziert. Egal ob 1.1 oder 2.0

von Andreas D (Gast)


Lesenswert?

Zu dem CY8CKIT-010
steht auf der Cypress-Seite:
" The CY8CKIT-010 PSoC® CY8C58LP Family Processor Module is designed to 
evaluate and experiment with Cypress's PSoC 5 programmable 
system-on-chip design methodology and architecture.

This processor module must be used in conjunction with the PSoC 
Development Kit (CY8CKIT-001) to create designs utilizing on-board DVK 
resources or compatible expansion boards. This kit provides you with an 
additional processor module to use with different projects."

Hast Du dieses CY8CKIT-001 schon?
Das kostet 250USD.

Andreas

von c-hater (Gast)


Lesenswert?

Gerald G. schrieb:

> Soweit ich weiß ist Full Speed USB- Versionsunabhängig mit 12 MBit/s
> spezifiziert. Egal ob 1.1 oder 2.0

12MBit/s BRUTTO. USB braucht aber einen verhältnismäßig großen Teil 
der Buszeit für die Verwaltung des Busses selber. Das geht davon 
schonmal völlig regulär, also absolut unvermeidbar ab.

Dazu kommen dann noch nicht sicher berechenbare Kleinigkeiten wie etwa 
das Bitstuffing oder die vielen variablen Latenzen beim Paketprotokoll.

von Stephan B. (matrixstorm)


Lesenswert?

Hallo

F. V. schrieb:
> @ Stephan B.: Tolles Projekt! Gibt es in dem AVRStick Projekt schon
> fertige Beispiele fuer schnellen USB Datentransfer?
Was meinst du mit schnell? Fuer fullspeed git es das, ja.

> Ich bin interessiert
> daran Beispielprojekte zu entwickeln, allerdings kenne ich mich mit USB
> Stacks nicht besonders gut aus. Ich vermute allerdings, dass es schon
> eine fertige Loesung geben muss (die ich nur noch nicht gefunden habe).
> Wie weit ist das AVRStick Projekt im Bezug auf USB?
Fuer beliebige USB Device Projekte kann man die LUFA-lib verwenden.
Direkt implementiert habe ich schon CDC (virtuelle COM-Ports), AVR ISP 
MKII, Tastatur/Maus (HID) und MSD (Massstorage).

> Gibt es jemanden der ein fertiges Beispielprojekt hat und Willens ist
> den Code und die Hardwarekonfiguration zur Verfuegung zu stellen? Falls
> sich jemand meldet koennte ich es hier als Artikel einstellen, so dass
> es von anderen als Referenz genutzt werden kann.

http://matrixstorm.com/avr/avrstick/examples/ ?

MfG

von F. V. (coors)


Lesenswert?

@Andreas D: Grade gesehen, dass ich mit dem Modul wohl nix anfangen 
kann... Naja, vielleicht nehmen sie es ja zurueck :) Danke trotzdem fuer 
den Hinweis!

@Frank K.: Hab jetzt ein paar PIC32MX270F256B zum spielen. Bisher habe 
ich allerdings nur ne LED zum blinken bekommen. Ich scheiter jetzt schon 
eine Weile daran Timer mit Harmony zu benutzen. Ich vermute mal, dass 
callbacks das gleiche ist wie AVR interrupts, allerdings habe ich das 
Programm noch nicht dazu bewegen koennen ne LED zu togglen wenn der 
interrupt getriggert wird. Benutzt du das Harmony Hilfe pdf? In den 5500 
Seiten Dokumentation habe ich bisher nicht gefunden wie man nen Timer 
Overflow Interrupt ausloest und dann code in die entsprechende ISR 
packt...

@Stephan B.: Ich versuche mein Glueck erstmal mit den PIC32. Im Moment 
denke ich das kann was werden. Sollten alle Stricke reissen gehe ich 
danach wieder zu AVR controllern zurueck. Ich wuerde an sich lieber kein 
CDC device benutzen, sondern direkt ne USB library mit Treiber benutzen 
falls ich das hinbekomme...

Felix

von Frank K. (fchk)


Lesenswert?

F. V. schrieb:

> @Frank K.: Hab jetzt ein paar PIC32MX270F256B zum spielen. Bisher habe
> ich allerdings nur ne LED zum blinken bekommen. Ich scheiter jetzt schon
> eine Weile daran Timer mit Harmony zu benutzen. Ich vermute mal, dass
> callbacks das gleiche ist wie AVR interrupts, allerdings habe ich das
> Programm noch nicht dazu bewegen koennen ne LED zu togglen wenn der
> interrupt getriggert wird. Benutzt du das Harmony Hilfe pdf? In den 5500
> Seiten Dokumentation habe ich bisher nicht gefunden wie man nen Timer
> Overflow Interrupt ausloest und dann code in die entsprechende ISR
> packt...

Interrupts funktionieren ähnlich wie beim AVR. Timer sind prinzipiell 
auch überall ähnlich. Harmony brauchst Du dafür nicht. Nimm Dir das 
PIC32 Reference Manual (da stehen die allgemeinen Sachen drin) plus das 
Datenblatt für die chipspezifischen Dinge. Damit hast Du alle Infos, die 
Du dafür brauchst.

fchk

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.