Der Betreff sagt schon alles: Ich benötige eine Unterscheidung bei den übertragenen Daten zwischen Befehle und Daten, daher brauche ich irgendwie ein 9. bit. Kann man sowas mit einem FT... machen, und wenn ja wie ? Am normalen PC UART gehts mit ein paar Tricks, aber beim FT232 ist das warscheinlich sehr viel schwerer.
Bei seriellen Protokollen macht man das normalerweise mit sog. Escapezeichen. Beispiel: Du hast drei Kommandobytes mit den Werten 0,1,2. Die schickst Du auch genau so. Wenn Du jetzt Datenbytes mit denselben Werten senden willst, stellst Du diesen ein Escapezeichen voran (dessen Bytewert Du halt vorher festlegen musst. Im ASCII-Zeichensatz ist das z.B. Wert 27). Anstatt 1 schickst Du jetzt also 27, und dann 1. Wenn Du den Datenwert 27 senden willst, schickst Du 27 zweimal. Empfängerseitig: Immer wenn der Empfänger ein Escapezeichen bekommt (hier Wert 27), dann interpretiert er das nächste Byte als Datenbyte. Theoretisch könntest Du jedem Datenbyte immer eine 27 voranstellen, was natürlich Blödsinn ist. Immer nur Datenbytes, deren Wert einem Kommandowert entsprechen, und dem Escapezeichen selber. Wenn in Deinem Datenstrom viele Datenwerte mit Kommandowerten vorkommen, sinkt natürlich Deine Datenrate entsprechend.
Die Escapezeichen sind echt eine Alternative. Wiso komme ich selber nie auf sowas einfaches ? Ich denke ich werde es so machen. Damit ich nicht noch einen zweiten Thread aufmachen muss, hier noch eine andere Frage: Kann ich den FT232 als virtuellen COM Port so initialisieren, dass er CTS verwendet ? Ich möchte, dass der FT232 nur Daten sendet wenn CTS auf Low liegt. dcb.BaudRate = baud_rate; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.fOutxCtsFlow = TRUE; dcb.fAbortOnError = FALSE; fSuccess = SetCommState(hCom, &dcb);
"Kann ich den FT232 als virtuellen COM Port so initialisieren, dass er CTS verwendet ?" Das sollte sich exakt genauso verhalten wie bei einer "echten" seriellen Schnittstelle. Also Hardwarehandshake einschalten, genauso, wie Du es in der Zeile dcb.fOutxCtsFlow = TRUE; auch machst. Dieses Flag ist so beschrieben: fOutxCtsFlow Indicates whether the CTS (clear-to-send) signal is monitored for output flow control. If this member is TRUE and CTS is turned off, output is suspended until CTS is sent again. Viel Erfolg.
@Rufus Stammt diese Beschreibung aus einem Buch oder von einer Internetseite ? Ich suche nämlich schon seit längerem sowas, wo alles schön erklärt ist.
Die Beschreibung stammt aus der MSDN-Dokumentation von Microsoft. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/dcb_str.asp
Oder IMO noch etwas besser hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp
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.