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???
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
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)?
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?
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.