Forum: Mikrocontroller und Digitale Elektronik USB CyAPI - Zugriff auf Firmware


von Neuling (Gast)


Lesenswert?

Hi,
ich arbeite gerade mit dem EZ USB FX2LP USB Controller von Cypress. Ich 
habe dafür eine Firmware geschrieben und in den Baustein geladen. Nun 
ist mir leider nicht ganz klar, wie ich von Windows aus "Befehle" zum 
steuern übertragen kann.
Ich habe gesehen das es die CyAPI gibt. Das auslesen der Endpoints und 
Device Infos funktioniert. Hiermit habe ich dann versucht Daten 
auszulesen, jedoch ohne erfolg. Ich habe zum Übertragen der Daten 
XferData versucht zu verwenden.
Aber irgendwie ist mit der richtige zugriff zum Starten von funktionen 
der Firmware nicht klar.
Wie kann man dies machen???

von Ekkehard D. (ekkehard)


Lesenswert?

Was für Funktionen meinst Du?
Eigene Funktionen (z.B. einen Port setzen/löschen, lesen) musst Du 
selber implementieren.
Dafür bietet sich der EP1 an.
Deine Firmware macht den EP1OUT scharf und wartet auf "Daten vorhanden". 
PC seitig schreibst Du dann z.B. ins erste Byte eine Befehls nummer 
(z.B. 0x01 = PortA schreiben), ins zweite byte den Wert. Deine Firmware 
kann dann den Befehl lesen und ausführen.
Als Antwort schreibst Du dann in den EP1IN (z.B. ein Status Byte) und 
machst den EP1IN mit 64 Byte scharf (dann kann Deine XferData routine 
immer genau auf 64 Bytes warten!).
Gruß Ekkehard

von Thomas S. (Gast)


Lesenswert?

Hier werd ich mich mal anschließen. Ich habe ein ähnliches 
Verständnisproblem.
Ich habe mit dem GPIF Designer ein Timing Diagramm erstellt und in die 
Firmware "eingebunden" und in den EEPROM geladen. Wie kann ich jetzt von 
der PC Host Anwendung den Ablauf des erstellten Timings starten? Und wie 
vordere ich die Daten die gelesen werden sollen an und empfange diese am 
PC(Endpoints, Buffer, Transfer)?

von Thomas S. (Gast)


Lesenswert?

Habe jetzt mal ein wenig rumprobiert. Wenn ich mit den Programmen von 
Cypress mal was an den Control Endpoint schicke, dann kann ich über die 
Bulk Endpoints auch Daten lesen. Was ich nicht weis ist, ob nach der 
"Initialisierung" die erstelle Waveform mit dem GPIF Designer immer 
durchlaufen werden. Hab gerade keine Oszi hier um dies zu prüfen. In der 
Initalisierungsphase wird GPIF_init() aufgerufen. Reicht das schon und 
die Waveforms werden jetzt immer durchlaufen?
Was würdet ihr zur Programmierung empfehlen....die CyApi oder libusb? 
Kann die libusb alles was auch die CyApi kann? Hat da einer schon 
erfahrung mit?

von Christian R. (supachris)


Lesenswert?

Mit dem GPIF kenn ich micht nicht aus, das is zu langsam und zu 
kryptisch, ich arbeite mit den Slave FIFOs, die Daten werden eh von 
einem FPGA angeliefert.

Zum API: Mit dem CyUSB kannst du auf alle Funktionen des FX2 zugreifen, 
die LibUSB kann nur einige wenige. Wenn du nur Bulk-Transfer machst, ist 
das meiner Meinung nach einfacher mit der LibUSB, ist aber eher 
subjektiv. Es ist weder schneller noch langsamer, ich fand die CyAPI nur 
bissl aufgeblasen.

von Thomas S. (Gast)


Lesenswert?

Arbeite jetzt mit der libusb und habe ein Problem. Ich habe ein Vendor 
Command zum Test geschrieben um die Firmware Version auszulesen. Nutze 
zum testen die Cy USB Console funktioniert das auch wie gewünscht. Nun 
habe ich dies mit folgender Zeile versucht mit der libusb zu 
realisieren:

char test[4];
int rv = usb_control_msg(usb_han, 0x80, 0xb1, 0x0000, 0x0000, test, 4, 
1000);

0xb1 ist hier das Vendor Command für die Firmware. Laut USB 
Spezifikation ist 0x80 korrekt. Soweit ich das verstehe, müsste die 
Antwort der Firmware in test gespeichert werden. Wenn ich das Programm 
nun ausführe bekomme ich folgende Fehlermeldung: Error: usb_control_msg: 
invalid request 0xb1

Wenn ich alternativ zu 0x80 mal 0x40 nehme, kommt kein Fehler, jedoch 
bekomme ich anscheineint keine "vernünftige" Antwort vom USB Controller 
zurück.

Hat einer ne Idee wo der Fehler liegen kann?

von Thomas S. (Gast)


Lesenswert?

Hat den keiner eine Idee woran es liegen kann?

von DerDan (Gast)


Lesenswert?

Hallo,


ich denk mal es liegt an der 0x80, hier sollte eine 0xc0 stehen.
1
Bit7    = 1        -> vom Gerät zum Host
2
Bit6,5  =  10      -> Vendor spezifisch
3
Bit4..0 =    00000 -> Device
4
          --------
5
          11000000  = 0xC0


mfg

DerDan

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.