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