Full speed USB mit mikrocontroller

OP #3785131
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
Gast #3785197
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.
OP #3786283
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
Gast #3786572
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.
#3786750
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
Gast #3786775
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
OP #3787319
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
#3787353
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
Gast #3788634
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
Gast #3789167
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.
#3789586
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
OP #3792368
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
#3792436
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren