UART Protokoll

Gast
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
Gast
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)?
Gast
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?
Gast
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
Gast
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
Gast
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?
Gast
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.
Gast
"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. :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.