LIN senden und empfangen
Master senden und empfangen sowie Slave-Antworten und Slave-Empfang konfigurieren.
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.