Forum: Mikrocontroller und Digitale Elektronik Daten vom FT245BM zum Rechner schicken?


von Martin (Gast)


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!

von Andreas Hesse (Gast)


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

von hebel23 (Gast)


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

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.