5 Stimmen

Wie erkennt man ein Startbit in einem asynchronen seriellen Bitstrom?

Ich schreibe einen Code für einen Mikroprozessor, der mit einem externen Gerät über asynchrone serielle Kommunikation über eine einzige Leitung kommuniziert.

Ich kann einen Übergang auf der Leitung von Low/High (in beide Richtungen) erkennen, so dass ich die Bitgrenzen finden kann. Da ich die Baudrate kenne, die das Gerät verwendet, kann ich mit dem Takten von Bits beginnen, so dass ich den vom Gerät kommenden Bitstrom lesen kann.

Womit ich konzeptionell kämpfe, ist das Erkennen eines Startbits - das Finden des Beginns eines Byte-Frames (unter der Annahme, dass ich 8 Bit, keine Parität, 1 Startbit, 1 Stoppbit bekomme). Ich weiß, dass jeder Frame mit einem Startbit beginnt und mit einem Stoppbit endet, aber ich gehe davon aus, dass Start- und Stoppbits wie alle anderen Bits aussehen - es gibt also nichts Besonderes an ihnen, das sie als Start- oder Stoppbits kennzeichnet (außer ihrer Position).

Der einzige Weg, den ich mir vorstellen kann, um ein Startbit zu identifizieren, ist, dass es das erste hohe Bit nach einer anhaltenden Leerlaufperiode ist - das heißt, da ich 8 Bits ohne Parität erwarte, wenn ich 9 oder mehr niedrige Bits erhalte, dann ist die Leitung im Leerlauf, und das nächste hohe Bit wird ein Startbit sein. Das ist ja alles schön und gut, aber was ist, wenn ich das Gerät mitten im Bitstrom abhöre und es keine Leerlaufzeit von 9 Bits oder mehr auf der Leitung gibt? Ich takte Bits ab, aber wie erkenne ich, welches Bit ein Startbit ist, damit ich ein Byte ablesen kann? Wenn ich Bits abtakte, dann kann alles, was zwischen den Frames liegt, nur ganzzahlige Vielfache von Bits sein (ein Stop-"Bit" kann also z. B. nicht 1,5 Bits sein), so dass alles nur wie Bits aussieht.

Ich hoffe, ich mache Sinn... danke für jede Hilfe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X