Hi !
Habe mal ne Frag zu USB. Besteht die Möglichkeit über ein Terminal
Programm Daten über eine USB Schnittstelle zu senden?
Ich möchte gerne so eine Kommunikationsschnittstelle in Betrieb nehmen
und versuchen "auschließlich" USB zu nutzen.
Oder brauche ich eine andere grafische Oberfläche, mit dementsprechenden
Initialisierungen für die Umsetzung mit USB? Gbit es irgendwo Infos?
Terminal != USB
Das sind zwei ganz und gar unterschiedliche Paar Schuhe.
Wenn an dem USB aber zum Beispiel ein Konverter auf Seriell hängt, daran
ein Gerät, was damit und mit den Daten die vom Terminalprogramm kommen
was anfangen kann und das jeweilige Betriebssystem dann durch den
Treiber des USB-Gerätes dem Terminalprogramm glauben machen kann, dass
es sich um ein serielles Gerät handelt, dann ja.
Das ist allerdings nur ein einfaches Beispiel. Man kann sich sicherlich
andere Möglichkeiten ausdenken. Jedoch gibt es auch massig USB-Geräte,
die sicherlich nicht mit deinem Terminalprogramm reden wollen.
Ok, wie bekommt man den eine Verbindung zum USB hin ?
Irgendwie muss es doch eine Möglichkeit geben, eine Kommunikationsebene
aufzubauen? Ich will "einfach" meine Daten mit USB transportieren..
Gibt es denn nicht sowas ähnliches wie ein Terminal Programm für USB mit
dem passenden Treiber?
USB ist keine Schnittstelle.
USB ist ein _u_niverseller _s_erieller _B_us, bei dem genau
festgeschriebene Protokolle eingehalten werden müssen. Einfach ein paar
Bytes rausschicken wie bei Parallelport oder bei RS 232 geht nicht.
USB-Verbindungen zwischen zwei PCs funktionieren nur mit einem
Interface-Controller, weil USB als Master-Slave-Protokoll aufgebaut ist.
Der PC ist der Host (Master), angeschlossene Geräte wie z.B. Maus,
Tastatur etc. können nur nach Aufforderung durch den Master ihre Daten
versenden oder empfangen. Die direkte Verbindung Host-Host ist also
nicht möglich, es muss ein intelligentes Interface dazwischengeschaltet
werden. Sowas gibt's aber fertig zu kaufen.
USB-Geräte kann man nur über entsprechende Treiber ansprechen. Für
Anfänger sind z.B. folgende Seiten interessant:
http://www.b-kainka.de/usb.htm
> Wo kann man den so einen Interface-Controller herbekommen ?
Dort wo Du auch andere PC-Peripherie herbekommst:
"Ich bin blöd"-Markt, alternate, reichelt, k&m uvm.
Beispiel:
http://www.alternate.de/html/productDetails.html?artno=LXZD01
Aber versuch doch mal zu beschreiben was Du machen willst.
Geht es hier denn wirklich um eine Verbindung von Computer zu Computer,
oder vielmehr eine Verbindung vom PC zu einem elektronischen Gerät?
Ich könnte mir vorstellen, daß hier eher eine USB-zu-RS232 Umsetzung
gefragt ist. Dann kann man mit einem Terminalprogramm über eine durch
einen entsprechenden Treiber simulierte COM-Schnittstelle mit dem
USB-Gerät kommunizieren. Dazu gibt es entweder fertige Chips (FT232,
FT245 von FTDI, inklusive Standardtreiber) oder eine Software-Lösung für
Atmel-Mikrocontroller von Objective Development, hier:
http://www.obdev.at/products/avrusb/index.html
Ist auch in der Linksammlung auf dieser Seite zu finden.
Hi!
Es geht um eine Verbindung von einem PC zu einem µC (ARM7 STR7) der eine
USB Interface hat. Jetzt möchte ich gerne eine Datenübertragung über USB
herstellen!
Ich möchte auch keine von FTDIChip RS232-Konverter sondern auschließlich
einen Komunikationsweg über USB.
Ich hoffe, das bringt euch etwas weiter....
Es wird doch bestimmt ne Möglichkeit geben mit einer entspr.
Softwareumgebung und einem Treiber die Daten zu transportieren?
Beim EZ-USB (Cypress AN21**) und folgende, also ein
USB-Devicecontroller mit 8051-Kern, gab es reichlich Material vom
Hersteller. Generischer Treiber, eine Testsoftware zur Übertragung von
Programmen (RAM-basierter Controller), verschiedene Quelltexte und
Dokumentationen.
So etwas sollte es doch auch für den von dir verwendeten Controller
geben. Der Punkt ist doch der, dass keine handelsübliche Software
("Terminalprogramme" etc.) per se mit deinem Controller reden kann. Wie
dieser die Daten versteht hängt doch ausdrücklich von deinem
implentieren Code im µC ab?! Trotzdem würde ich erstmal PC-seitig einen
generischen Treiber vom Hersteller des µC erwarten. Eine Applikation,
die Daten schickt ist dann das kleinere Übel. Zum Testen ist da ein
kleines Progrämmle relativ schnell gemacht, denn der Gerätazugriff
erfolgt über den Treiber und standardisierte Schnittstellen des
Betriebssystems.
@Daniel:
Suche Dir eine USB-Geräteklasse aus, implementiere die auf dem ARM und
verwende dann den Standardgerätetreiber für die gewählte Geräteklasse.
Als Standardgeräteklassen stehen zur Verfügung
HID - human input device (Maus, Tastatur etc.)
MSD - mass storage device (Festplatte, USB-Stick, Kartenleser etc.)
Audio (USB-Soundkarten, USB-Headsets etc.)
Communications (USB-Modems, USB-RS232-Adapter etc.)
Alternativ kannst Du natürlich auch ein nicht von diesen
Standardgeräteklassen implementiertes USB-Protokoll verwenden, dann aber
musst Du auch noch einen Devicetreiber für Dein Betriebssystem schreiben
(oder libusb oder ähnliches verwenden).
Der Ansatz von Anchorchips (Ez-USB, jetzt Cypress) stellt bei
Controllern mit USB-Schnittstelle eine Ausnahme dar, der Controller
enthält bereits ein fertig programmiertes ROM, das einen USB-Stack
enthält und mit einem vom Hersteller gelieferten Treiber kommuniziert.
Dadurch ist ein Download über USB möglich.
Das ist bei anderen Controllern durchaus nicht üblich, und in so einem
Fall kann es auch keinen generischen Treiber geben.
ok, also suchst Du doch keinen Interface-Controller...
Für Deine Zwecke ist eine Standardgeräteklasse vermutlich das beste
Von denen die Rufus aufgezählt hat wäre wahrscheinlich die
Communications-Klasse die sinnvollste.
Dann machst Du im Prinzip das was die FTDI-Chips in HW machen.
Eine Beispielimplementierung für die CDC-Klasse kannst Du bei den ATMEL
SAM7 Code-Beispielen finden. Anderer Chip und damit anderes
USB-Interface aber den prinzipiellen Ablauf kannst Du Dir dort ansehen.
Hier findest Du ein Beispiel:
http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/index_at91.html#at91_usb1
@ all :
Danke für eure Beiträge
@ Rufus T. Firefly:
Ich habe bereits die MSD - mass storage device als USB Stick aktiviert.
Das funktioniert auch wunderbar... Nur wenn ich jetzt gerne vom Host
über USB Daten übertragen möchte. Da fehlt mir das notwendige Know How
!!
Als Beispiel wäre vielleicht, wenn ich meinen µC mit dem USB updaten
möchten um eine neue Software zu implementieren, oder einfach mal einen
bestimmten Speicherbereich auslesen möchte!
Da soll mein Lösungsansatz hingehen ! RS232 möchte ich nicht mehr
verwenden!
Dann wirst Du Dir wohl ein eigenes Protokoll entwerfen müssen.
Ctrl-Transfers zur Steuerung und wenn ich schnell gehen soll
Bulk-Transfers zur Übertragung der Daten.
Dazu benötigst Du auf der Host-Seite entweder einen eigenen
Device-Treiber (etwas aufwendiger) oder Du verwendest die libusb (gibt
es für Linux und Windows).
Damit kannst Du dann einfache User-Mode Programme schreiben die mit
Deinem Device kommunizieren
Den Window-Port findest Du unter:
http://libusb-win32.sourceforge.net/
Zum Thema Firmware-Update über USB haben ich auch schon ein paar Leute
Gedanken gemacht.
Dazu gibt es auch eine eigene Geräteklasse DFU (device firmware update).
Eine generische Applikation auf Host-Seite kenne ich allerdings nicht.