Forum: Mikrocontroller und Digitale Elektronik USB Stack in Hardware


von Bernd S. (mms)


Lesenswert?

Hallo,

gibt es einen IC der Bereits den USB-Hardwarestack implementiert hat und 
man diesen IC mit einem ARM ohne O/S einfach ansprechen kann - über SPI 
etc.
Die Datenrate von USB sollte auf jeden Fall 10MByte/s betragen.

Zweck: Über USB (ist fest) kommen Daten an diesen ARM und müssen 
lediglich auf mehrere RS485-Ausgänge aufgeteilt werden + ein paar 
Steuerdaten für den Controller selbst. Also eigentlich keine große 
Aufgabe.

Hardwaremäßig wäre es deshalb am Schönsten, wenn man einen kleinen ARM7 
verwenden könnte, der bereits Flash und RAM ausreichend integriert hat 
(daher ist ein O/S auch nicht so wünschenswert)...

Der ISP1160 ist zwar technisch (USB-SPI) gesehen ideal, hat aber leider 
keinen USB-Stack implementiert. Bei Maxim heißt es, dass die 
entsprechenden ICs nicht mehr für neue Sachen verwendet werden sollen.

Gruß
Bernd

von Reinhard Kern (Gast)


Lesenswert?

Bernd Schuster schrieb:
> Der ISP1160 ist zwar technisch (USB-SPI) gesehen ideal, hat aber leider
> keinen USB-Stack implementiert. Bei Maxim heißt es, dass die
> entsprechenden ICs nicht mehr für neue Sachen verwendet werden sollen.

Hallo,

USB komplett in Hardware gibt es nicht. Das Mittel der Wahl ist ein µC, 
der für USB "vorbereitet" ist: die nötige Hardware zum Senden und 
Empfangen ist als Peripherieschaltung eingebaut und die nötige Software 
wird mitgeliefert bzw. steht zum Download zur Verfügung. Diese muss man 
dann mit der eigenen Aufgabenstellung zusammen zum Laufen bringen.

Auch fertige Clientschaltungen wie USB-V24 sind i.d.R. solche 
Prozessoren.

Gruss Reinhard

von Bernd S. (mms)


Lesenswert?

>USB komplett in Hardware gibt es nicht. Das Mittel der Wahl ist ein µC,
>der für USB "vorbereitet" ist:

welche ICs kommen hier z.B. zum Einsatz? Unter FTDI hab ich zwar ein 
paar gefunden, allerdings sind die nicht besonders schnell was die 
Übertragung zwischen dem USB-µC und dem eigentlichen µC angeht.

Gruß
Bernd

von Christian R. (supachris)


Lesenswert?

USB vollständig in Hardware gibts auch, und zwar als IP-Cores für FPGAs. 
Allerdings kosten die richtig Geld und sind einigermaßen aufwendig. Für 
die geforderten 10MB/s könnte man einen aktuellen FT2232H nehmen, der 
soll das wohl angeblich jetzt schaffen. Oder halt den USB 2.0 HighSpeed 
Klassiker: Cypress FX2LP (Cy7C68013A). Das ist ein kompletter 8051 
(grusel) µC mit USB 2.0 Enigine, die das USB Protokoll nahezu in 
Hardware abhandelt. Der schafft etwa 40MB/s.

von Bernd S. (mms)


Lesenswert?

Danke für die beiden Controller-Namen:

>Das ist ein kompletter 8051
>(grusel) µC mit USB 2.0 Enigine, die das USB Protokoll nahezu in
>Hardware abhandelt.

Wo befindet sich denn die Schnittstelle, was der Controller selbst macht 
und was man hinzufügen muss?? Bis jetzt hab ich lediglich für den 
ARM-Bereich eine ToolChain und nicht für die 8051 Controller. D.h. gut 
wäre es, wenn dieser Controller ohne zusätzliche Programmierung die 
Daten z.B. via SPI an meinen eigentlichen Controller weiterleitet.

Gruß
Bernd

von Εrnst B. (ernst)


Lesenswert?

"Die Daten" gibt es bei USB nicht so direkt... Da gibt es mehrere 
"Endpoints", die jeweils ihre eigenen Datenströme senden/empfangen, und 
das auch noch blockweise...

Ein einfacher und universeller USB->SPI Umsetzer ist also nicht möglich.

Verrat vielleicht mal etwas mehr über deine Anwendung, dann kann man dir 
auch konkret zu einzelnen Lösungen raten.

Vorneweg: Willst du ein Device oder einen Host implementieren?

von Bernd S. (mms)


Lesenswert?

ich möchte gern einen USB Device implementieren.

Die Nutzdaten werden von einem x86 Controller Basis zu einem ARM7 (steht 
noch nicht fest welcher) transportiert werden. Der ARM7 soll lediglich 
die Nutzdaten an RS485-Ausgänge (4 Stück) weiterleiten. Der x86 
Controller bietet diese Möglichkeit nicht.

von Christian R. (supachris)


Lesenswert?

Bernd Schuster schrieb:
> Danke für die beiden Controller-Namen:
>
>>Das ist ein kompletter 8051
>>(grusel) µC mit USB 2.0 Enigine, die das USB Protokoll nahezu in
>>Hardware abhandelt.
>
> Wo befindet sich denn die Schnittstelle, was der Controller selbst macht
> und was man hinzufügen muss?? Bis jetzt hab ich lediglich für den
> ARM-Bereich eine ToolChain und nicht für die 8051 Controller. D.h. gut
> wäre es, wenn dieser Controller ohne zusätzliche Programmierung die
> Daten z.B. via SPI an meinen eigentlichen Controller weiterleitet.

