FT2232H USB 2.0 High Speed

Gast #1747229
Lesenswert?

Ich habe ein Board mit einem FT2232H und einem Spartan 3A. Nun möchte 
ich Ansteuerung für den sync. FIFO Modus erstellen. Der 60MHz Clock vom 
FTDI-Chip geht direkt auf einen GLOCK Pin vom FPGA.

Die Daten vom AD-Wandler habe ich in einem Block-Ram geschrieben. 
Probleme habe ich jedoch bei der Übertragung der Daten vom FPGA zum 
FTDI-Chip.

Die THE# Leitung bereitet mir Bauchschmerzen. Diese Leitung gibt an, ob 
der FIFO vom FTDI-Chip voll ist oder nicht. Wenn der FIFO voll ist 
besitzt die TXE#-Leitung einen High-Pegel.

Hat jemand schon mal die Ansteuerung vom diesem FTDI-Chip hinbekommen?
Gast #1747771
Lesenswert?

> Die THE# Leitung bereitet mir Bauchschmerzen. Diese Leitung gibt an, ob
> der FIFO vom FTDI-Chip voll ist oder nicht. Wenn der FIFO voll ist
> besitzt die TXE#-Leitung einen High-Pegel.
Die Beschreibung zum THE-Signal kann ich im DB nicht finden => 
Tippfehler?

> Bauchschmerzen hab ich!
Und weswegen? Du hast zwei Möglichkeiten: Du wertest die TXE-Leitung 
aus, und bist auf der sichersten Seite, oder du ignorierst sie und 
schreibst so langsam, dass trotzdem nix passiert (Möglichkeit drei wär 
noch sie zu ignorieren und so schnell zu senden, dass TXE wieder seine 
Daseins-Berechtigung bekommt, aber wer das macht, ...).

Ralf
Gast #1748000
Lesenswert?

Ohne FIFO und eine State Machine, die von TXE und Deinem Schreibsignal 
gesteuert wird, wirst Du recht haeufig Aussetzer bekommen. Wenn Deine 
Daten dann groesser als ein Byte sind, kommst Du aus dem Tritte. 
Ausserdem wird irgenwann mal dein PC beschaeftigt sein, dann musst du 
komplette Datensaetz verwerfen.

Ich schreibe etwa jede Mikrosekunde einen Block von 8 16-bit Worten. Das 
erste Wort ist ein Zahler. Wenn beim Einlesen der Zaehler gesprungen 
ist, dann gabe es einen Aussetzer. Seit letzen Donnerstag laeuft die 
Auslese:

362078.08s total time 4804248.334 MiB captured 13585.2 kB/s curr rate 
13587.0 kB/s totalrate 106 dropouts

Die Aussetzer gibt es, wenn ich am PC arbeite. Am unbelastenen PC gibt 
es keine Aussetzter.
Angehängte Dateien:
Gast #1748235
Lesenswert?

Ja es heist TXE :-)

Ich überlege ob ich den 60 MHz Takt verdoppeln muß ,damit ich nicht 
Daten an den FTDI-Chip sende, obwohl er beschäftigt ist.

Es dürfen keine Daten verloren gehen, daher Buffer ich die Daten 
ausreichend im FPGA zwischen. Wie gut dies funktioniert werde ich dann 
ja sehen.
Gast #1748257
Lesenswert?

Nein, nicht verdopppeln. Aber falls man schreiben wollte und 
zwischenzeitlich TXE ein volles Fifo signalisiert hat, muss man richtig 
handeln.

Ausserdem haben TXE and WR sehr harte Zeitanforderungen, mit einer 
Taktverdoppelung wird das nicht einfacher.

Hast Du den Verilog Code in meinem Posting entdeckt?

Welche Datenrate hats Du? Du musst immer damit rechnen, dass der PC 
gelegentlich fuer 20 oder mehr Millisekunden beschaeftigt ist. In der 
Zeit kann einiges an Daten anfallen, so viel Speicher wirst Du nicht in 
Deinem FPGA haben. Daher brauchst Du auch eine Strategie fuer den Fall, 
dass der Puffer voll ist.
Gast #1748387
Lesenswert?

