Probleme mit cypress FX2

Hallo,

ich habe ein cypress FX2 Entwicklungsboard erworben und möchte nun in die Programmierung dieses USBfähigen Microcontrollers einsteigen. Meine Erfahrungen auf dem Gebiet USB sind eher gering. Deshalb habe ich mir einen Treiber von Jungo und ein Beispiel geladen. Dieses Beispiel (bulkloop) wollte ich ausführen um das Windowsprogramm und die Firmware zu verstehen um daraufhin eine eigene Entwicklung durchzuführen. Wenn ich allerdings die Firmware über das Windows-Programm bulk_diag.exe in den Microcontroller lade, fragt Windows nach einem entsprechenden Treiber (für EZ USB FX2). Egal welchen Treiber ich auswähle (*.inf Datei), Windows weigert sich das angeschlossene Gerät zu erkennen. Ich habe einen eigenen Treiber mit dem jungo wizard erzeugt, aber dieser wird auch nicht angenommen (also im Gerätemanager installiert). Die nachfolgenden Schritte wie read/write from pipe kann ich deshalb wohl auch nicht durchführen.

Hat jemand vielleicht dieses Beispiel schon einmal zum Laufen bekommen oder ein paar Tipps wie man mit der Programmierung beginnen sollte (erst firmware oder erst host application)?

Vielen Dank.

MfG G. Brunner

Reply to
=?ISO-8859-1?Q?G=FCnther_Brunn
Loading thread data ...

In article , =?ISO-8859-1?Q?G=FCnther_Brunner?= writes: |> ich allerdings die Firmware über das Windows-Programm bulk_diag.exe in |> den Microcontroller lade, fragt Windows nach einem entsprechenden |> Treiber (für EZ USB FX2). Egal welchen Treiber ich auswähle (*.inf |> Datei), Windows weigert sich das angeschlossene Gerät zu erkennen. Ich |> habe einen eigenen Treiber mit dem jungo wizard erzeugt, aber dieser |> wird auch nicht angenommen (also im Gerätemanager installiert). Die

Steht in dem Treiber-Inf auch die richtige Vendor/Produkt-ID-Angabe drin? Da das Testprogramm wohl eine neue Firmware in den Chip lädt (mit anschliessender Re-Enumeration), bekommt er auch eine neue VID/PID.

--
         Georg Acher, acher@in.tum.de
         http://wwwbode.in.tum.de/~acher
         "Oh no, not again !" The bowl of petunias
Reply to
Georg Acher

Die VID/PID ist okay. Ich habe herausgefunden, dass man den FX2 als Jungo-Netzwerkadapter behandeln muss und dann der richtige Treiber automatisch installiert wird (also nicht einen selbst erstellten Treiber wählen). Nach der Installation lassen sich auch Daten in die Pipes schreiben und davon lesen. Jedoch ist die Entwicklung einer Firmware/Host-Applikation ziemlich aufwendig wenn man die Re-Enumeration jedes mal per Hand (Angabe des Pfads etc. durchführen muss). Gibt es keine Möglichkeit die Re-Enumeration mit Hilfe der Keil IDE durchzuführen? Um mit der Keil IDE einen Download der Firmware durchzuführen (was ja eigentlich die Re-Enumeration zur Forlge haben sollte), dann wird vorher noch das Monitor Programm im RAM des FX2 benötigt. Leider kann ich das Monitor Programm nur Downloaden wenn das FX2-Board an einem anderem USB Port hängt (ansonsten erscheint die Meldung im EZ-USB Control Panel, dass kein USB Gerät/Treiber gefunden wurde).

Wie führt man nun effektiv die Entwicklung der Firmware durch?

Gruß, G.B.

Georg Acher wrote:

das

Reply to
=?ISO-8859-1?Q?G=FCnther_Brunn

|> Wie führt man nun effektiv die Entwicklung der Firmware durch?

