www.mikrocontroller.net

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


Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Ekkehard Domning (ekkehard)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Thomas S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat den keiner eine Idee woran es liegen kann?

Autor: DerDan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


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


mfg

DerDan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.