Du meinst wirklich das der PC 20ms beschäftigt ist. Das denke ich mal 
ist viel zu lange. Man kann einen eigenen Prozess starten (hohe 
Priorität) so das die Daten regelmäßig übertragen werden.

Wenn ich das richtig verstanden habe, dannkann doch über die SIWUA 
Leitung eine Übertragung erzwungen werden?

Momentan rechne ich mit einer Datenübertragungsrate kleiner 10MByte.
#1748670
Lesenswert?

Wo ist das Problem? Sobald FIFO voll gemeldet wird, musst du deine 
interne FF-Kette oder was auch immer das auslesen aus dem BlockRAM 
steuert, einfrieren. Wir verwenden Cypress FX2, da geht das genauso. Das 
Timing ist zwar haarig, aber es klappt zuverlässig. Wir haben sogar 
Pausen von bis zu 50ms festgestellt. Wohlgemerkt, wenn der PC "nichts" 
zu tun hat. Wenn da noch andere Anwendungen laufen, wirds noch 
schlimmer. Wir verwenden daher 128k FIFO im FPGA nur für die USB 
Pufferung und erreichen so konstante 40MB/s.
Gast #1748829
Lesenswert?

SIWUA kannst Dui verwenden, wenn der FT eine Transfer anstossen will, 
obwohl sein Puffer voll ist. Aber wenn der PC keine daten anfordert, 
dann hilft das auch nicht.

Das FIFO in meinem Code ist kein externes Ram, sondern ein BRam im 
Spartan6.

Ein PC mit Windows oder Linux ist halt kein Echtzeitsystem.
#1749716
Lesenswert?

Welcher Treiber wird im OS benutzt?

Bei USB kann man mit vielen gleichzeitigen asyncronen USB requests z.B. 
100 die dann auch noch minimal  131072 bytes abholen viel erreichen.
Man muss eben sicher sein dass alle USB Frames voll genutzt werden.
Da lassen sich Datenmengen abholen bis der Hautspeicher voll ist ohne 
dass die Anwendung davon was merkt. Eventuell muss man sich dann seine 
eigenen Treiber schreiben aber alles läuft  Interrupt getrieben im 
System ab und die Anwendungen warten. Dann bleibt von der Aussage dass 
Win und Linux kein Echtzeit Betriebssystem sind nicht viel übrig.
Insbesondere dann wenn man beachtet dass Echtzeit OS nix mit 
Übertragungsleistung zu tun hat sondern nur eine Reaktion auf Ereignisse 
in nach vorgeschriebener Zeit verlangt.
#1749884
Lesenswert?

Trotz massiv paralleler asynchroner Anfragen (bis zu 100 Transfers zu je 
128kiByte) kommt es immer mal zu Aussetzern. Weiß der Geier, was Windows 
da tut. Muss man halt ordentlich puffern, dann kann man das überbrücken. 
Da wir auf externe Triggerereignisse reagieren müssen und keinen 
einzigen verpassen dürfen, mussten wir dort massive Pufferung einbauen. 
Dann klappts aber problemlos.
Gast #1751473
Lesenswert?

Ich kann den kompletten BlockRam des FPGAs nutzen um Daten 
zwischenzuspeichern. Ich schau mal gleich nach wie viel Block Ram der 
FPGA besitzt und wie lange ich dadurch zwischenspeichern kann.

Ich werde mal berechnen wie viel Zwischenspeicher ich für 50ms benötige.
Gast #1751489
Lesenswert?

Mein FPGA besitzt 0,36MBit BlockRam

Mein AD-Wandler digitalisiert mit maximal 8MHz. 1Sample besteht aus 2 
Byte. Demnach habe ich eine Datenfransferrate von 16MByte pro Sekunde 
(128MBit). Der FTDI-Chip soll ja so um die 25MByte schaffen.

Wenn ich also 50ms zwischenspeichern möchte ,dann benötige ich einen 
FIFO mit 400k Speicherzellen je 16Bit. Das ist auf jedenfall zu viel für 
den FPGA

@ Christian