Gute Frage, ich mach's unter Linux mit sdcc/asx8051 (ist aber noch der FX) :-) Solange der Prozessor nicht ganz in der Pampa ist, kann man die Firmware mit ezload immer draufbekommen. Und nebenbei: Für normale Bulk/Controltransfers braucht man unter Linux keinen Treiber.

--
         Georg Acher, acher@in.tum.de
         http://wwwbode.in.tum.de/~acher
         "Oh no, not again !" The bowl of petunias
Reply to
Georg Acher

Ich beschreibe mal kurz wie ich das beim EZUSB mache: Die Cypress Chips verstehen den Download Request in HW du brauchst also nur einen Treiber der dir vom Usermode einen Zugang zu den A0 Requests gibt. In meinem Fall war das EZ USB könnte aber auch ein selbst geschriebener sein. Die Inf zu dem Treiber stellst du so ein, dass dein Treiber enumeriert. In der Firmware schaltest du ReEnum ein und voila die Firmware springt an. Die Download Firmware könnte in deinem Fall der Monitor Code sein. Anschliesend kannst du mit dem Keildebugger deine FW via ser. Schnittstelle (MON51) an den Cypress schicken und debuggen. Diese ganzen Prozeduren und auch die Downloadoptionen sind sehr ausführlich in den Ref Manuals beschrieben. Deine Firmware enthält dann wiederum einen Enum Call der letztendlich deine Ziel PID / VID enthält worauf dein Custom Treiber anspringt. Die notwendigen Tools selber zu schreiben ist wenigen Stunden erledigt.

Um es nochmal klarzustellen: Solange eine Firmware keinen ReEnum Call enthält hast du das Default Device. Wie das beim FX 2 aussieht sagt das Manual. Meine Erfahrungen mit Jungo sind nicht so besonders nimm am Anfang lieber die Cypress Treiber. Das oben beschriebene stimmt vieleicht nicht

100% für den FX 2 das Prinzip bleibt aber immer gleich. Im Cypress Treiber ist der Mon51 download schon im Treiber integriert. den Monitor nachzuladen ist deshalb nur dann notwendig,wenn du einen anders konfigurierten Mon51 brauchst.

Thomas

Reply to
Thomas Zepf

Momentan gehe ich so vor, dass ich erst den Monitor lade (mit EZ-USB Control Panel) und dann im Keildebugger die Firmware in den FX2 lade. Beim ersten Mal springt dann die Windows Hardwareerkennung an und ich installiere den selbst konfigurierten Jungo Treiber (*inf Datei). Aber wie macht man dies mit dem Original-Cypress Treiber? Ich habe keine Software auf der Cypress CD gefunden, die mir alle USB Geräte listet und dann die Generierung einer INF file durchführt (ist nur die PID/VID zur eindeutigen Identifizierung des USB Geräts wichtig?). Mit dem Jungo Wizard geht dies relativ einfach. Aber ich würde auch gern den Originaltreiber benutzen - schon weil dieser bestimmt nicht Lizenzpflichtig ist und den automatischen Monitordownload bei der Enumeration durchführt. Wo kann ich nun die benötigten Treiber von Cypress finden? Gibt es auch ein Beispiel zum Zugriff einer host application auf das USB Gerät?

Vielen Dank für die nützlichen Infos.

Gruß, G.B.

Reply to
=?ISO-8859-1?Q?G=FCnther_Brunn

Das ist immer dann der Fall wenn keine gültige Kennuung im EEprom steht. UsbView meldet dann sowas wie EZUSB (EEprom missing) Abhilfe: ins EEprom eine gültige Kennung schreiben und den Cypress Treiber verwenden. Die haben das vorbereitet. Schau dir mal die Cypress Infs genauer an.

Im Prinzip nur PID VID es gibt aber noch mehr CLASS, &VID , &PID ,&MI, &REF wobei die specifier in dieser Reihenfolge in der Hirachie abgefragt werden. Ich kenne die Jungo Sachen jetzt nicht im Detail, wenn du aber 2000 benutzt hast und den Jungo als Klassentreiber eingerichtet hast, (inf mit CLASS specifier) bekommst du warscheinlich nicht mehr den Cypress zu Gesicht. Windows läd bei Klassentreiber immer die definierte Klasse. Dass habe ich auch mal gemacht und nie mehr weg- bekommen.

