Forum: Mikrocontroller und Digitale Elektronik UART Protokoll


von Oliver Bründler (Gast)


Lesenswert?

Kann mir Jemand ein Protokoll oder eine Pszifikation der UART (RS 232)
Schnittstelle besorgen? ICh möchte nämlich eine Ansteuerung dafür
selbst programmieren.

Gruss Oli

von Markus_8051 (Gast)


Lesenswert?

Hallo Oli,

Eine RS232 in Software zu emulieren ist eine recht zeitkritische Sache.
Und ein Protokoll ist in der Spec. der RS232 nicht vorgegeben. Die Spec.
beschreibt lediglich die Hardware. Aber ich glaube, das ist auch gar
nicht das, was Du wirklich willst.

Vielleicht beschreibst Du die Aufgabe nochmal etwas genauer:
Was hast Du? PC, Mikrocontroller, oder was?

Was willst Du damit ansteuern? Modem, Kartenleser, anderen PC oder µC?

Gruß,

Markus_8051

von Alex (Gast)


Lesenswert?

Da gibt es kein "Protokoll", es sei denn, du definierst dir eins.
Schnapp dir mal das Datenblatt eines beliebigen MC mit USART und lies
dir den entsprechenden Abschnitt durch, dort steht alles prima
beschrieben drin (zumindest bei den ATMegas). Von welcher Seite aus
willst du ihn ansteuern (PC oder MC)?

von Oliver Bründler (Gast)


Lesenswert?

Ich möchte einen UART empfänger in einem FPGA implementieren. Dazu
brauche ich die genauen Spezifikationen. Sollte bei RS232 nicht das
Startbit gleich lang sein wie alle anderen? und ist danach ein high
impuls vorgeschrieben?

von Markus_8051 (Gast)


Lesenswert?

Aha, da kommen wir der Sache doch schon näher. Hast Du hier im
programmierbare Logik Forum schon nach FPGA und UART gesucht?

Ansonsten:
1) Bei der seriellen asynchronen Übertragung sind alle Bits gleich
lang, sonst funktioniert es nicht, und zwar genau so lang, wie es die
Baudrate vorgibt (zur Info: die Einheit Baud bedeutet bit pro Sekunde)

2) Nach dem Startbit ist kein highimpuls vorgeschrieben. Die Begriffe
high und low sind hier auch sehr unglücklich gewählt. Laut RS232-Spec.
entspricht eine logische 1 nämlich -12 Volt und eine logische 0 +12
Volt. Ein Pegelwandler (z.B.:MAX232 von Maxim) kann das in
(FPGA-freundlichen) TTL-Pegel umsetzen (-12 -> +5, +12 -> 0)

3) Sprich, Du wartest zunächst auf die erste Flanke, und samplest dann
immer in der Mitte der Taktfenster die Datenleitung. Zwischendurch
auftretende Flanken (bei einer 255 kommen davon aber nicht so viele)
kannst Du zur Synchronisation verwenden.
Zum Schluß noch evtl. das Parity und Stopbit auswerten und wieder von
vorn anfangen.

Viel Erfolg,

Markus_8051

von Oliver Bründler (Gast)


Lesenswert?

ok, da kein highimpuls vorgeschrieben ist (schade eigentlich) kann ich
das startbit also nicht zur baudratenerkennugn verwenden. Ich hatte
nämlich vor die Baudrate a nder lägne des startbits zu erkennen.

gruss Oli

von Rufus T. Firefly (Gast)


Lesenswert?

Bei asynchronen seriellen Schnittstellen ist eine automatische
Baudratenerkennung nur möglich, wenn dazu ein definiertes Bitmuster
gesendet wird - da kann man sich natürlich nicht drauf verlassen.

Ein Beispiel dafür sind die berühmten "AT"-Befehle des
Hayes-Modem-Befehlssatzes; hier werden auch noch Wortlänge und Parity
ermittelt.

Übliche UARTs verwenden übrigens zum Abtasten oft den 16fachen Bittakt
...

Wenn Du das Rad nicht neu erfinden willst, kannst Du ja mal nachsehen,
ob es von einem der folgenden ICs auch eine VHDL-Implementierung gibt:
Motorola 6850 (simpel, externer Taktteiler erforderlich)
Rockwell 6551 (programmierbarer Baudratengenerator)
Intel (und andere) 8250 (der Urvater aller PC-Schnittstellen)
National (und andere) 16550 (dasselbe in neuer mit
Sende/Empfangsfifos)
Exar 68681 (mal was für Freunde der 68K-Prozessoren)

(die Liste ließe sich fortsetzen)

Wenn Du das Rad neu erfinden willst: Warum? Akademischer Lustgewinn?

von Philipp Sªsse (Gast)


Lesenswert?

Im übrigen halte ich es für durchaus korrekt, von einem Protokoll zu
sprechen. Ein Low-Level-Protokoll, klar, aber auch ein Rahmen für eine
Bitfolge (Startbit, LSB first, Stopbits, Parity Bits) ist ein
Protokoll. Daß man auf diesem Protokoll noch ein anderes implementiert
und darüber evtl. noch ein paar, ändert nichts daran, daß es sich auch
hier um ein Protokoll handelt.

von Zotteljedi (Gast)


Lesenswert?

"Startbit, LSB first, Stopbits, Parity Bits" sind aber nicht
definiert. Wenn Du meinst, daß RS-232 ein fest definiertes Protokoll
nicht implementiert, könntest Du richtig liegen, aber dann ist es
genauso sinnvoll zu sagen, daß ein Stückchen Punschtorte nicht die
genauen Spezifikationen eines 74HC164 erfüllt.

Wenn Du die schlichten Aussagen, daß es Drähte gibt, auf denen +12 oder
-12 Volt anliegen (nichtmal das, sind ja recht große Bereiche, afaik 3 -
12 oder sogar nach oben hin mehr?), und das eine Space und das andere
Mark entspricht, auch Protokoll nennen willst, dann hast Du recht, dann
gibt es ein RS-232 Protokoll.

Die Mehrheit der Leute sagen allerdings einstimmig, daß es kein
Protokoll für RS-232 gibt, sondern es sich nur um eine Spezifikation
handelt. Ich halte mich da besser raus. :-)

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
Noch kein Account? Hier anmelden.