Forum: Mikrocontroller und Digitale Elektronik Hohe Datenraten mit FT232H


von Frank B. (frank13)


Lesenswert?

Hallo allerseits!

Ich beschäftige mich gerade mit dem FT232H und möchte die 
Eingangspuffergröße mittels FT_SetUSBParameters() hochsetzen. Da stehe 
ich leider auf dem Schlauch - die Funktion ist in dem vorhandenen 
include-File "FTD2XX.h" nicht referenziert, auch die DLL-Ladefunktion 
kennt die Routine nicht. Ich nutze das Beispiel "dlpvcc2" (Example 1).

Meine Frage ist jetzt: Wo finde ich die Funktion?

Viele Grüße

Frank13

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> die Funktion ist in dem vorhandenen include-File
> "FTD2XX.h" nicht referenziert

Mal die Datei im aktuellen Treiberpaket angesehen?

Die in
http://www.ftdichip.com/Drivers/CDM/CDM%202.08.28%20WHQL%20Certified.zip

enthält sehr wohl das hier:
1
  FTD2XX_API
2
    FT_STATUS WINAPI FT_SetUSBParameters(
3
    FT_HANDLE ftHandle,
4
    ULONG ulInTransferSize,
5
    ULONG ulOutTransferSize
6
    );

Von wann ist Deine "FTD2XX.h"?

von Frank B. (frank13)


Lesenswert?

Hi,

Das war zumindest ein Fehler. Die Headerdatei habe ich ersetzt, die 
DLL-Aufrufe habe ich auch um den Betreffenden erweitert. Jetzt bekomme 
ich "nur" noch einen Linkerfehler (nicht aufgelöstes externes Symbol)... 
Hat da jemand eine Idee? Ich kenne mich mit den VisualC++ Compiler 
leider nicht sehr gut aus. Ich vermute noch irgendwo einen Verweis in 
eine alte DLL-Version.

Viele Grüße

Frank

von Christian R. (supachris)


Lesenswert?

Frank Bußmann schrieb:
> (nicht aufgelöstes externes Symbol)

Da fehlt noch die passende Export Libary (lib), die ist im Treiber Zi 
File mit drin.

von Frank B. (frank13)


Lesenswert?

Hi,

Ich bin schon wieder etwas weiter: Der Funktionsaufruf klappt jetzt 
(zumindest bekomme ich ein FT_OK zurück) - das Beispiel ist doch 
ziemlich arg verwurschtelt. Die Lib war schon vorhanden aber der Aufruf 
der Funktionen geht über eine Unterfunktion die ich übersehen hatte.

Ich komme aber immer noch nicht über ca. 4 MByte pro Sekunde, egal was 
für eine Puffergröße ich nehme. Mal sehen, wo da noch der Wurm steckt...

Viele Grüße

Frank

von Christian R. (supachris)


Lesenswert?

Frank Bußmann schrieb:
> 4 MByte pro Sekunde

Klingt als würdest du pro Transfer nur 512 Byte anfordern. Dann kommt 
man nämlich ziemlich genau bei 4MB/s raus. Forder mal viel größere 
Blöcke an. In einen USB HighSpeed Microframe passen bis zu 11 Pakete zu 
je 512 Byte, erst dann erreicht man die volle Geschwindigkeit. Wenn du 
weniger pro Transfer anforderst, packt der Controller weniger in den 
Frame und der Rest des Frames ist verloren.

von Frank B. (frank13)


Lesenswert?

Hallo allerseits,

Ich glaube, ich habe den Fehler endlich eingegrenzt: Das 
Beispielprogramm ist Murks! Es ist sehr verschachtelt programmiert und 
absolut schlecht nachzuvollziehen. Mir ist während des Debuggens 
aufgefallen, dass die Ausleseroutine für den FTDI innerhalb eines 
periodisch auftretenden Ereignisses implementiert ist in dem auch die 
Oberfläche aktualisiert wird. Das heißt: Das Ganze wird über einen Timer 
angestoßen und damit habe ich minimal 1 ms Abfragetakt - und das dabei 
nichts rumkommt ist klar.
Ich werde morgen mal die Ausleseroutine in einen extra Thread auslagern.
Für heute reichts... ;-)

Vielen Dank für die Hilfe soweit! Manchmal sieht man den Wald vor lauter 
Bäumen nicht...

Viele Grüße

Frank13

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.