Ich suche irgend ein Beispiel wo ein Xilinx XC3S Daten über einen FX2 Chip an einen PC schickt und diese dann dort irgendwie ausgewertet werden. Ich habe bislang leider nur Projekte in Verilog gefunden (habe VHDL gelernt) und die meisten enden quasi am FX2-Chip. Der Weg von dort zu einer PC-Anwendung wurde nirgends verständlich beschrieben. Kennt jemand ein brauchbares, einfaches Beispiel? In der Endanwendung sollen nur Daten von einem 14Bit 60MSPS ADC eingelesen werden, im FPGA gefiltert (läuft bereits) und dann eben (Blockweise) an den PC übertragen werden. Es braucht also keine kontinuierliche hohe Datenübertragungsrate.
Naja, das meiste, was zu tun ist, steckt in der Firmware des FX2. Ich musste mich durch das Manual und die Beispiele von Cypress auch erst mal durchwühlen. Der Rest ist simpel. Der Slave FIFO Modus ist recht einfach zu handhaben, verhält sich wie ein normaler FIFO. Darf dir aber natürlich weder das FPGA Design noch die Firmware für den FX2 schicken. Bei konkreten Fragen kann ich dir natürlich Tipps geben.
Das mit dem FIFO - Modus habe ich schon gefunden, aber leider ohne konkretere Angaben wie man es implementiert und welche Datenrate das Teil dann wegschaffen kann.
Dann solltest du mal hier im Forum schauen. Hatten wir schon öfters. Im Prinzip kannst du eine Beispiel-Firmware von Cypress nehmen und die Register-Einstellungen entsprechend ändern. Ist bissl Arbeit, sich durch das Technical Reference Manual zu ackern, aber es lohnt sich. Datenrate erreicht man etwa 40MByte/s, wenn man 16 Bit breit die Daten anliefert, und der PC die schnell genug abnimmt.
Eine Konkrete Frage hätte ich: Ein Testboard mit dem FX2 will sich nicht an den PC anmelden. Anscheinend schwingt der Quarz nicht. XTALOUT liegt auf 3,3V, an XTALIN messe ich nichts. Ein identisch aufgebautes Board funktioniert aber. Ist das Phänomen bekannt?
Ja. Der RESERVED Pin des FX2 muss an Masse liegen. Oder der Reset passt nicht, das muss sehr schnell gehen, da gibts ein extra Dokument. power and Reset Considerations... oder so.
Reserved liegt auf GND, WAKEUP auch und die Resettimings sind alle überprüft. Auf dem anderen Testboard funktioniert es aber bei gleicher Beschaltung. Der Quarz schwingt nicht an.
Wakeup ist Low-Aktiv. Wenn der auf Masse ist, wird der 8051 ständig mit dem Wakeup-Interrupt befeuert. Mit der Standard-Firmware versucht der dann auch noch, den PC aufzuwecken (Remote Wakeup). Schau mal, ob das eventuell das Problem ist. Wakeup hat ja schon was mit dem Oszillator und der PLL zu tun.
Laut Datenblatt löst eine Änderung des Pegels einen Interrupt aus. In den Hardware considerations steht nur, das der Pin entweder auf Masse oder VCC hängt, vorzugsweise mit 10...100k zum Debuggen
Na gut, hätte ja sein können, dass es daran liegt. Leider weiß ich da nun auch nix mehr. Bei uns laufen die außerordentlich zuverlässig. Auch im Klimaschrank...
Ich habe leider immer noch Probleme mit dem Ding. Die Platine wird extern versorgt. Ist der FX2 nicht am PC angeschlossen oder im RESET, schwingt der Quarz und an CLKOUT werden 12MHz ausgegeben. Sobald jedoch die Windows - Meldung erscheint, dass das Gerät nicht erkannt wurde, stoppt der Oszillator bis das USB-Kabel wieder entfernt wurde. Kennt jemand dieses Verhalten?
Ist denn da schon eine eigene Firmware drauf oder der nackte Chip ohne EEPROm usw?
Das ist der nackte Chip. EEPROM ist noch nicht aufgelötet. Das EZ-USB Control Panel meldet "No Cypress USB Devices detected"
USB Fehler am Chip alle Anschlüsse nachlöten - USB-BUCHSE nachlöten/tauschen Bei windows usbview.exe verwenden und schauen ob Gerät überhaupt von der Hardware erkannt wird - enumeration.
Das Control Panel geht eh nur mit dem alten ezusb Treiber. Für den FX2 gibts einen neuen Treiber, den CyUSB.sys und da passt dann die CyConsole oder die CyConsole in .NET dazu. Aber zum Treiber installieren kommst du ja gar nicht, oder?
Alle Kontakte der USB-Buchse sind nachgemessen. Alles ok. Ich komme eben nicht zum Treiberinstallieren. Am CLKOUT werden bei nicht angeschlossenem PC 12MHz ausgegeben. Stecke ich das Gerät an den PC, stoppt der Takt kurz (einige Zyklen), wird wieder Aktiv (wieder für einige Zyklen) und stoppt dann ganz. Er wird erst nach einem Reset bei ausgestecktem PC wieder ausgegeben.
Für neuere Projekte würde ich anstatt des FX2 ein FTDI Baustein nehmen, kostet weniger, weniger Entwicklungsaufwand, integrierter Clock.
Chris wrote: > Für neuere Projekte würde ich anstatt des FX2 ein FTDI Baustein nehmen, > kostet weniger, weniger Entwicklungsaufwand, integrierter Clock. Unsinn, der FX2 ist aktuell und kostet auch fast nix. Und hat gegenüber dem FTDI einen gewaltigen Vorteil: Die Geschwindigkeit. Mit dem FTDI schaffst du keine 42 MByte/s und der hat auch kein 16 Bit breites Interface. Zurück zum Thema: Ich denke, der Chip ist kaputt, oder im EEPROM (falls vorhanden) ist was ganz seltsames drin, was nicht läuft.
Nimm mal deine externe Spannungsversorgung weg und verwende die USB 5V. Ohne EEPROM muss USBVIEW auch ohne Treiber das Gerät mit Vendor und Product ID anzeigen. Wenn nicht verlangt Windows auch keine Treiberinstallation. Sind auch ohne EEPROM die pullup Widerstände für I2C drin wie gross. Wenn nicht durchaus möglich dass Schrott kommt und das Teil erwartet dass Software aus dem EEPROM geladen wird. Nachmessen hilft oft nicht man muss löten.
Ich hatte das FX2 Board auch mal gekauft. Ich dachte das die Firmware auf dem FX2 bereits drauf ist. Und man nur noch die Daten anlegen muss. So hatte ich das damals verstanden.
Hannes wrote: > Ich hatte das FX2 Board auch mal gekauft. Ich dachte das die Firmware > auf dem FX2 bereits drauf ist. Und man nur noch die Daten anlegen muss. > So hatte ich das damals verstanden. Bei der Fülle an Ansteuermöglichkeiten und Konfigurationen, die der FX2 bietet, wird es DIE universelle Lösung nicht geben. So schlimm ist die Firmware Geschichte aber nicht. Man muss sich halt einlesen und probieren.
Entweder lädt man die Firmware über USB (Standard) oder man setzt ein entsprechend grosses EEPROM ein und speichert dort.
Hat eigentlich jemand eine Loesung, bei der sich ein FX2 mit der Seriennummer aus dem On-Board EEPROM meldet, aber die Firmware von PC vom PC holt?
Das geht leider nicht. Es sei denn, du startest dann aktiv einen neuen Download der Firmware mit anschließenden Renum. Im "Mini"-EEPROM ist nur Platz für VID/PID/DID. Und im großen EEPROM ist die Serial irgendwo drin, je nachdem, wo der Assembler/Linker sie platziert.
Einfach in TD_Init aus EEPROM z.B. bytes 8-16 lesen und nach _UsbSerNo Descriptor kopieren. Liegt ja irgendwo im internen RAM. Eben im DSCR als leeren String anlegen. Beispiel SDCC _UsbSerNo: StringDscr3: .db StringDscr3sz ;; Descriptor length .db DSCR_STRING .db 'S,0,'N,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0,0,'0 ,0,'0,0,'-,0,'0,0,'.,0,'0,0 StringDscr3End: StringDscr3sz = . - StringDscr3
Mein FX2 Board läuft jetzt. War eine kalte Lötstelle. Der Klassiker... Ich habe bereits etwas mit den Beispielen herumgespielt. Soweit alles ok. Was mir noch nicht klar ist, ist wie ich die Daten vom FX2 am PC weiterverarbeiten kann. Die Beispiele gehen eben nicht so weit und alle Infos im Internet scheinen sich nur um Linux zu kümmern (wegen GnuRadio) Kennt jemand ein Beispiel für Windows wo Daten vom FX2 eingelesen und angezeigt werden?
Schau doch mal in das BulkLoop Demo. Ansonsten einfach die API-Dokumentation benutzen.
Schau mal nach Infos über libusb. Damit lässt sich wenn es nicht absolut zeitkritisch ist alles abhandeln. Gute Dokumentation gibt es nur für Linux aber die Windows DLL Version ist von den Aufrufen vollkommen identisch. Du musst eben den Windows Treiber zu libusb installieren. Dann braucht man selbst keine inf Files und eigene Treiber für USB. USB in Windows ist noch grösseres Chaos als das System selbst. http://libusb-win32.sourceforge.net
Ich habe bei Cypress was interessantes gefunden: SuiteUSB.NET 2.0 - USB Development tools for Visual Studio 2005 and .NET 2.0/3.0 leider bricht schon die Installation mit einer Fehlermeldung ab. USB und Windows macht echt Probleme...
Also. LibUSB ist eine feine Sache. Erlaubt aber keine asynchronen Transfers. SuitUSB.NET funktioniert gut, lässt sich auch prima installieren (als Admin), und bringt außerdem einen neueren Treiber mit als die C++ Variante mit der statischen Lib. Allerdings gehen dort die asynchronen Sachen auch nicht, bis hin zum BlueScreen. Synchron läuft recht gut, aber auch mit Tücken. Wir haben´s dann ohne das API gemacht und direkt mit dem Treiber geredet, das klappt zuverlässig. Aber auch erst mit dem 1.8.120 aus dem .NET Entwickler Paket.
Ich verwende für meine Projekte WinUSB. Bisher keine Probleme damit gehabt, asynchrone Transfers funktionieren auch problemlos.
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.