Forum: FPGA, VHDL & Co. Projektvorlage FX2 + XC3S


von Luky (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Luky (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Luky (Gast)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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.

von Luky (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Luky (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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...

von Luky S. (luky)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

Ist denn da schon eine eigene Firmware drauf oder der nackte Chip ohne 
EEPROm usw?

von Luky S. (luky)


Lesenswert?

Das ist der nackte Chip. EEPROM ist noch nicht aufgelötet.
Das EZ-USB Control Panel meldet "No Cypress USB Devices detected"

von Wolfgang R. (portside)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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?

von Luky S. (luky)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

Für neuere Projekte würde ich anstatt des FX2 ein FTDI Baustein nehmen,
kostet weniger, weniger Entwicklungsaufwand, integrierter Clock.

von Christian R. (supachris)


Lesenswert?

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.

von Wolfgang R. (portside)


Lesenswert?

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.

von Hannes (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Wolfgang R. (portside)


Lesenswert?

Entweder lädt man die Firmware über USB (Standard) oder man setzt ein 
entsprechend grosses EEPROM ein und speichert dort.

von Uwe Bonnes (Gast)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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.

von Wolfgang R. (portside)


Lesenswert?

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

von Luky (Gast)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

Schau doch mal in das BulkLoop Demo. Ansonsten einfach die 
API-Dokumentation benutzen.

von Wolfgang R. (portside)


Lesenswert?

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

von Luky S. (luky)


Lesenswert?

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...

von Christian R. (supachris)


Lesenswert?

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.

von Mars (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.