Daten vom FT245BM zum Rechner schicken?

Gast #128014
Lesenswert?
• ▲
▼
Hi

Ich habe ein Problem mit dem Senden von Daten von dem USB Controller
FT245BM zum Rechner.
Während das Empfangen der Daten vom Rechner wunderbar funzt, klappt das
Senden überhaupt nicht.
Als Software habe ich dieses D2XX Demo Programm von FTDI im Delphi
Code. Das Programm an sich ist total beschissen, aber die Functionen
und Proceduren sind ganz nützlich. Wenn ich nun Daten senden will,
schreibe ich die ja in den Transmit-FIFO. Die Software holt dann diese
daraus, allerdings nur in Paketen, deren Größe man im Quelltext der
Software festlegen kann. Nun hab ich festgestellt, das die zu sendene
Datenmenge immer ein Vielfaches dieser Packetgröße sein muss, da die
Software nur volle Packete empfängt; d.h keine leeren oder halbvolle
oder.. usw. . Beim Senden von Daten vom Rechner zum FT245BM, was
ebenfalls mittels Datenpaketen geschieht, ist das nicht so. Da kann das
letzte Datenpacket eine Variable größe haben, womit die zu sendene
Datenmenge ebenfalls variabel ist. Da nun die Software nur volle
Packete empfangen will, erkennt sie auch keine leeren. D.h.ist der FIFO
nach dem Auslesen leer, und es stehen keine Daten mehr zur Verfügung,
erkennt das die Software nicht, und wartet auf neue Daten. Somit hängt
nun das Programm, weil es auf etwas wartet was nun mal nicht kommt. Nur
ein Trennen der USB Verbindung macht dem Program klar, das keine mehr
kommen, und die empfangenen Daten werden gespeichert.

Also: Wie kann ich Daten variabler Größe verschicken und wie kann die
Software erkennen, das keine Daten mehr im Transmit FIFO liegen?

Danke!
Gast #128015
Lesenswert?
• ▲
▼
Hallo,

ist bei mir schon was länger her, aber über die Paketgrösse musste ich
mir keine Gedanken machen. Ich hatte einen Denkfehler in der
Ansteuerung durch den Mikrocontroller (Aufbau war PC <-> FT245 <->
AVR). Ich hatte auch das Delphi Beispiel verwendet.


Gruss
Andreas
Gast #128016
Lesenswert?
• ▲
▼
Hallo Martin,
naja also "beschissen" würde ich die Software erst mal nicht
unbedingt nennen. Immerhin ist es ein Ansatz für eigene Entwicklungen
und man bekommt es für lau.
Was die Daten im FIFO angeht, werden die automatisch vom FTDI an den PC
gesendet, wenn er lehr ist natürlich nicht mehr.
Diesen Vorgang kann man aber durch verschiedene Parameter beeinflussen,
z.B. indem man die Größe des RXQueue oder den Legacytimer auf dem
Rechner verändert. Das Warten auf einen RX-Buffer der eigentlich lehr
ist, kann man durch verändern des RX-Timeouts z.B. auf 1000ms
vermeiden.
Man bekommt dann nach 1s einfach die Daten zurück, die drin waren mit
dem Parameter ret_bytes (gelesene Bytes). Wenn keine Daten drin standen
ist sein Wert eben einfach 0.

Steht auch alles in den Appnotes:
-Data Throughput, Latency and Handshaking
-Optimising D2XX Data Throughput
-D2XX Programmers Guide

Gruß Andreas

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.