Zum Inhalt

Dokumentation

LIN senden und empfangen

Master senden und empfangen sowie Slave-Antworten und Slave-Empfang konfigurieren.

LIN senden und empfangen

Vier grundlegende LIN-Fälle

Master TX – Daten senden

Der Master überträgt ein vollständiges LIN-Frame mit Identifier und Nutzdaten.

Beispiel: Identifier 0x12, Nutzdaten 11 22 33 44.

python examples/runtime/python_basic.py master-send 0x12 11223344

Bedeutung der Parameter:

master-send   LIN-Frame als Master senden
0x12          LIN-Identifier
11223344      Nutzdaten 11 22 33 44

Der Mikrocontroller erzeugt Break, Sync, PID, Daten und Checksumme.

Master RX – Daten von einem Slave anfordern

Der Master sendet einen LIN-Header. Der angesprochene Slave liefert anschließend die Nutzdaten.

Vier Bytes von Identifier 0x22 anfordern:

python examples/runtime/python_basic.py master-request 0x22 4

Bedeutung:

master-request   Slave-Antwort anfordern
0x22             LIN-Identifier
4                erwartete Nutzdatenbytes

Beispielausgabe:

11 22 33 44

Slave TX – auf einen Master antworten

Das HAT kann eine Antwort vorbereiten, die bei einem passenden Master-Header automatisch gesendet wird.

python examples/runtime/python_basic.py slave-set 0x22 11223344

Bedeutung:

slave-set      Slave-Antwort konfigurieren
0x22           LIN-Identifier
11223344       Antwortdaten 11 22 33 44

Die Antwort bleibt aktiv, bis sie geändert oder gelöscht wird.

Antwort deaktivieren:

python examples/runtime/python_basic.py slave-clear

Slave RX – vom Master veröffentlichte Daten empfangen

Hier sind Konfiguration und Datenabholung getrennt.

Zuerst festlegen, welches Frame empfangen werden soll:

python examples/runtime/python_basic.py slave-rx-set 0x12 8

Damit wird der Empfang von acht Nutzdatenbytes auf Identifier 0x12 konfiguriert.

Anschließend ein empfangenes Frame abholen:

python examples/runtime/python_basic.py slave-rx-recv

Ist noch kein Frame vorhanden:

no frame

Die Trennung ist wichtig: Der Mikrocontroller kann ein LIN-Frame empfangen, während die Linux-Anwendung nicht aktiv auf den Bus zugreift.

Checksumme

Standardmäßig verwenden die Beispiele die Enhanced Checksum.

Classic Checksum:

python examples/runtime/python_basic.py master-send 0x12 11223344 --classic

Dasselbe --classic kann bei den entsprechenden Request- und Slave-Kommandos verwendet werden.

Baudrate ändern

Die Standardkonfiguration verwendet 19200 bit/s.

Der native LIN-Kern unterstützt derzeit:

1000 ... 20000 bit/s

Baudrate für die laufende Sitzung ändern

Die Runtime-Operation INIT hat den Code 0x01. Dahinter folgen vier Byte Baudrate im Little-Endian-Format.

Beispiel für 9600 bit/s auf LIN1 / Master:

from beiis_lin.client import DaemonClient

c = DaemonClient()

baud = 9600
request = b"\x01" + baud.to_bytes(4, "little")

c.set_active_instance(0)          # master_tx_query
c.data_send(0, request)

_, _, reply = c.data_recv(
    instance=1,                  # master_rx_query
    channel=0,
    timeout=2.0,
)

print(reply.hex(" "))            # 01 00 = INIT erfolgreich
c.close()

Für LIN2 / Slave werden die Standard-Slots 3 und 4 verwendet:

TX-Query: Slot 3
RX-Query: Slot 4

Diese Änderung gilt bis der Native-Worker neu gestartet wird.

Baudrate dauerhaft ändern

Für eine dauerhafte Änderung wird die Konfiguration des Native-Workers angepasst.

Beispiel für master_native mit 9600 bit/s:

from beiis_lin.client import DaemonClient

c = DaemonClient()

c.runtime_call("stop", {"name": "master_native"})

c.runtime_call(
    "instance_configure",
    {
        "name": "master_native",
        "config": {
            "tx_peer": "master_tx_query",
            "rx_peer": "master_rx_query",
            "lin_channel": 1,
            "baud": 9600,
        },
    },
)

c.runtime_call("start", {"name": "master_native"})
c.close()

Die Konfiguration wird im STM32-Dateisystem gespeichert und bleibt damit auch nach einem Neustart erhalten.

Für slave_native wird entsprechend lin_channel: 2 mit den Peers slave_tx_query und slave_rx_query verwendet.

Standardbelegung der beiden Kanäle

Die Standard-Runtime verwendet:

LIN1   master_native
LIN2   slave_native

Diese Zuordnung ist eine Softwarekonfiguration und keine feste Master-/Slave-Beschränkung der Hardware.

Die internen Query-Pfade werden unter Runtime & Queries beschrieben.