Hi,
ich versuch grad mal den FT4232H IC mit FT_FLOW_RTS_CTS zu betreiben.
Die RTS Leitung wird zwar mit FT_SetRts/FT_ClrRts gesetzt, aber es
werden von den übertragenen Daten nur ein Bruchteil wirklich auch
gesendet an die UART.... momentan hab ich keine Ahnung an was das liegen
mag
Ich weiß auch nicht warum die Befehle ClrRts und SetRts genau
andersherum funktionieren :-) - aber ok
Sicher, dass das richtig herum ist? Normal ist CTS und RTS Low-Aktiv.
CTS = Low bedeutet, du kannst Daten senden. Wenn du bereit bist, Daten
zu empfangen, setzt du RTS auf Low. Und wieso machst du das manuell, und
lässt das nicht die Logik im Chip machen?
Christian R. schrieb:> Sicher, dass das richtig herum ist? Normal ist CTS und RTS Low-Aktiv.> CTS = Low bedeutet, du kannst Daten senden.
Dass das anscheinend irgendwie verdreht ist, stimmt komischerweise.
>Wenn du bereit bist, Daten> zu empfangen, setzt du RTS auf Low. Und wieso machst du das manuell, und> lässt das nicht die Logik im Chip machen?
Das hab ich noch nicht ausprobiert, d.h. das müsste eigentlich ohne dem
ganzen Clre/SetRTS gehen? Hab lediglich bemerkt, dass gleich nach dieser
Code-Zeile
Bernd Schuster schrieb:> Das hab ich noch nicht ausprobiert, d.h. das müsste eigentlich ohne dem> ganzen Clre/SetRTS gehen?
Genau so sollte es sein.
> Hab lediglich bemerkt, dass gleich nach dieser> Code-Zeile> ftStatus = FT_SetFlowControl(ftHandle, FT_FLOW_RTS_CTS, NULL, NULL );> der RTS auf low gesetzt wird.
Damit ist der automatische Handshake aktiviert.
> Obwohl noch gar nichts zu senden ist etc.
RTS ist nicht eine "Ankündigung", daß etwas zu senden da ist, sondern
ein Steuerausgang für die Gegenseite, mit der Empfangsbereitschaft
signalisiert wird.
> Mittels> FT_ClrRts(ftHandle);> wird RTS wieder auf high gesetzt.
Das solltest Du bei aktivem automatischen Handshake tunlichst bleiben
lassen, dem fasst Du damit gewissermaße zwischen die Beine.
Rufus t. Firefly schrieb:> Damit ist der automatische Handshake aktiviert.
ist es dann auch normal dass gleich zu beginn RTS auf low gesetzt wird?
Ich dachte dieser ist per default erstmal high und wird nur wenn was
gesendet wird auf low gezogen für diese Zeit?
Bernd Schuster schrieb:> Das solltest Du bei aktivem automatischen Handshake tunlichst bleiben> lassen, dem fasst Du damit gewissermaße zwischen die Beine.
noch eine Frage, gibt es auch die Möglichkeit diesen Handshake manuell
durchzuführen? Muss dazu lediglich
Bernd Schuster schrieb:> Ich dachte dieser ist per default erstmal high und wird nur wenn was> gesendet wird auf low gezogen für diese Zeit?
Nein, RTS hat nichts mit dem Senden zu tun. RTS dient dazu, einer
sendenden Gegenstelle mitzuteilen, ob sie senden darf oder nicht. Der
korrespondierende Eingang dazu ist CTS, damit wird von der empfangenden
Gegenstelle Sendefreigabe erteilt.
Was willst du denn damit erreichen? Wenn deine Gegenstelle CTS auf Low
setzt, darfst du Senden. Und da brauchts doch keine extra Mitteilung,
dass gesendet wird, denn das merkt die ja, dass was kommt.
Rufus t. Firefly schrieb:> Nein, RTS hat nichts mit dem Senden zu tun. RTS dient dazu, einer> sendenden Gegenstelle mitzuteilen, ob sie senden darf oder nicht
ok, dann hab ich die beiden Signale grad verwechselt. D.h. der RTS würde
erst dann auf high gezogen, wenn der receive-Buffer voll ist?
Ja, so sollte das aussehen.
Wenn Du übrigens ein Signal benötigst, das während des Sendens von
Daten aktiv ist, dann sieh Dir mal im Datenblatt die Beispielbeschaltung
für den RS485-Betrieb an, da wird dieses Signal zur
Sende-/Empfangsumschaltung des RS485-Transceivers verwendet - das aber
hat mit Handshake nichts zu tun.