Habe ich das richtig verstanden, das Du einen FIFO mit 128k Werten als 
Buffer benutzt? Damit kannst Du dann aber keine 50ms überbrücken.
#1751518
Lesenswert?

Johann schrieb:

> Habe ich das richtig verstanden, das Du einen FIFO mit 128k Werten als
> Buffer benutzt? Damit kannst Du dann aber keine 50ms überbrücken.

Richtig. Bei voller Geschwindigkeit reicht das nicht aus. In der 
aktuellen Anwendung haben wir nur eine kontinuierliche Datenrate von 
4...5 MB/s zu garantieren. Das aber eben garantiert über eine komplette 
Messung (7 bis 10 Minuten). Da darf nix verloren gehen. Tuts auch nicht.
#1751559
Lesenswert?

Auf jeden Fall pro USB Transfer requests  mit jeweils  128k Grösse 
aufsetzen damit der Protokoll Overhead bei USB so gering wie möglich 
ist. Die 128k sind USB spec geschuldet.

Christian hat ja auch über die USB Transfergrösse von 128k gesprochen.

Und immer nur einen USB Kanal pro HUB benutzen
Gast #1752085
Lesenswert?

Das das teil direkt am Mainboard angeschlossen wird ist es schwer 
herauszufinden wie das Mainboard intern aufgebaut ist. Da die Daten zu 
einem Bild zusammengesetzt werden, dürfen auf keinen Fall Daten verloren 
gehen. Deshalb muß ich mich wohl noch nach größeren externen Speicher 
umschauen. Bis jetzt fand ich immer den DualSRAM von Cypress sehr 
interessant, jedoch ist dieser extrem teuer.

eine Ansteuerung für DDR-Module ist für die kurze Entwicklungzeit zu 
aufwendig, deshalb werde ich mal nach FIFOs suchen.
Gast #1752089
Lesenswert?

Oh man sind die FIFOs teuer. Ich habe einen FIFO von IDT 18M (1M x 18) 
gefunden (kostet ca. 200USD)

Dies ist deutlich zu teuer.

Gibt es nicht einfach anzusteuernden externen Speicher für wenig Geld?
Gast #1752150
Lesenswert?

Wir haben gerade 15k Euro für die Entwicklung des 1. Prototypen Boards 
ausgegeben, da kann ich nicht einfach auf den Spartan 6 wechseln. Ich 
habe mal nachgeschaut es gibt den XC6SLX45-2CSG324C von Xilinx dieser 
besitzt 2MBit BlockRAM. Außerdem ist dieser nicht wirklich verfügbar

Nach QDR-SRAM habe ich momentan noch nicht geschaut.

Wo bekommt man denn den 72V285 für 45€? Die Verfügbarkeit der IDT FIFOs 
ist nicht besonders gut. Ich habe mal bei Digikey und AVNET 
nachgeschaut.
Gast #1752183
Lesenswert?

>Wir haben gerade 15k Euro für die Entwicklung des 1. Prototypen Boards
>ausgegeben
Und jetzt fragst du nach nem Chip? Das weiss man normal vorher.

>Wo bekommt man denn den 72V285 für 45€?
Na die Preise werden sich bei den Distris (evtl Scantec) ja nicht so 
unterscheiden. (zugegeben, IDT ist nicht gerade an jeder Ecke verfügbar)

--könnst aber auch nen grösseren Spart3 nehmen--
Gast #1752193
Lesenswert?

