LIN Bus als physischer Layer für UART

OP #7377813
Lesenswert?

Hallo,

ich habe ein Board (mit Display und WLAN) welches ich gerne über 30 Meter mit drei Leitungen mit einem anderen (noch nicht entwickelten) Gerät verbinden möchte. Nachdem das zweite Board auch versorgt werden muss bleibt nur mehr eine Leitung für die Kommunikation. Kann ich an sich auf beiden Seiten einen LIN Transceiver setzen und als Protokoll was eigenes auf Basis von UART? Der eingesetzte Controller hat keine LIN Unit und dann wird es mit dem Sync und Break ja haarig. Aber an sich muss ich ja nicht LIN konform sein, nachdem beides proprietär ist. Ausbaustufe wären nämlich denkbar mit mehreren Geräten (Display als Master).

Danke Reinhard

#7377823
Lesenswert?

hi,

LIN-Unit braucht man nicht unbedingt.

Reinhard schrieb:

Der eingesetzte Controller hat keine LIN Unit und dann wird es mit dem Sync und Break ja haarig.

Break lässt sich bei vielen UARTs als Framing-Error detektieren. Easy.

Sync geht mit einem Capture-Timer der einen seiner Inputs auf dem UART-RX Pin legen kann (Bitzeit vermessen). Wenn du allerdings Quarze auf beiden Enden der Kommunikation hast, kannst du auch einfach nur auf die 0x55 warten und brauchst keinen Timer.

MODBUS wäre vielleicht auch eine Alternative zu LIN. LIN-Transceiver ruhig behalten und als Single-Wire-UART-Bus betreiben.

mfg mf

#7377916
Lesenswert?

@Achim M: bist du da sicher, dass das funktioniert? So wie beschrieben müsste man doch zwei LIN Master zusammenschalten. Das kann doch nicht gehen. Da wird es sicher zu Kollisionen kommen. Man kann also nicht sicher sein, dass die Nachricht ankommt. Und wenn man das abfangen will, dann kann man auch den LIN rudimentär implementieren. Das ist auch nicht mehr Aufwand. Elektrisch geht aber nichts kaputt. Die LIN-Leitung ist kurzschlussfest.

Bei Microchip gibt es fertige Implementierungen für LIN Master und Slave als App Note. Und bei den anderen kann man das auch finden und portieren. Oder hier: https://github.com/open-LIN/open-LIN-c

Grüße, Jens

#7378007
Lesenswert?

Wenn Du das halb Duplex im Griff hast (nur einer sendet) brauchst Du nur dafür zu sorgen, dass Dein Ruhepegel Deinen Aktiv-Pegel nicht stört. Also pull-up (oder down) und Diode oder oben drain.

Wenn es langsam ist und Du kein Protokoll selber strickst, kannst Du z.b Can auf einer Leitung nutzen.

Gast #7378100
Lesenswert?

Reinhard schrieb:

Kann ich an sich auf beiden Seiten einen LIN Transceiver setzen und als Protokoll was eigenes auf Basis von UART?

Du kannst machen was immer Du willst, wenn Du zu nichts kompatibel sein musst. Es muss auch kein Lin Transceiver sein. DALI überträgt z.B. Versorgungsspannung + Daten. Der Uart sendet / empfängt Daten und ein taugliches Protokoll stellt auf beiden Seiten die Sende- / Empfangsrichtung um. 2Draht Power + Daten sind also auch kein Problem und Reichweite bekommst Du durch niedrige Datenrate.

#7378137
Lesenswert?

LIN ist auf Basis von UART, also das Protokoll, nicht der physikalische Teil hinter dem Transceiver. Die LIN Einheiten in manchen Controller machen die Software einfacher, ohne geht es aber auch. 8N1 und go

Ein Break lässt sich auch mit einem UART senden, man muss nur die Datenrate so weit senken das 8 Null-Bits aussehen wie 13+ Null-Bits bei der nominellen Datenrate - und das erzeugt auf der anderen Seite wie oben erwähnt einen Frame Error.

Also warum dann nicht gleich LIN implementieren? :-) So mit Break, Sync, ID, Parity und Checksumme.

Wobei ich Sync bisher weitgehend ignoriert habe, auf beiden Seiten ein Quarz und fertig.

Anhand der ID ergibt sich dann ob der Master noch Daten sendet, oder ob der Slave mit Daten + Checksumme antwortet.

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