Probleme mit cypress FX2

G

Günther Brunner

Guest
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
 
In article <c1i02f$1gddld$1@ID-67491.news.uni-berlin.de>,
=?ISO-8859-1?Q?G=FCnther_Brunner?= <double_s@directbox.com> 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
 
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:

In article <c1i02f$1gddld$1@ID-67491.news.uni-berlin.de>,
=?ISO-8859-1?Q?G=FCnther_Brunner?= <double_s@directbox.com> 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.
 
In article <c1kaih$1jlik9$1@ID-67491.news.uni-berlin.de>,
=?ISO-8859-1?Q?G=FCnther_Brunner?= <double_s@directbox.com> writes:
<...>
|> 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
 
Wie führt man nun effektiv die Entwicklung der Firmware durch?
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
 
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.


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
 
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.
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.

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
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.


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?
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
 
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.
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...).

ja auf der CD. Die A0 Requests Id 22?? im Header file kannst du mit
DeviceIoControl absetzen, Handle vorher holen
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 www.cypress.com.

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.
 
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...).
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.

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

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 www.cypress.com.

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

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?
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
 

Welcome to EDABoard.com

Sponsor

Back
Top