Hallo, ich muss eine große Datenmenge (bis zu mehrere hundert MB) seriell übertragen. Dazu verwende ich einen FT232RL angeschlossen am ATmega324P (16Mhz). Baudrate ist 1MBaud. Wenn ich größere Datenblöcke, z.B. 50kB direkt übertrage (vom ATmega324P zum PC) kommt es vor, dass ab und zu genau 1024 Bytes Frame-Error aufweisen (zeigt zumindest Hterm an). Ich verwende kein Handshaking und keine Paritybits. Kann es sein, dass der PC zu langsam ist und es zum Buffer overflow kommt? (Wie findet man sowas raus? Ansteuerung der seriellen Schnittstelle erfolgt unter Windows mit den API-Funktionen.) Hat sonst jemand Erfahrungen bei großen Datenmengen und hohen Baudraten mit dem FT232RL? Gruß, Domi
In der Systemsteuerung steht max. 115200 Baud und das ist ja wohl << 1MBaud. Mag sein das die FIFO mehr kann, aber ob z.B. Windows da Bock drauf hat, steht in den Sternen
Nein, das tut es nicht. Windows unterstützt sehr wohl auch serielle Schnittstellen mit höheren Baudraten als 115200, nur die Standard-Schnittstellen, wie sie in PCs vorhanden sind, tun das nicht. Probleme bei der Verwendung hoher Baudraten sind auf zu kleine übertragene Datenblöcke zurückzuführen, das ist insbesondere bei USB-Übertragung ein Thema, da dort nur im Millisekundentakt überhaupt Datenpakete übertragen werden. Hinzu kommt die Granularität des Windows-Schedulers, die normalerweise bei 10 msec liegt und auch nur auf 1 msec reduziert werden kann. Also müssen die Pakete ausreichend dimensioniert sein, um die Datenmenge einer (oder gar 10) Millisekunde(n) aufnehmen zu können und auch die auf der Clientseite des PCs verwendete Applikation muss entsprechend große Datenblöcke von der seriellen Schnittstelle abnehmen. Lesen und Verarbeiten einzelner Bytest ist da definitiv nicht angesagt.
Ich lese immer Blöcke von 514 Byte (512 Byte Daten + 2 Byte Checksumme). Allerdings kann es sein, dass die Checksumme, also die zwei letzten Bytes, etwas verzögert gesendet werden. Das merkwürdige ist ja, dass ich auf einem alten Notebook (IBM, T20 mit Win2000) gar keine Probleme habe. Auf meinem neuen Notebook (Samsum X20 mit WinXP) treten die oben beschriebenen Fehler auf.
Handshake sollte immer gemacht werden (RTS/CTS oder DTR/DSR), da so gut wie immer die Möglichkeit besteht, dass die Sende/Empfangspuffer überlaufen können. > Ich lese immer Blöcke von 514 Byte (512 Byte Daten + 2 Byte Checksumme). > Allerdings kann es sein, dass die Checksumme, also die zwei letzten > Bytes, etwas verzögert gesendet werden. http://www.ftdichip.com/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf
Der PC ist definitiv nicht zu langsam. Ursache dürfte hier HTerm, ein schlechtes Übertragungsprotokoll und der FTDI-Treiber sein.
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.