Forum: Mikrocontroller und Digitale Elektronik UART mit 1Mbps vs. SPI


von Matze (Gast)


Lesenswert?

Hallo,
ich benutze derzeit SPI für die kommunikation von meinem MSP430 mit 
einem anderen µC.
Leider kann ich DMA nicht mit dem SPI benutzen, darum bin ich am 
überlegen die kommunikation auf UART umzustellen. Ich bräuchte so 1Mbps 
Übertragungsgeschwindigkeit. Der Abstand der beiden µC ist <20cm.
Leider kann ich die beiden µC nicht auf den gleichen Takt einstellen, 
wesshalb auch mein Baudratentakt leicht unterschiedlich sein wird. 
Sender läuft mit 16MHz (auf 1Mbps eingestellt) und Empfänger läuft mit 
70MHz (auf  1Mbps eingestellt). Die Baudrate mit der geringsten 
Abweichung muss ich mir noch ausrechnen.
Was bedeutet die Errorwahrscheinlichkeiten die ich mir ausrechnen kann? 
bedeutet es wirklich das jedes x-te Byte falsch erkannt wird? Es gibt 
leider kein Parity bit. Und ich muss Strings mit ca. 50Bytes übertragen. 
Muss ich da mit Fehlern rechnen. Eventuell also doch mit 
Fehlerkontrolle? Wenn ja würde ich lieber bei SPI bleiben.

von Ich (Gast)


Lesenswert?

>Was bedeutet die Errorwahrscheinlichkeiten die ich mir ausrechnen kann?
>bedeutet es wirklich das jedes x-te Byte falsch erkannt wird?
Bedeuten das, wenn du eine gewisse Grenze überteigst, alle Zeichen 
fehlerhaft empfangen werden.

von 3366 (Gast)


Lesenswert?

Der SPI als Master kann kann mit dem clock getaktet werden, als Slave 
muss er  mindestens 4 mal langsamer als der clock sein. Zu beachten ist 
auch dass der SPI Buffer nur genau ein Byte gross ist, Waehrend ein UART 
Buffer teilweise 2 byte gross ist. Das bedeutet die Intrrupt Latenzzeit 
wird bei hohen Uebertragungsraten sehr klein.

von Matze (Gast)


Lesenswert?

Aber es wird nach jedem Byte neu syncronisiert? Und wenn der Empfänger 
70 mal schneller arbeitet als die Baudrate, dann dürften doch keine 
Fehler auftreten, selbst bei einem Unterschied von 5% nicht?

von Christian R. (supachris)


Lesenswert?

Also in der Praxis geht das fehlerfrei, weil die UARTs eine gewisse 
Fehlanpassung erlauben. ich kommuniziere mit einem MSP430F1611 und 
Baudratenquarz mit 921.600 Baud zu einem DSP, der mit 150Mhz läuft und 
die baudrate annähernd einstellt. Bisher noch kein einziges Bit verloren 
gegangen. Die Übertragung ist bidirektional. Wenn´s nicht ganz passt, 
kannst du doch am MSP430 noch die Modulationsregister benutzen.

Und wieso kann man eigentlich den DMA nicht mit dem USART-Interrupt 
verknispeln? Das ging doch schon beim F1611 usw. haben die das wieder 
rausgenommen bei den neuen?

von Falk B. (falk)


Lesenswert?

@ Matze (Gast)

>Aber es wird nach jedem Byte neu syncronisiert?

ja. siehe RS232

> Und wenn der Empfänger
>70 mal schneller arbeitet als die Baudrate, dann dürften doch keine
>Fehler auftreten, selbst bei einem Unterschied von 5% nicht?

Doch. Denn das funktioniert schon bissle anders. Die meisten UARTS 
können nur ganzzahlig teilen also 70/8=8,75 oder 70/16= 4,375. Gerundet 
macht das einen Fehler von 2,7% bzw. 9,3%. 2,7% ist sehr knapp für 
RS232. Aber viele Wege führen nach ROM.
Der MSP430 kann nichtganzzahlige Teilerverhältnisse realisieren, dann 
klappt das auch mit dem anderen uC. Stell Deinen 70 MHz uC auf eien 
Teiler von 4, das macht dann ~1,09 MBit/s. Das kann dein MSP430 mit 16 
MHz sehr gut generieren. Siehe Datenblatt.

Mfg
Falk

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.