mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FT245 Buffer Problem


Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende das FT245-Modul zum versenden von Daten von meinem
Mikrocontroller an einen PC. Hierzu schreibe ich die gewünschten Bytes
in den Buffer und schicke diese durch ein high am SND Pin ab. (Dies
geschieht beim nächsten USB Data-In request). Und hier ist wohl auch
mein Problem: Denn wenn ich schnell (d.h. alle 50 bis 60µs) Daten in
den Buffer schreibe scheint dieser nach kurzer Zeit überzulaufen und
die Daten werden nicht schnell genug abgeschickt und damit aus dem
Buffer gelöscht! Resultat: Es werden nicht alle Bytes übertragen!
...wie kann ich Abhilfe schaffen???
Danke. Tobi

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bir mir funktioniert das eigentlich problemlos.
Der FT245 hat 384Bytes.
Wenn du alle 50us sendes, reicht der Buffer für 19,2ms und das sollte
für USB eigentlich kein Problem sein.

Was verwendest du zum Empfangen der Daten auf dem PC ?

Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich verwende das "DLP Design Test Application" Terminal Programm
(später soll es Borland C++ Builder empfangen). Jedoch mit dem
Virtuellen Com Port! Ich habe gelesen, der D2XX wäre schneller!?
Was genau passiert: Ich schreibe alle 50µs 11Byte in den Buffer und
sende diese mit den SND Pin ab! Also wäre der Buffer nach etwa 1,75ms
voll.

Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade den DLL Treiber installiert...aber das selbe Problem! :-(

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert das ganze denn, wenn du weniger Daten sendest (z.B. die 11
Byte alle 500us) ?

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

was passiert denn mit dem TXF/ Pin? Solange der Low ist solltest du
nichts in den FTDI schreiben.

Matthias

Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es jetzt wie folgt getestet:
Ich schreibe mehrere Meßzyklen (a 11Byte) in den Buffer und sende sie
dann zusammen ab; soll heißen nachdem z.B. 187 Byte in Buffer sind,
wird gesendet. Mit der Methode habe ich 4488 Byte schon Fehlerfrei
übertragen können (12Meßzyklen a 11 Byte). Doch bei 13Meßzyklen
(4862Bytes und höher) kommt es erneut zu Fehlern!
Ich habe auch deinen Rat befolgt die Datenrate von 50µs auf 500µs zu
reduzieren, doch das führt zu keiner Veränderung! :-(

Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klare Diagnose, der Buffer ist voll - TXF Pin geht auf high! ...obwohl
ich Datenpackete in den Buffer schreibe und sie dann mittels SND Pin
abschicke! Laut Datenblatt sind 300Kbyte/s mit dem VCP möglich! Ich
will ja nur 220Kbyte/s (11Byte alle 50µs)!!! Wie zum Teufel kann da
mein Buffer überlaufen??

Autor: sous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mir mal genau ansehen, was im PC passiert. Wenn dort die Daten
nicht aus dem Puffer genommen werden, läuft auch irgendwann alles über.

Gruß, Michael

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Klare Diagnose, der Buffer ist voll - TXF Pin geht auf high! ...obwohl
ich Datenpackete in den Buffer schreibe und sie dann >mittels SND Pin
abschicke!

Das kommt davon, wenn man keine Datenlätter liest:
TXE#: When high, do not write data into the FIFO.

Weiterhin steht im Datenblatt:
The Send Immediate / WakeUp signal combines two functions on a single
pin.
During normal operation (PWREN# = 0), if this pin is strobed low any
data in the device TX buffer will be sent out over USB on the next
Bulk-IN request from the drivers regardless of the pending packet size.
This can be used to optimise USB transfer speed for some applications.
Tie this pin to VCCIO if not used.

Wenn du die Daten also sendest (was man eigentlich nicht braucht, da
der FT245 alleine entscheidet, wann er sendet), dann heißt das nicht,
dass die Daten sofort weggehen, sondern die Daten werden erst im
nächsten Zeitintervall gesendet, wenn der PC USB wieder abfragt !
Da du die Packetgröße reduzierst, können weniger Daten in jedem
Abfrageintervall übertragen werden.

Lass also den SND Pin weg, und frag stattdessen TXE ab !

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Datenrate von 300kB lässt sich übrigends leicht erreichen (zumindest
von PC -> uC). Mit dem VCP Treiber habe ich schon über 600kByte/s
erreicht.
Allerdings muss dazu die Packetgröße entsprechend groß gewählt werden:
Solche Datenraten erreicht man nur, wenn man die Daten in einigen
10kByte Blöcken an den Virtuellen COM Port übergibt bzw. davon liest.

Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich denn die Häufigkeit der Abfrage (also das USB Data-In
request) beeinflussen, z.B. bei mein Borland C++ Builder? Damit die
Daten möglichst schnell aus dem USB Puffer rauskommen.

Klar ist, dass ich TXF nun teste bevor ich reinschreibe. Also brauche
ich eine Sendepuffer, in den ich schreibe, wenn TXF high ist und aus
dem ich in den FT245 Puffer schreibe, wenn TXF wieder low ist. Habt ihr
da einen Realisierungsvorschlag? ...bin noch nicht so lange dabei!

Autor: TobiasP. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, Lösung des ganzen: Ich sende in Packeten a 222 Byte mittels
Puffer! Läuft super!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.