Hi,
ich benötige die USART in einem ATMega32U2 im synchronen Slave-Mode.
Weiß jemand wie das Frame Format aussieht? Muss hier auch ein Startbit
und Stopbit gesendet werden?
Danke schonmal,
Andreas
Andreas Auer schrieb:> Weiß jemand wie das Frame Format aussieht? Muss hier auch ein Startbit> und Stopbit gesendet werden?
Logisch. Bei Synchron ist alles exakt genauso wie bei Asynchron, außer
halt, dass der Takt von Außen "zugeliefert" wird. Wie sollte es auch
ohne Start/Stop-Bit funktionieren?
Hm... hatte vor kurzem ein Datenblatt eines PIC Controllers offen und
ich glaube, dass dort im synchronen Mode der Frame dann nur noch aus den
8 Datenbits besteht.
Andreas Auer schrieb:> Hm... hatte vor kurzem ein Datenblatt eines PIC Controllers offen> und> ich glaube, dass dort im synchronen Mode der Frame dann nur noch aus den> 8 Datenbits besteht.
Dann war das vermutlich kein synchroner USART-Modus, sondern ein
SPI-Modus.
Stefan Ernst schrieb:> Bei Synchron ist alles exakt genauso wie bei Asynchron, außer> halt, dass der Takt von Außen "zugeliefert" wird. Wie sollte es auch> ohne Start/Stop-Bit funktionieren?
Ähm. Nein.
Bei jeder Übertragung hat man a) den Bittakt und b) je nach Verfahren
den Frame- bzw. Worttakt.
Bei synchroner Übertragung wird in jedem Fall der Bittakt in irgendeiner
Form mit übertragen. Entweder als separates Signal, oder im
(modulierten) Datensignal eingebettet (Taktregeneration).
Der Frame- bzw. Worttakt kommt entweder ebenfalls als separates Signal
(Flanke am ersten Bit eines Worts) oder man muss ihn aus dem Bitstrom
extrahieren.
Falls dafür keine speziellen Codes verwendet werden, die eine
Regeneration des Worttakts ermöglichen, wird üblicherweise ein Bitmuster
als "Synchronmarke" reserviert, das in regelmäßigen Abständen auftaucht
(meist am Anfang eines Übertragungsblocks).
Klassisches Beispiel dafür ist HDLC, bei dem dieses Bitmuster das Flag
(ein 0-Bit gefolgt von 6 1-Bits gefolgt von einem weiteren 0-Bit) ist.
Damit Nutzdaten das nicht imitieren können, wird nach 5 1-Bits immer ein
0-Bit eingefügt bzw. beim Sender entfernt (Bitstuffing).
Nach einem empfangenen Flag ist das nächste Bit das erste Bit des ersten
Bytes des Frames. Das Frame endet mit dem nächsten Flag (das dann auch
nach einer Bytegrenze kommt).
Grüße
Stefan
Bei der asynchronen Übertragung ist das alles etwas anders:
Der Bittakt wird vorher festgelegt und auf beiden Seiten unabhängig
voneinander erzeugt. Er muss auf beiden Seiten soweit gleich sein, dass
bei einmaliger Synchronisation über 10 bzw. 11 Bittakte die
Abtastzeitpunkte noch passen.
Die Synchronisation von Bit- und Zeichentakt erfolgt durch die
Startbedingung "fallende Flanke 1->0 aus dem Ruhezustand 1" (Startbit,
immer 0). Damit ist der lokale Bittakt phasensynchron.
Danach werden 8 (manchmal 9) Bit mit diesem lokalen Bittakt abgetastet.
Den Schluss bildet immer ein 1-Bit (Stopbit).
Dieses Verfahren baut übrigens auf einer sehr wichtigen Annahme auf,
nämlich dass irgendwann mal für mindestens eine Zeichenlänge "Ruhe"
(1-Pegel) auf der Leitung ist.
Ein Empfänger im Ruhezustand triggert nämlich immer auf den ersten
1->0-Übergang, den er "sieht".
Falls der Empfänger durch eine Störung nur ein "halbes" Zeichen bekommt,
so auf einen 1->0-Übergang innerhalb des Zeichens triggert und
fortgesetzt Zeichen direkt auf einander folgen, wird er bis zur ersten
Pause (mehr als 11 1-Bits) im Sendesignal keine Zeichensynchronisation
erlangen.
Grüße
Stefan
Stefan Wagner schrieb:> Bei jeder Übertragung hat man a) den Bittakt und b) je nach Verfahren> den Frame- bzw. Worttakt.
Es geht hier aber nicht um "je nach Verfahren", sondern ganz konkret um
den USART des AVR. Und der hat nun mal nur einen separaten Bittakt.
Stefan Wagner schrieb:> Der Frame- bzw. Worttakt kommt entweder ebenfalls als separates Signal> (Flanke am ersten Bit eines Worts) oder man muss ihn aus dem Bitstrom> extrahieren.>> Falls dafür keine speziellen Codes verwendet werden, die eine> Regeneration des Worttakts ermöglichen, wird üblicherweise ein Bitmuster> als "Synchronmarke" reserviert, das in regelmäßigen Abständen auftaucht> (meist am Anfang eines Übertragungsblocks).
Und was ist einfacher als das alles? Richtig, wenn man auf der
Datenleitung einfach das exakt selbe Byte-Framing mit Start/Stop-Bit
fährt, wie bei asynchron.
Der synchrone Modus unterscheidet sich vom asynchronen lediglich
dadurch, dass der Master den Takt zusätzlich auf einen Pin gibt, und der
Slave den Takt von einem Pin nimmt, statt ihn selbst intern zu
generieren (beim AVR-USART wohlgemerkt, um den es hier geht).
Stefan Ernst schrieb:> Es geht hier aber nicht um "je nach Verfahren",
Das sehe ich anders.
Der TO hat in keiner Weise angegeben, welches Übertragungsverfahren bzw.
Protokoll er nutzt. Bislang wissen wir nur, dass der Bittakt anscheinend
anderswo erzeugt wird, da er den Modus synchronous slave" verwenden
will.
Welches weitere Framing verwendet wird oder ob er das noch frei wählen
kann, wurde bislang nicht gesagt.
Grüße
Stefan
Stefan Ernst schrieb:> Der synchrone Modus unterscheidet sich vom asynchronen lediglich> dadurch, dass der Master den Takt zusätzlich auf einen Pin gibt, und der> Slave den Takt von einem Pin nimmt, statt ihn selbst intern zu> generieren (beim AVR-USART wohlgemerkt, um den es hier geht).
Hm.
Nach Datenblatt gibt es tatsächlich nur ein "asynchrones Framing", egal
ob synchroner Bittakt oder nicht.
Dann hat der TO ja eh keine Wahl.
Aber wer hat sich das denn ausgedacht? Unter einer "universellen
asynchron/synchronen Schnittstelle" verstehe ich eher was wie Intel
8273, Z80 SIO, UPD72001 etc.
Grüße
Stefan
Stefan Wagner schrieb:> Stefan Ernst schrieb:>> Es geht hier aber nicht um "je nach Verfahren",>> Das sehe ich anders.>> Der TO hat in keiner Weise angegeben, welches Übertragungsverfahren bzw.> Protokoll er nutzt. Bislang wissen wir nur, dass der Bittakt anscheinend> anderswo erzeugt wird, da er den Modus synchronous slave" verwenden> will.>> Welches weitere Framing verwendet wird oder ob er das noch frei wählen> kann, wurde bislang nicht gesagt.
Also für mich sieht die Frage des TO ziemlich eindeutig so aus, dass er
nach dem Frame-Format für den konkret genannten Controller fragt.
Also mir ging es grundsätzlich darum, zu sehen, ob der AVR auch einen
synchronen USART Mode hat, wo man nicht dieses standard UART Framing
nutzen muss. Also quasi rohe 8bit reinclocken kann.
Mein externern Chip, der als Master agieren soll, schickt nämlich "nur"
8bit raus ohne Start- und Stopbit. Und da ich im PIC davon gelesen habe,
dachte ich der AVR kann das auch.
Ich werd aber vermutlich dann den SPI als Slave nutzen und dort die
Daten reinclocken.
Danke für die Antworten