Hallo zusammen, hab mir ne angepasste Firmware für einen FX2 geschrieben. Aber obwohl ich im Device Descriptor erstmal die VID/PID/DID aus den Cypress Beispielen verwende, meldet mir Windows, das dass Gerät nicht richtig erkannt werden konnte und daher auch kein Treiber installiert wurde?! Komm da grad nicht so richtig weiter ... hab den Projektordner mal in den Anhang gepackt ... vllt kann ja mal jemand drüber gucken. Soll ein reines "streaming" Device sein und nur Daten über EP6 an den Host schicken. Ep6 daher mit AUTOIN, Quad Buffer, BULK IN konfiguriert. Danke & Gruß Stefan
Also ich hab die IIC Datei aus deinem Zip File mal auf mein FX2 Board ins EEPROM geschoben, das klappt. Inf Datei noch angepasst, dann lädt der Treiber und in der CyConsole wird der EP86 mit 1024 Byte max. paketgröße angezeigt.
Danke Christian! Der Hinweis mit der INF hat mir geholfen. Grml mal wieder H / L Byte verdreht. Naja, nu hab ichs ... Nebenbei gefragt ... für private Bastelzwecke ... spricht irgendwas gegen ne PID / DID 1234?
Wenn das Gebilde deine privaten Räumlichkeiten nicht verlässt, kannst du machen, was du willst. Cypress VID und eine PID deiner Wahl und dann ist gut. Verkaufen kannst du das Ding nur mit eigener VID. Kostet 2000 US$. Achja. Mach mal nicht 1024 Byte Pakete bei Bulk, das klappt nicht gut. Aus irgend einem Grund ist das total langsam. Nimm 512 Byte, Quad-Buffer und hole gleich massig Daten auf einmal ab, also ganzzahlige Vielfache von 512 Byte, dann wird das richtig schnell. Achja, KernelTransferSize noch hochsetzen, 128kibyte ist ein guter Wert. Und das komische REVCTL Register ist auch mit Vorsicht zu genießen....ich hab das nicht angefasst, dann funktioniert der Chip so wie er soll. Mit der 0x03 da drauf gibts seltsame Effekte..... Und nochwas: vergib Seriennummern, dann musst du nicht jedes Mal Admin sein, wenn du das mal an einen anderen Port ansteckst.
N'abend! @Christian: Danke für deine bisherigen Antworten, ... und für die die hoffentlich ncoh kommen :-) ... die Tips aus deinem letzten Posting hab ich grade noch nicht in meine Firmware implementiert ... werd ich wohl morgen machen ... Im moment kämpfe ich mit der Fehlermeldung: USBD_STATUS_XACT_ERROR (0xC0000011) Diese erhalte ich sobald ich Versuche die Daten die mein FPGA in den FX2 schreibt mit einem Bulk Transfer versuche abzurufen. Meist hat ein solcher Transfer Versuch zur Folge, dass mir danach die EZ-USB Controll abstürzt. Versuche den USB Bus mit UTLog zu überwachen und sehe dort diese Fehlermeldung. Bin aber im Moment ratlos, ob diese Fehlermeldung durch mein FPGA Design Verursacht wird, der FX2 also irgendwie "unsauber" beschrieben wird, oder ob das Problem in der FW des FX2 liegt. Habe versucht mir die Schnittstelle zwischen FPGA und FX2 (Datenbits, SLWR und FLAGB auf einem Digital-Scope anzeigen zu lassen. Ist ein wenig schwierig zu beobachten ... sollte aber denk ich funktionieren. hat irgendjemand nen Tipp für mich wie ich da besser debuggen kann, bzw. einen Ansatzpunkt wo der oder die Fehler noch begraben sein könnten? Gruß, stefan
Stefan K. schrieb: > Im moment kämpfe ich mit der Fehlermeldung: > > USBD_STATUS_XACT_ERROR (0xC0000011) > > Diese erhalte ich sobald ich Versuche die Daten die mein FPGA in den FX2 > schreibt mit einem Bulk Transfer versuche abzurufen. Meist hat ein > solcher Transfer Versuch zur Folge, dass mir danach die EZ-USB Controll > abstürzt. EZ-USB Controll? Was ist denn das? Versucht du etwa den alten ezUSB Treiber mit dem FX2 zu benutzen? Für den FX benötigst du den CyUSB.sys Treiber und zum einfachen Testen diese CyConsole oder diese .NET Umsetzung.... > Bin aber im Moment ratlos, ob diese Fehlermeldung durch mein FPGA Design > Verursacht wird, der FX2 also irgendwie "unsauber" beschrieben wird, > oder ob das Problem in der FW des FX2 liegt. Hm, naja, wenn man sich an das Timing hält, kann man da höchstens das BlockEnde vergessen oder so 8ist bissl tückisch), aber ansonsten....was im FIFO ist, ist drin. > Habe versucht mir die Schnittstelle zwischen FPGA und FX2 (Datenbits, > SLWR und FLAGB auf einem Digital-Scope anzeigen zu lassen. Ist ein wenig > schwierig zu beobachten ... sollte aber denk ich funktionieren. Naja, Speicher-Oszi und/oder Logik-Alayzer helfen schon. Allerdings bei dir etwas schwierig, da du offenbar immer Daten streamst und nicht auf Anforderung. Achso, Vorsicht mit asynchronen Anfragen über die CyAPI, die gehen meist schief, da musst du über device io control direkt auf den CyUSB Treiber arbeiten (ist eh besser). Mit dem aktuellen Treiber (3.4.1.20) gibts auch keine Bluescreens bei vielen parallel gestellten asynchronen Anfragen mehr.
Christian R. schrieb: > > Achso, Vorsicht mit asynchronen Anfragen über die CyAPI, die gehen meist > schief, da musst du über device io control direkt auf den CyUSB Treiber > arbeiten (ist eh besser). Mit dem aktuellen Treiber (3.4.1.20) gibts > auch keine Bluescreens bei vielen parallel gestellten asynchronen > Anfragen mehr. meinst du den hier ? http://www.cypress.com/?rID=34870
Thomas R. schrieb: > meinst du den hier ? > > http://www.cypress.com/?rID=34870 Genau. Der klappt gut.
Hallo zusammen. Dank dem Tipp mit dem CyUSB.dll hab ich es nun geschafft Daten aus meinem FPGA zu holen, ohne das mir die Console (respektive der Rechner) abstürzt. Leider bekomme ich nicht die Daten heraus, die ich in meinem Chip gerne sehen würde. Nach Bulk Anforderung meldet die Konsole ein:
1 | Bulk IN Transfer |
und anschließend ein
1 | Bulk IN success |
Jedoch besteht der inhalt der empfangen Daten immer nur aus Hexadressen und 00 00 00 00 00 00 00 00 00 ... Ich übertrage also nur Nullen über den USB Bus. Also muß mein Problem nun wohl doch noch am Timing bei der Eintaktung der Daten aus meinem FPGA in die EP6 FIFOs liegen. Gibts da noch irgendwas spezielles auf das ich achten muß? Mein PKTEnd wird nach 512 geschriebenen Bytes gesetzt ... das SLWR wird bei einer fallenden Flanke zu Null gesetzt ... mit der folgenden steigenden Flanke soll der FX2 die Daten laut Datenblatt übernehmen ... und mit der danach folgenden Flanke wird das SLWR wieder auf high gesetzt. Als Schreibttakt wird der interne IFCLK des FX2 mit 30MHz verwendet, welchen ich mir an den FPGA ausgeben lasse. So ein mist mir gehen da langsam die Ideen aus wo der Fehler noch liegen könnte. Gruß, Stefan K.
kurze Frage am Rande ... sollte ich hierfür eher einen neuen Thread aufmachen? weil zur Überschrift passts ja nun nicht mehr ... oder kann man die Überschrift ändern?
Wenn immer Nullen sind, denke ich mal, das ist kein Timing Problem. Dann wären komische "verwurstete" Daten. Und bei 30MHz ist das alles recht gemütlich. Ich fahre mit 40Mhz ext. IFCLK und aktualisiere die SLWR, SLRD und PacketEnd Signale bei der steigenden Flanke des um 90° verzögerten Taktes. Somit halte ich selbst im schlimmsten Fall noch alle Setup- und Hold Zeiten ein. Im Anhang mal das Schreiben eines einzelnen Wortes mit anschließendem Paket-Ende in den FX2. Übrigens: Wenn du alle Pakete nach 512 Byte schon abschließt, kommst du auf eine maximale Datenrate von etwas über 4MB/s. Reicht das?
Das PKTEnd hab ich durch einen Zähler in der FSM eingebaut der mit einer Generic verglichen wird. Daher kann ich die Größe der Pakete mehr oder weniger anpassen. Hatte vor mich an die Größe der Pakete langsam ran zu tasten. Schonmal danke für dein Beispiel das werde ich morgen mal näher anschauen.
Hab mir grade dein Beispiel mal angeguckt, ...von der Taktung SLWR zum IFCLK unterscheiden wir uns eigentlich nicht maßgeblich (abgesehen von der Taktinvertierung) ... Aber ein paar Fragen hab ich doch noch ... Du hast da ein USBOE (Out enable?) ... muss ich das konkret auf High legen? Da ich keine Ausgabe in dieser Richtung realisert habe, dachte ich ich könnte mir das sparen. Habe diesen Pin glaub ich auch über die Einstellung des IFCONFIG[1:0] zu einem normalen IO Pin gemacht ... schau ich mir aber gleich nochmal an. Und dann kann ich noch mit den drei Signalen usb_pa0, usb_pa3 und usbbe nicht wirklich was anfangen. Wofür stehen die? Insbesondere usbbe interessiert mich da weil dort ja noch mal ein Low Toggle drin ist ... Gruß, Stefan P.S.: Ich werd gleich nochmal ein Bild von meinem aktuellen Timing posten.
Hm, naja, ich hab ja bidirektional, da muss das OE natürlich zum Schreiben auf den FX2 auf High. PA0 und PA3 sind nur ein paar zusätzliche Steuersignale, die kannst du ignorieren. USBBE ist das PacketEnd. (BE Block Ende). Vielleicht liegts an dem fehlenden OE, ich glaub nicht, dass man das generell weglassen kann... Soweit ich das in Erinnerung habe, muss aber IFCONFIG 1:0 11 sein, damit das Slave FIFO Interface überhaupt an ist...
Erfolgsmeldung... Fehler lag wohl an dem fehlenden OE. Jedenfalls funktionierts nun richtig und ich sehe meine Daten erfolgreich und "vermutlich" korrekt in der CyConsole. Nochmal ne Frage zur KernelTransferSize ... ist die im Treiber oder in der Firmware des FX2 zu suchen ? ... DANKE nochmal für alle hilfreichen Wortmeldungen! Gruß, Stefan K.
Die ist im Treiber einstellbar und sollte möglichst hoch sein (ganzzahlige Vielfache vom 512 Byte).
Also nicht in der INF ... beudet ich muß den Treiber CyUSB.sys neu kompilieren ?
Nein, das ist eine Funktion, die du entweder über das CyAPI oder direkt auf IOControl des Treibers anwenden kannst.
Hallo, das Thema ist zwar schon etwas älter. Meine Frage bezieht sich auch nur auf den ersten Teil. Ich versuche mir auch gerade eine FW zu basteln und habs bisher einfach nicht hinbekommen. Da habe ich mir gedacht ich lade einfach mal die funktionierende FW von hier runter. Auch das hat leider nicht funktioniert. Die FW ins EEPROM geladen. Wenn ich dann das USB device ausstecke und wieder einstecke kommt nur wieder VID=PID=0. Das kann doch nicht sein oder? Ich hoffe mir kann mal jmd. helfen :-/ Vielen Dank schonmal Grüße Thomas
Hast du die fertigen iic Files genommen oder selbst erzeugt? Das Programm, dass die iic Files erzeugt, braucht ein paar Kommandozeilen Parameter....
Hi Chris, Ich hab das iic selbst erzeugt. Mit den folgenden Parametern. -i -r -v 0x04B4 -p 0x8613 -c 0x41 -f 0xC2 -o fw.iic fw.hex Um das ganze zu vereinfachen habe ich einfach mal das Programm angehängt. Im grunde gibt es nur ein Rechteck auf edm Pin A0 aus. An der Hardware muss ich nichts verändern oder? Also alle pins hängen "frei" in der "Luft". Danke für die Antwort. Tom
Ich schau mir das mal an. In meinem hex2bix steht kein -r drin. Außerdem verlangt der die VID und PID Byte-gedreht.
mh.. das ist richtig, der Reset am ende des files fehlt. reset hier zu müsste es lauten E6 00 01 oder nicht? VID und PID sind aber meiner Meinung nach schon richtig. Laut TRM : EEPROM Address Contents 0 0xC2 1 Vendor ID (VID) L 2 Vendor ID (VID) H 3 Product ID (PID) L 4 Product ID (PID) H 5 Device ID (DID) L 6 Device ID (DID) H 7 Configuration byte Somit kommt zuerst das low und dann das high byte und da ich ja -v 0x04B4 und -p 0x8613 habe sind diese genau gedreht. Oder nicht? Grüße, Tom
-v 0x04B4 und -p 0x8613 bewirkt dann im Gerätemanager eine VID B404 und PID 1386. Ich hab das mal getestet, meldet sich nicht an am PC. Ich guck mal weiter. Hast du mal meine Slave-FIFO Test Firmware hier aus dem Forum probiert anzupassen? Oder das BulkLoop Beispiel? Das läuft auf jeden Fall.
Also ich hab es gerade eben nochmal mit der FW aus diesem Thread probiert. Auch hier passiert nichts. Ich weiß nicht ob ich beim laden ins EEPROM etwas falsch mache. Ich beschreibe einfach mal kurz mein vorgehen. Ich lade zuerst die vend_ax.hex mit dem "download"-button ins RAM. Anschließend lade ich mit EEPROM die *.iic ins EEPROM. Dann stecke ich die Spannungsversorgung (im moment das USB Kabel ab) und wieder an. Dann müsste aus dem EEPROM gebootet werden oder nicht? Was hier jetzt komisch ist. Normalerweise kommt das device also "Unbekanntes Gerät" aber mit deiner FW die du hier gepostet hast passiert einfach gar nichts. Ich werde jetzt denk mal das BlukLoop ausprobieren... Danke schonmal für deine Hilfe. Tom
Hm, also ich programmiere das in der CyConsole. Das Gerät in der Liste auswählen -> Options -> EZ USB Interface -> Lg EEPROM. iic File auswählen. Fertig. Dann abstecken und anstecken. Mehr ist es nicht. In dem .NET USB Control Center ist es noch einfacher. Gerät aufwählen -> Programm FX2 -> 64k EEPROM. Fertig.
mh, also bei der CyConsole, die ist ja bei dem Cypres Dev. version dabei. Ich hab die jetzt mal geladen und installiert. ich kann das EZ-USB Interface öffen, aber nichts anklicken. Ich kann auch vorher schon kein USB Device auswählen, weil keines angezeigt wird. Ich habe das board von Brain Technology (USB High Speed Interface 2.5) das dürfte ja trotzdem gehen oder? Mir ist gerade aufgefallen, das wenn ich etwas in das EEPROM lade mit dem EZ-USB Control Panel, ganz am ende noch ein Pending befehl drin steht. ("Pending: OpIndex=50: OpType=3=Vendor Request"). Bei dir meldet er sich dann wieder an mit der hier geposteten Version?
The CyConsole communicates with USB devices via the CyUSB.sys device driver. Only USB devices serviced by the CyUSB.sys driver can be accessed from the CyConsole application. Jetzt bin ich etwas verwirrt. Ich verwende doch den ezusbw2k.inf treiber oder nicht?! verwendet ihr etwa den CyUSB?
Ich hab überhaupt kein EZ USB Control Panel. Wenn du in der CyConsole nix programmieren kannst bzw. nicht mal Geräte angezeigt bekommst, hast du offenbar den hundealten EzUSB Treiber für das Board installiert. Nimm mal den CyUSB Treiber. Ist auch im Entwicklerpaket dabei. Die CyConsole ist übrigens auch in dem kleinen Entwicklerpaket, wo die .NET DLL dabei ist usw. mit drin. Also, welchen Treiber nutzt du? Falls doch cyUSB.sys dann mal in der CyConsole auf den letzten Reiter gehen und evtl. in der Drop Down Box den passenden auswählen. Diese Brain Boards hab ich auch hier. Mal abgesehn davon, dass die offenbar ein 8-Klässler beim Abendbrot geroutet hat, funktionieren sie eigentlich. Anstatt des EEPROM-Deaktivier-Widerstandes hab ich einen jumper eingelötet, um mal schnell das EEPROM auszuschalten. Edit: Das hat sich jetzt überschhnitten. Ja, der ezusb Treiber ist steinalt. Aktuell ist der CyUSB Treiber.
mh... ok, wie eben schon oben geschrieben hatte ich wohl den alten Treiber. Naja ich weiß nicht mit was mein vorgänger gearbeitet hat, aber ich glaube jetzt habe ich mal wieder ein weiteres grundsätzliches Problem gelöst ;) Die FW die ich programmiert habe geht noch immer nicht, aber jetzt kann ich zumindest nochmal anfangen alles zu testen und auszuprobieren und nochmal dein slave_fifo versuchen zum laufen zu bringen. Du hast nicht zufällig einen fehler in meiner anderen FW gefunden oder? Danke schonmal. Grüße Thomas
Nee, ich hatte dann erst mal keine Zeit mehr. Probier mal mein Slave FIFO oder das BulkLoop Demo. Kannst du ja leicht abändern dann.
ok, jetzt sieht die welt schon ganz anders aus ;) er bootet aus dem EEPROM und gibt auch wieder das Rechteck aus :) Nur die VID/PID sind dannach = 0000 naja jetzt muss ich eben mal schauen waran das liegen kann, aber jetzt gab es zumindest mal ein Fortschritt ;) Danke Chris Ich hoffe, die unterschiedlichen Laufzeiten werde mich nicht betreffen... sonst wird das alles noch kritischer ;) Gruß Thomas
Hallo ich bin es schon wieder. Das booten aus dem EEPROM klappt jetzt. Allerdings, verwende ich den T0 und natürlich auch eine ISR. Wenn ich das jetzt versuche einzubinden, dann findet die renumeration nicht mehr ordnunggemäß statt. ich vermute, dass sich der 8051 irgendwie verliert. Also dass der pointer auf die service routine irgendwie nicht passt. Muss ich da etwas verändern?! Beim kompilieren kommmt auch schon die Fehlermeldung, dass ein teil des Programmes nicht durchlaufen wird und dann wird genau der name der ISR angezeigt. Zuvor hat die ISR ja problemlos funktioniert (im RAM ohen FW natürlich). Kann mir da jemand weiter helfen. Es kann doch eigentlich nicht sein, dass die Programme im RAM laufen und wenn ich sie dann ins EEPROM schreibe, dass ich sie komplett verändern muss oder? Ich hab das Projekt einfach mal angehängt. Ihr könnt es euch ja bei gelegenheit einfach mal anschauen oder einfah eure Ideen posten, was ich beachten muss/sollte. Danke schonmal. Grüße Thomas
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.