UART mit 1Mbps vs. SPI

Gast #957415
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.
Gast #957444
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.
Gast #957448
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.
Gast #957497
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?
#957511
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?
#957512
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren