Forum: Mikrocontroller und Digitale Elektronik Warum LSB first bei UART?


von Francisca93 (Gast)


Lesenswert?

Hallo,

ich arbeite mich gerade durch einen Fragenkatalog zur 
Klausurvorbereitung durch. Da gibt es eine Frage: "Bei der seriellen 
Schnittstelle wird zuerst das LSB übertragen. Warum ist das zweckmäßig?"

Ich hätte jetzt gedacht, weil es eben um 1930 für die Fernschreiber so 
eingeführt wurde und alle Systeme darauf eingerichtet sind, so dass man 
da schwer etwas ändern kann. Oder gibt es dafür noch einen technischen 
Grund?

von Heiner (Gast)


Lesenswert?

Richtig!
Das ist nur eine Konvention.

von H.Joachim S. (crazyhorse)


Lesenswert?

Das wäre aber keine Antwort auf die Frage nach Zweckmässigkeit. 
Irgendetwas war sicher mal sinnvoll dran, wenn man sich die damaligen 
Möglichkeiten von Schieberegistern vorstellt. Und die verschiedene 
Anzahl von Bits, sind/waren ja durchaus nicht immer 8bit.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Bei I²C oder SPI ist es z.B. genau umgekehrt - MSB first. Ist also 
vermutlich der alten Mechanik in den TTY geschuldet.

von Klaus (Gast)


Lesenswert?

Francisca93 schrieb:
> "Bei der seriellen
> Schnittstelle wird zuerst das LSB übertragen. Warum ist das zweckmäßig?"

Damit man auch 7 Bit (optional plus Parity) kompatibel übertragen kann?

MfG Klaus

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Hi,

Beitrag "Re: gibt es UARTs mit MSB first?"

Einmal Die Relation zu Start und Stopbit:
Dann bei Übertragungsfehlern siehe Bild.
Bei MSB "last" wird die Zeichentabelle etwas verschoben.
Bei LSB versetzt, trifft es die Übertragungs-Kontrollbits stärker.


ciao
gustav

von A. B. (Gast)


Lesenswert?

Heiner schrieb:
> Richtig!
> Das ist nur eine Konvention.

Das ist nur ein Grund. Der Vorteil ist, dass man nachträglich(!) 
problemlos die Übertragung von 5 auf 6 ... Bit aufbohren kann. Die 
zeitliche Referenz ist ja das Startbit, nicht das/die Stoppbit(s). Dass 
letztere zur teilweisen Erkennung von Übertragungsfehler dienen können, 
ist zweitrangig.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Noch ein Bild

Wären die Steuerzeichen versetzt, gäbr es größere Probleme bei der 
Kommunikation, als wenn nur die Zeichentabelle falsche Buchstaben 
zeigte.

ciao
gustav

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

Francisca93 schrieb:
> Ich hätte jetzt gedacht, weil es eben um 1930 für die Fernschreiber so
> eingeführt wurde und alle Systeme darauf eingerichtet sind, so dass man
> da schwer etwas ändern kann. Oder gibt es dafür noch einen technischen
> Grund?

es dürfte reine Vereinbarung gewesen sein. Ich hatte mal einen 
funktionsfähigen Siemens-Streifenschreiber in Besitz, hat ein Bekannter 
geerbt. Höllenlärm wenn der lief und der direkt fliehkraftgeregelte 220V 
Bürstenmotor war schon damals dem radio- und Fernsehempfang nicht so 
zuträglich...

Der ankommende Code (Startbit, 5 Datenbits, Stopbit) wurde rein 
mechanisch ausgewertet. Das Starbit gab eine Klinke an der Kupplung 
frei, die Steuerwelle lief los und gab der Reihe nach eine der 5 
Schienen unter den Tastenhebeln frei. Kam ein 1-Bit wurde die Schiene 
etwas verschoben bis ein Schlitz unter dem Typenhebel lag.Bei einem 
0-Bit blieb sie unbewegt.
Nach 5 Bit hat die Welle des Motors dann genau die Type aus Papier 
geschlagen, wo in allen 5 Schienen ein Schlitz an die richtige Stelle 
geschoben worden war.
Das Stoppbit wurde direkt garnicht ausgewertet, es war nur die Pause 
damit die Kupplung ihre Runde beenden konnte und die Klinke vom 
Startmagneten wieder einrastete und anhielt. Es wurde eben schon da 
zeichensyncron gestartet und die Drehzahl mußte so gut passen, daß die 
Welle während einer Umdrehung in jeder Bitzeit die richrige Schiene 
verschob.

Ich finde leider beim googlen keine Detailbilder dieser Mechanik...

Man hätte die 5 Schienen auch einfach umsortieren können, dann wäre eben 
MSB first gewesen. Die RS232 usw. sind erst in den 60er Jahren 
aufgekommen,
da konnte man aber dem UART durchaus auch schon MSb first sagen.

Gruß aus Berlin
Michael

von Mac (Gast)


Lesenswert?

A. B. schrieb:
> Heiner schrieb:
>> Richtig!
>> Das ist nur eine Konvention.
>
> Das ist nur ein Grund. Der Vorteil ist, dass man nachträglich(!)
> problemlos die Übertragung von 5 auf 6 ... Bit aufbohren kann. Die
> zeitliche Referenz ist ja das Startbit, nicht das/die Stoppbit(s). Dass
> letztere zur teilweisen Erkennung von Übertragungsfehler dienen können,
> ist zweitrangig.

Kannst du das mit dem problemlos erläutern? Mir scheint, es wäre für die 
Unterstützung unterschiedlichcher Codelängen zweckmäßiger, das MSB 
zuerst zu übertragen, weil man dann nur ein Schieberegister braucht, 
dass von der kleinsten Stelle aufgefüllt wird.

von M. K. (sylaina)


Lesenswert?

Mac schrieb:
> ...weil man dann nur ein Schieberegister braucht,
> dass von der kleinsten Stelle aufgefüllt wird.
Hat was ;)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mac schrieb:
> weil man dann nur ein Schieberegister braucht, dass von der kleinsten
> Stelle aufgefüllt wird.
Bei der seriellen Schnitte wird das Schieberegister dann eher von der 
höchsten Stelle "aufgefüllt": jedes übertragene Bit muss durch das 
höchstwertige Flipflop durch.
Oder: mit der ersten Taktflanke kommt die Information das LSB in das MSB 
des Schieberegisters und wird dann Bit für Bit "nach rechts" 
durchgeschoben...

: Bearbeitet durch Moderator
von Mac (Gast)


Lesenswert?

Lothar M. schrieb:
> Bei der seriellen Schnitte wird das Schieberegister dann eher von der
> höchsten Stelle "aufgefüllt": jedes übertragene Bit muss durch das
> höchstwertige Flipflop durch.

Nur dass dann je nach Codelänge das Wort entweder an verschiedenen 
Stellen reingeschoben oder nach Ende der Übertragung noch an die 
richtige Position geschoben werden bzw. an einer anderen Stelle 
abgegriffen werden muss. Wenn man MSB schiebt ist das Wort am Ende immer 
an der richtigen Stelle.

von Francisca93 (Gast)


Lesenswert?

O.k., danke, dann hätte ich ja schonmal 2 Antworten die ich hinschreiben 
kann, wenn die Frage drankommt. 1. Historische Konvertion, 2. Damit man 
auch  weniger als 8 bit kompatibel übertragen kann (weil Startbit 
zeitliche Referenz ist).

von Adam P. (adamap)


Lesenswert?

Also mir wurde es an der FH auch im Bezug auf das Schieberegister 
erzählt.

Wenn du es mit dem LSB zuerst überträgst dann landet dieses im 
Schieberegister direkt an der LSB Position und es ist kein weiterer 
Aufwand notwendig (um das Byte zu drehen / spiegeln), man kann das Byte 
dann direkt so wieder (in der Hardware) so auslesen wie es sein soll.

Sollte ich falsch liegen, bitte ich um Korrektur.

von H.Joachim S. (crazyhorse)


Lesenswert?

Adam P. schrieb:
> Wenn du es mit dem LSB zuerst überträgst dann landet dieses im
> Schieberegister direkt an der LSB Position und es ist kein weiterer
> Aufwand notwendig (um das Byte zu drehen / spiegeln), man kann das Byte
> dann direkt so wieder (in der Hardware) so auslesen wie es sein soll.

Das funktioniert aber mit MSB first und links schieben aber besser. 
Unabhängig von der Bitzahl. So gesehen wäre MSB first sogar sinnvoller. 
8bit-Empfangsregister und man kann 5/6/7 oder 8bit richtig sortiert 
empfangen. Wenn überhaupt ein Vorteil bei LSB first vorliegt, muss der 
in der alten Mechanik liegen.

von avr (Gast)


Lesenswert?

H.Joachim S. schrieb:
> So gesehen wäre MSB first sogar sinnvoller.
> 8bit-Empfangsregister und man kann 5/6/7 oder 8bit richtig sortiert
> empfangen.

Im Prinzip ist es egal. Es kommt auf die Implementierung des UARTs an 
(Buffer als Mux oder Schieberegister). Somit bleibt eigentlich nur noch 
1. historische Konvention übrig. Oder der Prof hat hier Halbwissen. Das 
kommt durchaus vor.

von Michael U. (amiga)


Lesenswert?

Hallo,

alte Konventionen sind manchmal interessant: bei Telefonanlagen war der 
Pluspol GND und geerdet. Die Relais waren mit seidenumsponnenen 
Lackdraht gewicklet weil das mit dem Lack nicht zuverlässig isolierte. 
Wie sagte damals mein alter Lehrmeister: nun noch die elektro-chemische 
Spannungsreihe dazu und mit + am Eisenkern wandert der Kern zum Kupfer, 
bei - würde der Kupferdraht zum Eisenkern wandern. Was hält wohl länger 
durch?

Gruß aus Berlin
Michael

von Lurchi (Gast)


Lesenswert?

LSB first dürfte die Implementierung von unterschiedlichen Wortlängen 
(5,6,7,8,9 Bit) vermutlich etwas vereinfachen. Viel dürfte aber einfach 
Konvention sein, die beibehalten wird wenn kein wesentlicher Grund 
dagegen spricht.

Manchmal geht Rückwärts-Kompatibilität aber auch über alles, etwa beim 
A20 Gate.

von Bernd K. (prof7bit)


Lesenswert?

Lurchi schrieb:
> LSB first dürfte die Implementierung von unterschiedlichen Wortlängen
> (5,6,7,8,9 Bit) vermutlich etwas vereinfachen. Viel dürfte aber einfach
> Konvention sein, die beibehalten wird wenn kein wesentlicher Grund
> dagegen spricht.

Wenn wir uns in diese Zeit zurückversetzen, noch keine anderen Verfahren 
existieren die unsere Gedankengänge ablenken und wir allein aufgrund der 
Logik und der technischen Eleganz entscheiden dürften ob MSB oder LSB 
first dann würden wir uns ohne mit der Wimper zu zucken jederzeit sofort 
wieder für LSB first entscheiden, es drängt sich geradezu auf:

* Die höherwertigen Bits kann man optional machen, die niederen bleiben 
dennoch immer an der selben Stelle relativ zum Startbit.
* Es ist einfacher die Maske zu schieben als das ganze Register mit 
allem was dran hängt
* Höherwertige (überzählige) Bits können (umschaltbar) ignoriert werden 
indem man ganz simpel den Empfang vorzeitig beendet ohne dazu die ganze 
Mechanik umzukrempeln, die niederen Bits landen automatisch immer sofort 
an der richtigen Stelle sobald sie empfangen sind.

https://www.youtube.com/watch?v=HcMHam54EOI

: Bearbeitet durch User
von Baku M. (baku)


Lesenswert?

Moin zusammen!
Ich gebe in diesem Zusammenhang noch etwas -eventuell eher 
philosophisches- zu bedenken:

Wenn wir von der Fernschreibtechnik, dem Ursprung der asynchronenn 
seriellen Datenübertragung, ausgehen, also aus einer Zeit weit vor dem 
ersten Computer wie wir ihn heute kennen und verinnerlicht haben, dann 
vermute ich, daß es sowas wie die 'Wertigkeit' ( *L*east *S*ignificant 
*B*it/ *M*ost *S*ignificant *B*it) damals überhaupt noch nicht gab.

Eine Wertigkeit eines Bits ergibt erst dann Sinn, wenn ich mehrere Bits 
zu einer 'Zahl' zusammen führen will, wollte man damals aber nicht, 
sondern nur Zeichen codieren.
Beispiel: In CCITT-2 wird das 'E' als 00001 codiert. Wenn man mit dem 
rechten Zeichen anfängt auszugeben. Oder als 10000, wenn man von links 
ausgibt.
Wir Digitalen von heute (ich von gestern :-) ) sehen darin sofort eine 
'1' oder eine '16', diese Sichtweise ist aber von unserer (umfassenden) 
Erfahrung geprägt und nicht eine grundsätzlich zwingende.

Als man später anfing, das gleiche, bewährte Verfahren für die 
Übertragung von 'Computerdaten' zu verwenden, einigte(*) man sich per 
Konvention darauf, das LSB zuerst zu übertragen.
((*) Oder der erste hat es einfach so gemacht, und die anderen mussten 
es dann nachmachen, um kompatibel zu sein, wie so oft..)

Wie die Diskussion schon zeigt, sind die Argumente für oder gegen das 
eine oder andere sehr dürftig. Insbesondere Implementationsvorteile 
(Schieberegister/Maske) können aus heutiger Sicht sehr schwer beurteilt 
werden, weil die Technik damals ganz anders aussah.

Abschliessend erspare ich euch, meine Meinung zu Berufsschullehrern, 
Dozenten und Professoren zum Besten zu geben. Die stellen gerne die 
unsinnigsten Fragen.
Warum? Weil sie es können!
Und weil es ihr Selbstwertgefühl steigert...

IdS,
Baku

von Klakx (Gast)


Lesenswert?

Für eine Klausurfrage finde ich diese Frage, wie soll man es sagen, zu 
schwammig. MSB first ist nicht falsch, und wenn der Standard es vorgibt, 
dann ist es leider so auch zu machen.

Ich habe schon einige Protokoll umgesetzt und wette, dass auch die 
Kollegen darauf nicht klar antworten können.
.. Und dann so eine Antwort in der Klausur benoten..

von Jim M. (turboj)


Lesenswert?

Lurchi schrieb:
> LSB first dürfte die Implementierung von unterschiedlichen Wortlängen
> (5,6,7,8,9 Bit) vermutlich etwas vereinfachen.

Das wurde hauptsächlich für Fernschreiber entwickelt. Und da hat man das 
Problem das für 5 oder 6 Bits ganz andere Zeichenkodierung benutzt wird 
- Interoperabilität dadurch gleich Null.

Man bedenke dass ASCII z.B. mindestens 7 Bits braucht.

Ich finde es vieeel spannender das modernere Systeme oft MSB-first 
arbeiten, z.B. SPI oder I²C. Und auch bei SPI gibt es verschieden lange 
Bits pro Wort.

Deshalb kann man bei etlichen modernem USART (welche SPI und UART 
können) die Bit Reihenfolge auswählen. Aber das dürfte deutlich jenseits 
des Horizonts von der Lehrkraft des OPs liegen.

Diese Klausurfrage ist eher wie die Handbuchabfrage aus alten DOS 
Spielen zu verstehen: Hier ist das wiederzugeben was im Buch zur 
Lehrveranstaltung steht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Bernd K. schrieb:
> Youtube-Video "How The Teleprinter Works- 1940  (11:05 mins)"

Sehr schöner Film. Hab ihn mir komplett angesehen, was ich bei Youtube-
Videos sonst selten tue :)

Baku M. schrieb:
> Ich gebe in diesem Zusammenhang noch etwas -eventuell eher
> philosophisches- zu bedenken:
>
> Wenn wir von der Fernschreibtechnik, dem Ursprung der asynchronenn
> seriellen Datenübertragung, ausgehen, also aus einer Zeit weit vor dem
> ersten Computer wie wir ihn heute kennen und verinnerlicht haben, dann
> vermute ich, daß es sowas wie die 'Wertigkeit' ( *L*east *S*ignificant
> *B*it/ *M*ost *S*ignificant *B*it) damals überhaupt noch nicht gab.

Ich hatte gerade, als ich mir diesen Thread durchlas, genau denselben
Gedanken, ihn aber noch nicht in Textform gebracht :)

Noch eine kleine Ergänzung:

Dass die Entwickler der Fernschreiber und der dafür verwendeten
Zeichenkodierungen keine Dualzahlen, sondern lediglich Bitsequenzen im
Kopf hatten, erkennt man daran, dass in den damals üblichen 5-Bit-
Kodierungen die Codes für die einzelnen Ziffern überhaupt nichts mit dem
Dualsystem zu tun haben:

  https://de.wikipedia.org/wiki/Baudot-Code

Bei rohen Bitsequenzen haben die einzelnen Bits keine Wertigkeit,
weswegen es naturgemäß kein LSB und MSB, sondern allenfalls ein erstes
und ein letztes Bit (in der Übertragung) bzw. ein linkes und rechtes Bit
(auf dem Lochstreifen) gibt.

Die Kodierung von Ziffern in Anlehnung an das Dualsystem kam m.W. erst
mit BCDIC:

  https://en.wikipedia.org/wiki/BCD_(character_encoding)

Hier haben die Ziffern von '1' bis '9' tatsächlich die Codes 0x01 bis
0x09. Nur bei der '0' gibt es Uneinigkeit: Ist die Kodierung primär für
Drucker vorgesehen, steht der Code 0x00 für das Leerzeichen, weswegen
die '0' auf den Code 0x0a ausweichen muss. Auf Computern wie der IBM 704
und der IBM 709 entsprechen die Codes aller Ziffern inkl. der '0' ihrem
Zahlenwert, was die Konvertierung von Zahlen zwischen der Text- und der
numerischen Darstellung erleichtert. Interessanterweise ist man bei der
IBM 1401 von diesem Prinzip wieder abgekommen.

Warum bei RS-232 das LSB zuerst übertragen wird, ist zwar immer noch
nicht geklärt, aber zumindest muss man die Ursache nicht mehr in der
Fernschreiberära suchen.

: Bearbeitet durch Moderator
von nachtmix (Gast)


Lesenswert?

Yalu X. schrieb:
> Dass die Entwickler der Fernschreiber und der dafür verwendeten
> Zeichenkodierungen keine Dualzahlen, sondern lediglich Bitsequenzen im
> Kopf hatten, erkennt man daran, dass in den damals üblichen 5-Bit-
> Kodierungen die Codes für die einzelnen Ziffern überhaupt nichts mit dem
> Dualsystem zu tun haben:
>
>   https://de.wikipedia.org/wiki/Baudot-Code

Dennoch war der Code nicht rein willkürlich gewählt, sondern 
entsprechend der Häufigkeit der Buchstaben, damit der Verschleiss der 
auf langen Strecke als Verstärker genutzten Relais möglicht gering 
wurde.
Man versuchte also die Fernschreiben mit möglichst wenig Schaltvorgängen 
zu übertragen.

von Michael U. (amiga)


Lesenswert?

Hallo,

nachtmix schrieb:
> Man versuchte also die Fernschreiben mit möglichst wenig Schaltvorgängen
> zu übertragen.

das erscheint mir durchaus logisch.
Was mich beim obigen YouTube-Video verwirrt hat: ich dachte, daß 
Typenradverfahren ist erst Anfang der 70er zum Einsatz gekommen.
Habe aber gerade gefunden, daß der T68 von Siemens (ab 1951) auch ein 
Typenrad hat.

Gruß aus Berlin
Michael

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.