Hallo Leute,
ich habe wirklich keine Ahnung in Sache USB, um so mehr freue mich um
jede Hilfe
Mein Problem: muss ein Treiber für ein USB für data exchange (PC-Device)
entwickeln
1- lohn es sich überhaupt ein Treiber zu programmieren?
wenn nein wo finde ich denn ein der meine Aufgabe löst.
wenn ja was brauche ich denn?
ich benutze ein PIC18F4450 (USB-fähiges uC von MicroChip) als Slave?
MfG
Benutze doch einfach den FT232 Seriell-USB-Wandler. Der kostet zwar etwa
5 €, funktiniert dennnoch super. Der FT232 simuliert eine virtuelle
COM-Schnittstelle, d.h. du musst dich nur im eine Serielle Komunikation
kümmern, sprich RX und TX. Beispiele findest du sehr viele im Netz.
Einfach unter serielle Schnittstelle schauen.
Den Schaltplan findest du im Datenblatt des FT232.
Gruß
Das ist unter OpenBSD und OS/2 recht einfach. Einfach in die API gucken.
Ansonsten lohnt sich ein Blick auf http://www.usb.org/ dort kann man die
Spezifikation sogar KOSTENLOS runterladen.
Und wenn man gar keine Ahnung hat, lohnt sich ein Blick auf
http://de.wikipedia.org/wiki/Universal_Serial_Bus
Also falls du mit Treiber wirklich einen PC-Treiber meinst,
dann besorg dir irgendwo einen generischen USB-Treiber und
programmier diesen an.
z.B. -> "USBIO" von http://www.thesycon.de
Selber programmieren kannst du vergessen.
Oder meinst du vielleicht doch eher die USB-Implementierung
auf der PIC-Seite?
Treiberentwicklung unter Windows ist nur was für Hardcoregurus und
Ultracracks...
aber:
Für den 18F4450 gibts von Microchip die komplette
Entwicklerunterstützung. Schau mal hier:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en021940
Zieh Dir mal die
MCHPFSUSB_Setup - Package....
Da ist meines Wissens auch ein Treiber dabei, den Du nehmen kannst.
Für Bulk-Transfer wird wohl gerne das Treiber-Bespiel aus dem Windows
DDK als Grundlage für MS Windows Treiber genutzt. Haben das DDK selbst
nicht, aber die Anleitung auf MSN liest sich so, als sei alles gut
vorgekaut - im einfachsten Fall wohl nur VID/PID anzupassen. Ansonsten
ist HID unter Windows noch gut überschaubar, damit habe ich selbst etwas
herumgespielt. Datenrate allerdings begrenzt (USB 1.1 64Bytes/USB-Paket
bei 1 Paket/ms)
@ Peter
Teurer gehts wohl nicht mehr.
Folge dem Tip von Andreas. Bei MChip gibt es ein CDC Demo
das du an deine Bedürfnisse anpassen kannst. Dann sprichst
du den PIC einfach als virtuellen COM Port an.
Er hat nix über den Preis gesagt....
Auf alle Fälle funktioniert es und spart wochenlange Arbeit und
Fehlersuche. Man kann ohne weiteres Grundwissen sofort Hardware
programmieren. Zeit ist Geld.
Hallo Leute,
Danke für den Support!
es hat sich herausgestellt dass wir keinen PIC18F4450 benutzen kann da
der Baustein nur über UART-PORT mit dem uC kommuzieren kann!
1. und nun geht es darum ein Baustein zu finden der über SPI an uC
angeschloßen wird , und Daten per USB-Protokoll an einem Peripherie
senden bzw. bekommt.
2. es soll ein treiber für diese USB entwickeln werden
Freue mich auf Ihre Hilfe!
MfG
Leon wrote:
> es hat sich herausgestellt dass wir keinen PIC18F4450 benutzen kann da> der Baustein nur über UART-PORT mit dem uC kommuzieren kann!
der PIC18F4550 IST bereits ein µC, und wie der mit deinem anderen µC
Kommunizierst, kannst du selbst festlegen.
UART ist da eine Möglichkeit, aber nicht die einzige.
Wenns auf Speed ankommt, kannst du z.B. ein Paralleles Interface über
den SPP machen, SPI+I2C geht natürlich auch, und mit Soft-SPI könntest
du sogar mehrere SPI-Kanäle einbauen...
/Ernst
Irgendwie verstehe ich immer noch nicht ganz was er vorhat, irgendwie
hört es sich so an als würde er versuchen einen USB-Hostcontroller zu
implementieren, an den später Geräte angeschlossen werden...das wird n
hartes Stück Arbeit.
Falls ich dich jedoch falsch verstanden haben sollte und du nur ein
Gerät bauen willst welches über einen µC und USB mit dem PC kommunzieren
soll, schau dir auf der µC-Seite mal AVR-USB und als Gegenstück wie
schon erwähnt libusb an...damit geht fast alles und wenn's sein muss
kann man den libusb sogar per Managed-Sprachen (C#/.net etc.)
programmieren, was dann auch wirklich für Anfänger sehr einfach
ist...Außerdem benötigst du außer ner Hand voll Hühnerfutter für den µC
erstmal keine externen Bauteile...
Grüße,
phlo
Hallo,
ich will kein USB-Hostcontroller implementieren!
Also noch mal:
ich kann von meinem PC aus (mit HYperterminal) über UART Kommando an
einem Steuergeräte senden, und das Steuergeräte kann mir auch
Informationen (über UART) zurücksenden.
Nun will ich das Ganze über ein USB realisieren! will aber der SPI-Port
des uC benutzen.
ich brauche also kein Baustein der mir (USB-zu-UART) konvertierung macht
sondern (USB-zu-SPI) des uC
und für diese Aufgabe soll auch ein Art Treiber entwickeln werden
MfG
> 1. und nun geht es darum ein Baustein zu finden der über SPI an uC> angeschloßen wird , und Daten per USB-Protokoll an einem Peripherie> senden bzw. bekommt.
Vielleicht den USBN9603 ?
Also ich hab nicht ganz verstanden was du meinst mit eine Art Treiber
aber z.B. bietet FTDI den FT2232 an welcher eine Brücke zwischen USB und
SPI-Bus herstellen kann.
Für die Programmierung unter Windows gibt es eine fertige Lib für den
SPI-Bus mit der recht einfach auf dem Bus geschrieben und gelesen werden
kann.
Wenn ich mich noch recht erinnere ist die maximale CLK Frequenz des
SPI-Busses 6Mhz.
Vielleicht hilfts, wenn net schaden tuts au net ;)
Die FTDI chips sind auf der einen seite ein USB Slavedevice und auf der
anderen Seite asynchron serial. Dieser Baustein wird auf einer
Leiterplatte verbaut, und dann leasst sich die Leiterplatte per USB mit
eibnem PC verbinden. Auf der PC seite, gibt es einen fertigen Treiber
von FTDI, der macht dass ein zusaetzliches Serialport erscheint. Es wird
von Windowssoftware wie eine Serialport bedient.
Sehr praktisch. Sehr guenstig.
Hallo,
ich muss ja später ein Treiber für den USB entwicklen, und auf der Seite
von Maxim ist ja keine Treiberbsp. oder etwa in der Richtung vorhanden!
MfG
Na ja, einen proprietären Treiber für USB programmieren
will gut überlegt sein. Da sollte es schon überzeugende
Gründe dafür geben. Es ist nicht jedermanns Sache, für
jedes x-beliebige Betriebssystem einen eigenen Treiber
zu supporten. Das schaffen nicht einmal Weltfirmen. ;-)
Für fast alle Device-Typen gibt es fertige generische
Treiber so dass man auch einen Maxim-SPI-USB-Chip darauf
abstimmen kann.
Jedenfalls wäre damit die Forderung "USB via SPI" elegant
gelöst.
Hi,
wenn Du via USB von einem Mikrocontroller mit dem PC kommunizieren
willst, dann kommst Du nicht um einen zusätzlichen (oder integrierten)
USB-Controller herum. Hierfür nimmst Du z.B. den USBN9603. Diesen kannst
Du dann per SPI/MICROWIRE von irgendeinem Mikrocontroller (AVR/PIC) aus
ansteuern. Um nun eine RS232 zu simulieren, muß Deine Schaltung ein
USB-Gerät der CDC-Klasse darstellen (das wird in der Firmware
programmiert). Damit hast Du auch Dein Treiberproblem auf Seiten des PC
gelöst. Für Windows/Unix werden für die CDC-Klasse bereits Treiber mit
dem Betriebssystem ausgeliefert. Auf PC-Seite kannst Du jetzt einfach
(wie bei RS232) mit CreateFile(), ReadFile() und WriteFile() auf Den USB
zugreifen.
Gruß Potter
Doch, das geht - solange damit auf die generischen Treiber
von Windows zugegriffen wird.
Eine ziemlich lockere Sache.
Die "Lebensaufgabe" fängt dann an, wenn man meint, unbedingt
einen proprietären Treiber entwickeln zu müssen.
www.kleiber.li -> elektronik -> USB (oder so ähnlich)
ist schon alles fertig für den PIC, brauchste nur noch vom uC die
empfangenen daten so rausgeben zu lassen, wie du's möchtest (parallel,
seriell...). ist dort zwar primitiv gemacht, aber einfach - und
funktioniert ;)
Hallo
Danke für eueren Support!
Also ich habe mir nun den FT2322 von FTDI ausgewählt.
Treiber und DLL habe ich mir schon runtergeladen.
im "D"XX Programmer's Guide" stehen dann 4 Funktionsgruppen die man je
nach wusch implementieren kann. und zwar:
-> Classic Interface Function
-> EEPROM Interface Function
-> Extended API Function
-> FT-Win32-API
1. welche dieser Gruppe (Funktionen der Gruppe) muss ich implementieren?
meine Schaltung sieht so aus
_______
| | ______
|TriCore|----> | |
| | |FT2322|---> (Geräte)
| | | |
|_______|--| |______|
|________
|SD-Card |
Also TriCore Lädt Dll.Code aus einer SD-Card und überträgt sie (per SPI)
im Speicher des FT2322
Nun kann FT2322 Daten vom Geräte Lesen und wiederum an TriCore senden.
MfG
Hä? Der FT2232 ist KEIN Host-Controller, der kann keine Geräte
ansprechen.
Du kannst damit nur vom PC (Windows, Linux) aus auf den µC hinter dem
FT2232 zugreifen.
Dein Konzept ist mit dem FT2232 nicht machbar
Manmanman... Hättest du dich gleich klar ausgedrückt, hätten wir uns
hier zwei Seiten Thread sparen können...
Du braucht etwas wie:
http://www.embedded-projects.net/usbport
oder, wenn mehr Flexibilität bei den Angeschlossenen USB-Geräten
erforderlich, einen µC mit Linux drauf (z.B. ARM)
LeBeau wrote:
> Ja Richtig,>> wir meinen doch das Gleiche oder?> PC <-> TriCore <-> FT2322 <-> [Device]
Nein so klappts eben nicht!
Mit dem FT2232 gehts nur so:
PC <---USB---> FT2232 <---SPI---> TriCore
Du kannst nur Daten zwischen PC und TriCore austauschen. USB Geräte
kannst du mit dem FT2232 NICHT ansprechen. Weil´s kein Host-Controller
ist, sondern nur ein "dummes" USB-Device.
Hallo Christian,
Falsch!
mit PC <-> TriCore meinte ich:
1. die Portierung der Code im Speicher des TriCore!
2. später muss doch ein Treiber her (mit ner schöne GUI)! und dann eben
PC(Commando) <-> TriCore <-> FT2322 <-> (USB)[Device]
und da brauche ich Hilfe!
MfG
@LeBeau: sieh's bitte ein: der FT2322 ist ein device und kein host -
oder in anderen worten: an den FT2322 kannst du kein device anhängen ;)
oder nochmals anders: der FT2322 kannst du nur an einen host anhängen.
@LeBeau: Sorry, aber du redest wirr. Ich lese den Thread schon seit
Anfang an mit und habe immer noch nicht verstanden WAS du eigentlich vor
hast. Ich denke damit bin ich auch nicht allein...
>.. TriCore Lädt Dll.Code aus einer SD-Card>.. die Portierung der Code im Speicher des TriCore!>.. Treiber her (mit ner schöne GUI)
Hää?
Sammel dich bitte nochmal und versuch uns Außenstehenden doch
mal erstmal klar zu machen, was das Ziel deiner Entwicklung ist.
Ansonsten kann dir wirklich keiner helfen.
Wie? Du willst den Windows-Treiber für den FT2232 auf deinen TriCore
portieren? Wie kommste denn auf den Trichter? Und was willst du dann
damit steuern? Einen weiteren µC, der per SPI an den FT2232
angeschlossen ist?
Läuft auf dem TriCore ein Betriebssystem? Wenn ja, welches?
Hallo Leute,
ich habe es NUN KAPIERT! deswegen ist auch so ein Forum DA!
Also Master Snowman du hast Recht!
Aber das Löst immer noch nicht mein Problem.
OK ARM-Fan das ist mein Problem:
das will ich realisieren
_______
| | ______
|TriCore|(SPI)----> | |
| | |??????|---> (Geräte)
| | | |
|_______|--| |______|
|________
|SD-Card |
Über SPI will ich mit einem HOST USB CONTROLLER Daten (VOM EXTernen
GERÄTE) austauschen
1. was schlägt ihr als HOST USB CONTROLLER vor?(es soll natürlich ein
sein mit Treiber und DLL)
2. wie realisiere ich das ganze?
Es gibt tatsächlich von FTDI einen Embedded USB Host Controller als
extra Chip, google mal unter Vinculum.
So wie ich es verstanden habe, kommt in deiner Anordnung kein (Windows)
PC vor? Damit kommen natürlich Windows DLL und -Treiber nicht in Frage
und Du musst deine Software zur Ansteuerung entweder auf dem Tricore
selbst programmieren oder zukaufen.
Gruss
Mike
LeBeau wrote:
> Über SPI will ich mit einem HOST USB CONTROLLER Daten (VOM EXTernen> GERÄTE) austauschen>> 1. was schlägt ihr als HOST USB CONTROLLER vor?(es soll natürlich ein> sein mit Treiber und DLL)
z.B. den SL811HS von Cypress. Hat aber kein SPI, also noch nen CPLD
davor, der dessen paralleles Interface auf SPI umsetzt.
Treiber? Häh? dir ist schon klar, das der "Treiber" auf deinem µC laufen
muss, und nicht am PC der dranhängt.
Weiter oben hab ich einen Link gepostet zu einem HOST Treiber (also der
Treiber für den SL811), der sollte sich auch auf deinen µC Portieren
lassen.
danach braucht du aber noch DEVICE-Treiber für alle USB-Geräte, die an
dem Anschluss funktionieren sollen! (Und ja, die müssen AUCH auf deinem
µC laufen)
> 2. wie realisiere ich das ganze?
Nochmal drüber nachdenken, ob du das wirklich so machen willst. Tausch
evtl den Tricore durch einen ARM aus, gibt auch hier im Shop schöne
Eval-Boards dafür.
Vorteil: Alles fertig auf einem Board, Sogar noch Ethernet mit dabei.
Treiber (Sowohl HOST als auch DEVICE) sind kein Problem, da läuft Linux
drauf.
Was willst du denn mit einer DLL auf deinem TriCore? Die DLL ist für
WINDOWS! Auf deinem µC MUSST du dann SELBER den KOMPLETTEN USB-Stack
programmieren, der Treiber ist dann noch das einfachste.
Wenn du nur eine bestimmte Art Geräte anschließen willst, etwa USB
Sticks kannst du den FTDI Vinculum nehmen. Da musst du aber je nach
angeschlossenem Gerät eine entsprechende Firmware (USB Stack) reinladen.
Wenn du aber sowas wie einen universellen USB Host selber bauen willst,
musst du eben den Stack selber programmieren, ebenso Treiber für ALLE
Geräte die du anschließen willst.
Den Treiber und die DLL von FTDI kannst du dafür nicht nehmen.
Das ist echte ne schwere Geburt hier...
Also zusammengefaßt:
- Es wird ein µC mit USB-Host Funktionalität gesucht
-> Da kämen z.B. aktuelle ARMs wie ein LPC24xx in Frage
Sicher auch noch andere. Hab ich grad nur so im Kopf.
-> Der Stack und die "Treiber" wären jedoch selbst zu programmieren
- oder ein Peripheriebaustein für den vorgegebenen(?) µC (Tricore)
wie z.B. den Vinculum, um USB-Host zu realisieren
-> rel. einfaches Interface zum µC
-> für USB-Sticks(Flashspeicher) gut geeignet
- Es soll eine SD-Karte angesprochen werden
-> trivial, dafür gibts genug Beispiele
- Es sollen "USB-Geräte" angeschlossen werden
-> DAS ist der interessante Punkt!
-> WAS sollen das für Geräte sein?
-> USB-Speichersticks oder "alles mögliche" wie Maus, WLAN-Stick,
etc.?
Letzteres entscheidet über die Plattform.
Sollte mehr als nur ein Speicherstick dran sollen, dann führt IMHO
kaum ein Weg an Windows (CE oder XPE) bzw. (Embedded)Linux vorbei,
für die es schon die meißten Treiber fertig gibt.
Verabschiede dich von irgendwelchen DLLs auf µC. Das ist REIN Windows.
Es sei denn du hast ein Windows CE auf deinem TRICORE laufen...
Dann nehme ich alles zurück ;-)
Also, bitte noch etwas genauere Infos zum Projekt.
Naja, zumindest bleibt in dem Thread für andere vielleicht noch
die ein- oder andere hilfreiche Information über das Thema USB hängen...
Dann wars wenigstens nicht umsonst ;-)
Hallo ARM-FAN,
Also NOCHMAL zusammengefaßt:
- Es wird ein µC mit USB-Host Funktionalität gesucht
für den vorgegebenen µC (Tricore) DAS IST RICHTIG!!!
z.B. den Vinculum, um USB-Host zu realisieren
-> rel. einfaches Interface zum µC
-> für USB-Sticks(Flashspeicher) gut geeignet
PROBLEME: treiber nicht vorhanden zumindest auf der Seite von FTDI!
Ich meine in "DLL-PROGRAMMING-GUIDE" sind doch die Routinen beschrieben,
die ich brauche um eine WINDOWS-PROGRAMMIERUNG zu realisieren oder?
(auch nicht vorhanden!!)
- Es soll eine SD-Karte angesprochen werden (RICHTIG!!!)
-> wie willst du sonst deine WINDOWS-ROUTINE im SPEICHER DES Vinculum
kriegen???
- Es sollen "USB-Geräte" angeschlossen werden (RICHTIG!!!)
-> WAS sollen das für Geräte sein? : (elektronische STEUERGERÄTE)
MfG
@LeBeau:
Willst du uns nicht verstehen, oder kannst du nicht?
Windows-DLLs kann man !!!NICHT!!! auf einem µC Laufen lassen.
Wenn irgendwo solche DLLs dabei sind, dienen diese dem Zugriff des PCs
auf den Chip, wenn dieser über USB direkt am PC angeschlossen ist.
Für deine Anwendung ist so eine DLL also !!!KOMPLETT IRRELEVANT!!!.
Ich glaub, du willst es nicht verstehn.
Wenn auf deinem TriCore kein MICROSOFT WINDOWS läuft, kannst du mit
einer DLL rein GAR NIX anfangen. Und für den Vinculum gibts keine
Treiber und keine DLL, ganz einfach, weil man keine braucht. Den spricht
man über SPI an, es gibt lediglich für wenige Geräte (USB-Sticks,
FT-UART-Wandler) eine FIRMWARE, die in den Vinculum muss.
Um deine elektronischen Steuergeräte, was immer das sein mag,
anzusprechen, benötigst du einen UNIVERSELLEN USB HOST CONTROLLER.
KEINEN VINCULUM!!!
Dann musst du dir den USB Stack selber schreiben, den "Treiber" selber
schreiben und für JEDES Gerät, was du ansprechen willst, ebenfalls den
TREIBER SELBER schreiben.
Die SD Karte hat damit GAR NIX zu tun. Die WINDOWS DLLs auch nicht!!!
OK Jungs,
ich habe von anfang an gesagt daß ich so viel Ahnung von dem Thema
hatte!
DANKE für den Support!
es bleiben noch FRAGEN offen.
ICH GLAUBE WIR VERSTEHEN UNS NICHT!
1. ich will kein Betriebssystem auf dem TriCore haben! den UNIVERSELLEN
USB HOST CONTROLLER wovon Christian Richter spricht soll doch lediglich
als Brücke dienen
2. NOCHMAL: ich habe ein PC bzw. Notebook mit USB Anschluß
3. ich habe ein DIAGTester (bestehen aus TriCore + UNIVERSELLEN USB HOST
CONTROLLER) mit ebenfall USB Anschluß
4. ich habe ein elektronische Steuergeräte mit CAN-BUS anschluß
5. PC und DIAGTester sollen über USB verbinden werden
6. DIAGTester ist wieder über CAN mit Steuergeräte verbunden
NUN wie realisiere ich PUNKT 5 ????
MfG
Nun also doch
PC <-- USB --> Dein Schaltung <-- CAN --> Sensoren?
Überleg dir nochmal genau, was wo angeschlossen werden soll, und mal
nochmal ne Graphik...
weil Hierfür brauchst du keinen HOST-Adaptor Chip, Hierfür geht der oben
genannte FTDI, der ein USB-Device ist. Und dann kannst du auch die DLLs
für deine Windows-Applikation am PC verwenden.
Hallo Ernst,
dieSchaltungsteht schon fest wie oben designed!
und auch wie du das gemalt hast ist auch Richtig
PC <-USB-> DIAGTester <-CAN-> Steuergeräte
wenn ich richtig liege braucht den DIAGTester ein USB-Buchse für die
kommukation mit dem PC anders gesagt es wird eine USB-Leitung geben, die
Notebook und DIAGTester verbindet.
und wenn ich richtig gelesen habe komm der FTDI nicht in Fragen oder?
MfG
Egal welche Antwort man gibt, der OP hat jedes Mal eine neue
Variante seines imaginären Projekts in petto...
@LeBeau
Sorry, wenn es dich persönlich angreifen sollte: Aber mit soo
wenig Ahnung von der Materie kannst und wirst du so ein Projekt
nicht auf die Beine stellen können.
Ich würde ja wirklich gerne helfen. Aber wie soll man das, wenn
der OP nicht mal ansatzweise sein Systemkonzept und seine Anforderungen
beschreiben kann?! So viele von den berühmten Glaskugeln bekommen
wir nicht zusammen...
Ich schließe mich an: Macht den Thread zu, bitte!
Wenn ich das richtig verstanden habe, willst du einen Diagnosetester
für´s Auto bauen. Auf der Basis eines TriCore µC. Auf der einen
Seite(Auto-Seite) CAN und auf der anderen Seite(PC, Notebook) USB. So,
da brauchst du doch lediglich einen CAN-Controller, den du vom TriCore
aus ansprichst(per SPI oder parallel). Und den TriCore sprichst du vom
PC aus über USB an. Dazu muss der TriCore USB-Device sein.
Das ganze funktioniert dann auch autonom.
Wieso also der sinnlose Umweg, zwischen TriCore uns CAN nochmal eine
USB-Strecke aufzubauen???
Für die USB Kommunikation kannst du dann einen FTDI nehmen, da ja der
TriCore dann nicht als USB-Host fungiert sondern lediglich als Device,
der HOST ist dann der PC/Notebook.
Es könnte so aussehn:
PC <--USB--> FT232R <--UART--> TriCore <--SPI--> MCP2515 <--CAN-->
Seteuergeräte