FTDI Handshake funktioniert nicht einwandfrei

OP #1811757
Lesenswert?
• ▲
▼
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
1
//init
2
ftHandle = FT_W32_CreateFile((LPCTSTR)Buffer6,GENERIC_READ|GENERIC_WRITE,0,0, 
3
               OPEN_EXISTING, 
4
               FILE_ATTRIBUTE_NORMAL | 
5
       FT_OPEN_BY_DESCRIPTION, 
6
               0); 
7

8
ftStatus = FT_SetFlowControl(ftHandle, FT_FLOW_RTS_CTS, NULL, NULL );
9

10

11
/* eigentlicher schreibzyklus */
12

13
//set RTS to high 
14
FT_ClrRts(ftHandle);
15

16
//daten reinschreiben
17
BOOL res = FT_Write(ftHandle, &mDataframe, 500, &bytesWritten);
18
if (res != FT_OK)
19
   return;
20

21
//clear RTS 
22
FT_SetRts(ftHandle);
23

24
//time to tx data
25
Sleep(23000);  
26

27
FT_ClrRts(ftHandle);

Von den 500Bytes werden nur 20Bytes übertragen - an der Sleep-Time-Länge 
liegt es nicht. Für Hinweise wäre ich sehr dankbar!

Gruß
Bernd
Gast #1811936
Lesenswert?
• ▲
▼
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
1
ftStatus = FT_SetFlowControl(ftHandle, FT_FLOW_RTS_CTS, NULL, NULL );
der RTS auf low gesetzt wird. Obwohl noch gar nichts zu senden ist etc. 
Mittels
1
FT_ClrRts(ftHandle);
 wird RTS wieder auf high gesetzt.
Persönliche Seite #1811943
Lesenswert?
• ▲
▼
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.
Gast #1812000
Lesenswert?
• ▲
▼
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
1
ftStatus = FT_SetFlowControl(ftHandle, FT_FLOW_NONE, NULL, NULL );
geschrieben werden, dass bei RTS high trotzdem nichts gesendet wird?
Persönliche Seite #1812016
Lesenswert?
• ▲
▼
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.

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.