Der XC3SD1800A besitzt 1,5MBit (ca. 42€) und der XC3SD3400A (ca. 55€) 
besitzt 2,2MBit internen BlockRAM (kosten unter.

Ich habe auf dem Board nicht so viel externen RAM vorgesehn, da laut 
FDTI bis zu 25MByte pro Sekunde übertragen werden können. Ich habe nicht 
daran gedacht das so lange Datenübertragungspausen entstehen können.

ICH habe noch PSRAM von Micron gefunden. (32MBit für ca 6$)

Hat jemand schon mal so ein PSRAM benutzt? Ich werde mir heute mal das 
Datenblatt durchlesen. Die Ansteuerung der internen BlockRAM FIFOs ist 
natürlich für mich deutlich einfacher zu gestalten.

http://avnetexpress.avnet.com/store/em/EMController/Memory/PSRAM/_/N-100409?action=products&cat=1&catalogId=500201&cutTape=&inStock=&langId=-1&proto=&rohs=&storeId=500201&topSellers=
Gast #1752229
Lesenswert?

Ganau daran habe ich auch gerade gedacht. So ein Cypress SRAM kostet 
2,5USB und hat 2MBit. Allerdings muß ich dann einen SRAM-Controller im 
FPGA realisieren.

Ich speicher die Daten vom AD-Wandler in einem FIFO. Wenn dieser 
halbvoll ist dann überträgt der der SRAM-Controller die Daten in den 
externen RAM.
Gast #1752270
Lesenswert?

>Allerdings muß ich dann einen SRAM-Controller.....
brauchst doch (fast) nur ein SRAM-Adr-Pointer-Reg, das beim Einschreiben 
ins Soft-FIFO, inc wird (und beim Auslesen dec wird) ...........
(Soft-FIFO ist nat. nicht so schnell machbar, wie echtes FIFO, aber es 
wohl in den meisten Fällen reichen)
Gast #1752729
Lesenswert?

Momentan versuche ich mich an der Inbetriebnahme des FT2232H mini Module 
(Evaluatiob Board). Ich habe das FT2232H gekauft. Auf dem IC steht dies 
auch und auf dem Board ebenfalls. Ich benutze den neusten Treiber für 
WinXP. Im Gerätemanager werden jedoch 4 Serielle Ports angezeigt und die 
Bezeichnung laut Vendor ID heist FT4232H.

Dies verstehe ich nicht. Wie kann ich das Module überreden im Sync FIFO 
Modus zu laufen?

Ich habe die WR# Leitung ständig auf GND gelegt, so das unendlich viele 
Daten vom FTDI an den PC gesendert werden müssen. Jedoch kommt einfach 
nichts an. Der Buffer ist immer leer. Ich habe noch nicht die CLK 
Leitung untersucht. Im sync FIFO Modus muß der FTDI Chip einen CLK von 
60MHz erzeugen.

Ich habe das FT_PROG Tool von FTDI bereits heruntergeladen und 
ausprobiert, jedoch kann ich dort nicht den Modus umstellen.
Gast #1755054
Lesenswert?

Ich habe noch mal mit der Lupe auf das IC geschaut es ist wirklich der 
FT2232H, jedoch wird durch den Gerätemanager und das FT_PROG der FT4232H 
erkann. So wie es aussieht ist die falsche PID-Nummer auf dem IC oder 
dem externen EEPROM hinterlegt. Daher ist es mir nicht möglich den Modus 
zu ändern.

Wie kann ich denn die PID überschreiben?
Gast #1755202
Lesenswert?

Ich habe es noch mal mit MPROG 3.5 versucht.

Wenn ich ein Template für den FT4232H erstelle und dann auf 
programmieren Drücke erhalte ich folgende Fehlermeldung "Error reading 
device"

Wenn ich ein FT2232H Teplate erstelle und dieses auf den FT2232H 
hochladen möchte erhalte ich folgende Fehlermeldung: "No Devices Found"

Es ist einfach nur die falsche PID Nummer im EEPROM gespeichert. Der 
FT2232H besitzt die PID 6010 und der FT4232 die PID 6011. Deshalb 
erkennt Windows den FT2232 Chip als FT4232 und ich bekomme dies einfach 
nicht weg.
Gast #1755562
Lesenswert?

Wenn icj auf Erase klicke (Mprog 3.5) dann erscheint unten in der Box 
"Erase successful Device 0" Wenn ich dann auf Scan klicke dann erscheint 
folgendes:

Number Of Blank Devices = 1
Number Of Programmed Devices = 0

Was auch immer das Programm mir damit sagen möchte.


Was passiert eigentlich wenn ich den EEPROM vom FTDI-Chip trenne. Wird 
dieser denn mit der richtigen PID erkannt oder steht die falsche PID im 
FTDI-Chip?
Gast #1756086
Lesenswert?

Wolfgang R. schrieb:
> MProg funktioniert wie die Chips, alles nur zur Hälfte gedacht.
>
> Um MProg zu benutzen muss man etwas spielen, z.B. zuerst File/Open
> anklicken dieses open abbrechen erst dann ist Device/Erase oder Programm
> möglich.
>
> Scan sollte ein Device Zeigen, Tools/Read etc testen.


Auch mit dieser Methode funktioniert es nicht.
Gast #1756098
Lesenswert?

Sehe ich das richtig das die VIP und PID im FTDI-Chip gespeichert 
werden. Wenn jedoch ein externer EEPROM aneschlossen ist, dann werden 
die Informationen von der PID und VID und die 
Konfigurationsinformationen im externen EEPROM abgespeichert?

Wenn ich dann den externen EEPROM vom FTDI-Chip trennen würde, wird der 
Chip mit Sicherheit als FT2232H erkannt. Ist dann der syn. FIFO Modus 
das Standardmodus ohne externen EEPROM?
Gast #1756112
Lesenswert?

Den FTDI-Support habe ich bis jetzt noch nicht angeschrieben, da 
normalerweise die richtige PID im EEPROM steht. Ich denke mal der 
Hersteller der Boards einfach nur die flasche PID ins EEPROM 
reingeschrieben hat und dies nicht so einfach zu beheben ist. Deshalb 
will ich mal 1 neues Board kaufen.

Ich hatte das Board von RSONLINE. Jetzt werde ich mal ein neues bei 
Farnell bestellen. Wenn ich heute mal Zeit habe werde ich auch denn 
EEPROM auslöten
Gast #1756706
Lesenswert?

So ich habe den EEPROM ausgelötet. Dies hat überhaupt nichts gebracht. 
Der FTDI-Chip wird immer noch als PID 6011 anstelle von 6010 erkannt. 
Nun kann ich nicht mal mehr einen Treiber installieren.
Gast #1757464
Lesenswert?

Heute habe ich mein 2. 2232H mini Module erhalten. Diesmal habe ich es 
bei Farnell bestellt. Wenn ich das Module das 1. mal an den PC 
anschließe wird die neue Hardware erkannt. Mich macht schon stutzig das 
es als "Quad RS232-HS" erkannt wird.

Wenn ich im Gerätemanager dann die Geräteerkennung anschaue sehe ich 
schon wieder die PID 6011 anstelle der 6010. Demnach hat dieses Module 
das gleiche Problem wie das Andere.
Gast #1758011
Lesenswert?

So den Fehler habe ich gefunden.

Man muß beim VCCIO an 3,3V einspeisen. Ich habe nur den 5V vom USB Bus 
mit dem Sapnnungsregler verbunden. Zusätzlich muß man den Ausgangs des 
3,3V Spannungsreglers auch mit den VCCIO verbinden.

Dann wird der CHIP auf als FT2232H in Windows erkannt.


Jedoch kann ich jetzt auf meinem Notebook nicht mehr den Treiber 
installieren. Die Treiberinstallation erzeugt immer einen Fehler.Ich 
habe schon den FTCLEAN verwendet.
#2268877
Lesenswert?

Hallo!

Falls der Thread-Ersteller noch mitliest: ich habe derzeit das Problem, 
dass ich mit dem FTDI Morph-IC-II mit einem FT2232H chip und einem 
Cyclone II FPGA keinen Daten-Burst hinbekomme, sondern max. alle 4 Takte 
ein Byte rausschieben kann (da TXE# sofort high geht, sobals WR# low 
geht), und somit nur eine max. Datenrate von 10Mbyte hinbekomme. Siehe 
Beitrag "FT2232H in FT245 FIFO Mode - kein Burst möglich" .
Gibt es die Möglichkeit, den Codeausschnitt, der im FPGA zum 
rausschieben der Daten verantworklich ist (TX state machine), zu 
bekommen? Oder zumindest einen Signalverlauf?
Das würde mir bestimmt helfen.

Gruß

thomers

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren