Hallo ich bin auch gerade dabei einen LIN treiber zu schreiben für
ATmega's
Also ich habe schon erfahrungen weil ich das auch in meinem Job mache
LIn und CAN.
Prinzipiell geht dass schon mit der seriellen Schnittstelle
aber du brauchst auf jeden Fall einen Transceiver TJA1020 z.B.
Das Uart Data Format: 1 Startbit, 1 Stopbit und 8 Datenbits,
Baudraten sind mit 2400,9600 und 19200 spezifiziert.
zuerst mal das LIN - Protokoll sieht so aus:
Master wird Receiver der Uart abgeschalten und Transceiver
eingeschalten.
der Master sendet ein Break ( 13 bit low und 1-4 bit hi "
danach das sync field ( 0x55 )
danach das ID Field ( ID , DLC , Art der Parität)
nun wird der Tranceiver der Uart abgeschalten und der receiver
eingeschlaten, weil ab jetzt der Slave seine Daten sendet.
zum schluss werden die Daten noch mit der CHK-SUM geprüft.
Nun das kniffelige:
eine normale Uart kann kein Break senden wegen der insgesamt 14-17 bits
dass musst du anders lösen ich habe dass so gemacht indem ich den UART
deaktiviere und dann mit einem Timer den Tx Pin als I/O so steuere dass
dass Break gesendet wird. Danach wird der Uart wieder eingeschalten.
dann gehts weiter mit Sync, Id usw.
Ausserdem gibt es eine Kommunikationstabelle:
was ich oben im Protokoll beschrieben habe gilt für einen Frame.
Jeder Frame gehört quasi zu einem Steuergerät.
eine solche Tabelle hat im Grunde 2 Spalten und x Zeilen ( X = Anzahl
Frames bzw. Steuergeräte/ Sensoren) In den Spalten stehen dann die Delay
zeiten zwischen den Frames und der eigentliche Frame mit ID.
Dann gibt es eine tick Funktion die z.B jede ms aufgerufen wird. In ihr
wird entschieden oder das delay eines Frames erreicht ist. Wenn ja dann
Frame senden und in der Tabelle in die nächste zeile springen und wieder
bis zum nächsten delay höchzählen