ja auf der CD. Die A0 Requests Id 22?? im Header file kannst du mit DeviceIoControl absetzen, Handle vorher holen

Es wird jetzt aber ziemlich OT für die Elektronik NewsGroup. Das sind jetzt reine Software Sachen.

Thomas

Reply to
Thomas Zepf

So hat es funktionoert. Ich habe das Board jetzt auf "internes EEPROM" umgeschaltet und nun wird der Cypress Treiber für die Enumeration genommen, der auch gleich den Monitor lädt. Nun bleibt nur noch die Frage wie ich auch bei der Re-Enumeration den Cypress Treiber benutzen kann. Momentan nehme ich hierfür dann den Jungo Treiber (sorry wenn diese Frage zu sehr in Richtung Windowsprogrammierung geht...).

Auf der zugehörigen CD habe ich jedenfalls keine Infos oder Treiber gefunden. Bei Cypress kann man wohl ein "USB Developer's Studio" herunterladen, aber zzt. gibt es irgendwie Probleme bei der Registrierung bei

formatting link

Kannst Du die Aussage "Die A0 Requests Id 22?? im Header file kannst du mit DeviceIoControl absetzen, Handle vorher holen" noch mal ein bisschen erklären?

Besten Dank.

G.B.

Reply to
=?ISO-8859-1?Q?G=FCnther_Brunn

Noch motzt ja keiner :-) Einfach eine Inf schreiben die bei der von dir gewählten VID / PID denn Cypress Treiber verwendet. Am besten wird es sein den Treiber umzubenennen. Die Cypress Inf kannst du als Basis verwenden. Wenn du mit dem Design fertig bist, wird die Firmware einfach zum Treiber dazugelinkt (Hex2Bix) und im EEprom die VID / PID abgelegt und fertig. Alternativ kannst du auch aus dem EEprom booten. Ich mach das so bei meinen Designs. Diese Sachen sind aber alle gut dokumentiert. Vieleich solltest du mal in ANxxxx Ezusb Ordnern nachschauen.

nicht nur zur Zeit. Ich habe da seit Oktober Requests offen, aber bis auf dämlichen Marketing Emails passiert nichts. :-(

Georg hat das ja auch schon geschrieben der Vendor Request A0 funktioniert immer braucht also keine Firmware Unterstützung. Es muss lediglich ein Treiber da sein mit dem du die Vendor Requests absetzen kannst.

Der Ablauf ist dabei wie folgt: - Handle holen - Device in Reset setzen - Firmware schicken - Device aus dem Reset nehmen - Handle schliesen.

Hier ein Beispiel:

UINT8 ResetVaL; HANDLE EzHandle; VENDOR_OR_CLASS_REQUEST_CONTROL VendorRequest;

EzHandle=CreateFile('\\.\Ezusb-0', GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,0); if (EzHandle != INVALID_HANDLE_VALUE) { // toDo VendorRequest mit Parameter füllen 0xA0 ....usw result = DeviceIoControl( EzHandle, IOCTL_VENDOR_OR_CLASSREQUEST, //

0x22 &VendorRequest, &ResetVal, // Reset auf 1 sizeof(ResetVal), // = wLength 1 BytesReturn, 0); if (result) { ... // Hex Datei an das device schicken // dazu kannst du den gleichen Request benutzen } // Reset wegnehmen CloseHandle(); }

Fertige Downloadsoftware habe nur für den ANxxx Chip und in Delphi, da ich in C++ nicht wirklich gut bin. Die Reset Parameter sind beim FX 2 anders. Das Control Panel von Cypress ist im Source auf der CD verfügbar. Der Code ist aber ziemlich chaotisch.

Thomas

Reply to
Thomas Zepf

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.