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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.