Die Schnittstelle befindet sich im RAM. Die OUT-Endpoints werden vom PC 
aus mit den Daten gefüllt, die IN-Endpoints vom 8051 aus. Hat der PC 
einen Endpoint gefüllt, bekommst du einen Interrupt. Wenn du einen EP 
gefüllst hast, musst du ein Register mit der Länge der zu übertragenden 
Daten beschreiben, dann wird der Endpoint dem PC zur Verfügung gestellt 
und kann abgeholt werden. Natürlich ist das alles recht flexibel 
konfigurierbar, speziell die Interrupt bei voll/leer usw.
Die zweite Möglichkeit wäre, die Daten am parallelen Interface des FX2 
ausgeben zu lassen. Dazu musst du allerdings ein paar Register in der 
Firmware setzen. Ganz ohne Firmware tut der Chip zwar auch was, aber die 
Daten bleiben im Chip. Die power-on Firmware ist quasi nur der 
Bootloader. Wenn du mit solchen Chips arbeiten willst, ist ein recht 
hohes Verständnis von USB nötig, weil du eben unten auf der 
Endpoint-Ebene arbeitest. Wenn du das einmal intus hast, ist der Chip 
klasse, der kann nämlich sämtliche USB Geräte darstellen. Vom HID über 
MSD bis zum eigenen Verbundgerät mit mehreren Interfaces usw.
Durch die quasi unbegrenzten Möglichkeiten hast du allerdings auch eine 
steile Lernkurve. Das Technical Reference Manual ist 350 Seiten dick....

von Guido Körber (Gast)


Lesenswert?

Das ist etwas illusorisch. USB ist keine dumme Schnittstelle wie RS232 
und benutzt je nach Anwendung unterschiedliche Protokollelemente. Einen 
fertigen Chip nur für die USB Kommunikation der dann 10MByte/s durchhält 
und das auch noch brauchbar an einen externen Microcontroller weitergibt 
wird es in der Form nicht geben.

Ich würde empfehlen einen Microcontroller mit USB (High Speed) SIE zu 
nehmen und dann halt den Protokollstack des Herstellers auf die 
Anwendung anzupassen, alle Hersteller von USB Chips bieten auch 
Samplecode an, das sollte also gehen.

von Arc N. (arc)


Lesenswert?

Bernd Schuster schrieb:
> ich möchte gern einen USB Device implementieren.
>
> Die Nutzdaten werden von einem x86 Controller Basis zu einem ARM7 (steht
> noch nicht fest welcher) transportiert werden. Der ARM7 soll lediglich
> die Nutzdaten an RS485-Ausgänge (4 Stück) weiterleiten. Der x86
> Controller bietet diese Möglichkeit nicht.

Nach dieser Beschreibung würde ein USB-COM485-PLUS4 am PC reichen..
http://www.ftdichip.com/Products/EvaluationKits/USB-COM485-PLUS4.htm
ist ein USB-RS-485-Adapter (FT4232H basiert) mit vier getrennten 
RS-485-Schnittstellen. Auf jeder Schnittstelle sind 10 Mbps möglich.

von Potter (Gast)


Lesenswert?

Hallo Bernd Schuster,

Du willst also 10MByte/s über SPI verschicken? Das wären ja dann 80 MHz.

Ich denke, der USB ist hier das kleinere Problem.

Gruß Potter

von Bernd Schuster (Gast)


Lesenswert?

>Die Schnittstelle befindet sich im RAM. Die OUT-Endpoints werden vom PC
>aus mit den Daten gefüllt, die IN-Endpoints vom 8051 aus.

d.h. aus dem 8051 kommen die Nutzdaten, die über USB übertragen worden 
sind, wieder raus, und stehen entweder am I2C, oder dem Businterface 
16Bit breit.

BTW: Gibt es einen ARM7 Controller, der diese ankommenden Daten (Daten- 
und Adressbus) mittels DMA im internen RAM z.B. einfach speichern kann, 
ohne dass die CPU selbst was mitbekommt?

Gruß
Bernd

von Bernd Schuster (Gast)


Lesenswert?

ist es eigentlich von der Implementierung das gleiche, den 8051 zu 
verwenden von Cypress oder einen ARM7 / ARM9 mit integriertem USB 
(meistens nur Full Speed)? Oder gibt es beim Cypress IC noch 
irgendwelche Vorteile?

Wieviel MBit/s schafft ein normaler ARM7 - schaffen die wirklich die 
besagten 12MBit/s stabil?

von Christian R. (supachris)


Lesenswert?

Bernd Schuster schrieb:
>>Die Schnittstelle befindet sich im RAM. Die OUT-Endpoints werden vom PC
>>aus mit den Daten gefüllt, die IN-Endpoints vom 8051 aus.
>
> d.h. aus dem 8051 kommen die Nutzdaten, die über USB übertragen worden
> sind, wieder raus, und stehen entweder am I2C, oder dem Businterface
> 16Bit breit.

Die Daten liegen ganz normal in einem RAM. Hardwaretechnisch sind das 
FIFOs, die kann man automatisch nach außen führen (Slave-FIFO 
Interface), oder aber man schreibt eine Firmware, die irgendwas damit 
anstellt. Zum Beispiel an I2C raus schreiben. Das musst du aber dann 
selber machen. HW-Unterstützung gibts nur das Parallel-Interface. Es 
gibt da noch ein GPIF, das kann man irgendwie am PC grafisch 
programmieren.....

Aber ich denke, ein FT4232H wäre wirklich was sinnvolleres für deine 
Zwecke...

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.