Auf unserer Website setzen wir Cookies ein, um Ihnen den bestmöglichen Service zu bieten und unsere Website weiter verbessern zu können. Mit dem Button "Alle akzeptieren" stimmen Sie der Verwendung aller Cookies zu. Über "Auswahl akzeptieren" können Sie die verwendeten Cookies eingrenzen. Weitere Informationen und eine Option zum Widerruf Ihrer Auswahl finden Sie in unserer Datenschutzerklärung.

Notwendig:

Diese Cookies sind für die grundlegende Funktionalität notwendig. Dadurch können Sie sich auf unserer Website und im Forum anmelden oder Produkte mit unserem Online-Shop bestellen.

Statistik:

Mit diesen Cookies erheben wir anonymisiert Nutzungsdaten für unsere Website. So können wir beispielsweise sehen, welche Inhalte für unsere Besucher interessant sind und welche Auflösungen verwendet werden. Anhand der Informationen optimieren wir unsere Website, um Ihnen eine möglichst gute Benutzererfahrung bieten zu können.

Notwendig
Statistik

Mehr

CAN XL unter Linux: Treibersoftwareentwicklung mit SocketCAN

Erfahren Sie, wie sich Linux SocketCAN weiterentwickelt, um CAN XL zu unterstützen: Neue Frame-Semantik, Timing- und Transceiver-Funktionen sowie Herausforderungen bei der Treiberkonfiguration mit realer Hardware. Enthält Einblicke in PCAN-USB XL und PCAN-Explorer 7, die seit Linux 6.19 verfügbar sind.


Von Dr. Oliver Hartkopp

Die Einführung von CAN XL (CAN mit erweiterter Rahmenlänge) betrifft nicht nur die Herausforderungen der physikalischen Schicht, der CAN-Controller und der CAN-Transceiver. Bereits seit der Einführung von CAN und CAN FD (CAN mit flexibler Datenrate) hat sich die Softwareumgebung für den Zugriff auf CAN-Schnittstellen weiterentwickelt, um mehr als ein CAN-Format zu unterstützen. Dies hatte nicht nur Auswirkungen auf das Lesen und Schreiben der CAN-Rahmendatenelemente (Kennung, Längeninformation, Dateninhalt), sondern auch auf die Konfiguration der CAN-Controller-Funktionen, wie z. B. (mehrere) Bitraten, Abtastpunkte und Kompensation der Sendeverzögerung.

Auf Linux-Systemen wird die CAN-Kommunikation seit vielen Jahren von SocketCAN, dem einheitlichen CAN-Netzwerk-Framework des Kernels, geprägt. Es hat seine Flexibilität bereits bei früheren Übergängen von Classical CAN über CAN FD zu CAN XL unter Beweis gestellt, indem es ein konsistentes Programmiermodell bietet und gleichzeitig neue Rahmenformate, Timing-Parameter und Controller-Funktionen unterstützt. CAN XL führt jedoch eine umfassendere Reihe semantischer Änderungen und Konfigurationsänderungen ein, die über die reine Erweiterung der Rahmengröße hinausgehen. Diese Änderungen erfordern eine sorgfältige Berücksichtigung des API-Designs, der Treiberkonfigurationsmechanismen und der Benutzerfreundlichkeit, insbesondere in einem Ökosystem mit mehreren Herstellern und Protokollen.

Dieser Artikel konzentriert sich auf die Treibersoftwareentwicklung für CAN XL unter Linux. Er beschreibt, wie bestehende SocketCAN-Konzepte erweitert wurden, welche Herausforderungen beim Übergang von Proof-of-Concept-Umgebungen zu realer Hardware auftreten und warum die Treiberkonfiguration zu einem zentralen Thema wird, sobald CAN-XL-Controller und -Transceiver nicht mehr nur theoretisch existieren.

 

CAN XL wird durch PCAN-USB XL und PCAN-Explorer 7 Linux-fähig.

 

Erweiterung der CAN-APIs und -Treiber für CAN XL

CAN-XL-Controller und die erweiterten CAN-XL-Transceiver bieten neue Funktionen und führen gleichzeitig neue Einschränkungen ein, die über die Programmierschnittstelle (API) berücksichtigt werden müssen. Neue Elemente wie das Akzeptanzfeld (AF), der Servicedateneinheitentyp (SDT) und die virtuellen CAN-Netzwerkkennungen (VCID) müssen von der Anwendungssoftware ausgefüllt und ausgewertet werden. Darüber hinaus muss der CAN-Treiber neue Konfigurationsoptionen für die zusätzliche XL-Bitrate und den CAN-Transceiver-Modusschalter (TMS) für Bitraten bis zu 20 Mbit/s bereitstellen. Sowohl diese Erweiterungen für die Programmierschnittstelle als auch die Treiberkonfiguration sollten so gestaltet sein, dass Anwender ihr Wissen aus CAN- und CAN-FD-Setups wiederverwenden können.

 

CAN_L, CAN_H, TXD, RXD (von oben nach unten) eines reinen CAN-XL-Frames mit aktiviertem TMS.


Linux CAN XL-Unterstützung: Vom Proof of Concept zur realen Hardware

Die grundlegende CAN-XL-Unterstützung für Linux wurde bereits mit Linux 6.1 im Dezember 2022 eingeführt. Diese Version stellte der CAN-XL-Benutzerprogrammierschnittstelle alle relevanten Datenstrukturen und virtuellen CAN-Treiber zur Verfügung. Dadurch wurde die Entwicklung der CAN-XL-Unterstützung für Tools zum Lesen, Schreiben, Generieren und Speichern von CAN-XL-Datenverkehr sowie die Implementierung einiger Proof-of-Concept-Implementierungen von CAN-in-Automation-Protokollen wie CiA 611-1, CiA 611-2 und CiA 613-3 ermöglicht.

Mit der Verfügbarkeit von „echter“ CAN-XL-Hardware gewinnt die Frage nach der Gestaltung und Realisierung der CAN-XL-spezifischen Treiberkonfigurationsoptionen an Bedeutung. Auf Linux-Seite startete NXP bereits 2022 ein erstes Proof-of-Concept-Projekt mit einem Terasic DE1-SOC FPGA-Board, Ubuntu 16.04 und drei BOSCH XCANB IP-Cores. Darauf aufbauend wurden zwei Boards auf Ubuntu 22.04.4 LTS aktualisiert und für den Betrieb mit der jeweils neuesten Linux-Mainline-Kernel-Version ausgestattet. Obwohl diese Linux-6.9-Umgebung im Mai 2024 erfolgreich in einem CiA-613-3-Integrationstest auf einem Plug-Festival getestet wurde, mussten die CAN-XL-Controller-Konfigurationen noch zur Kompilierzeit festgelegt werden.

 

Angezeigte Einstellungen einer CAN CC/FD/XL-Konfiguration im „Mixed-Mode“-Modus mit dem „ip“-Tool.

 

PCAN-USB XL Starter Bundle markiert den Anfang

Die Arbeit an der Linux-Integration der CAN XL-Treiberkonfiguration erhielt durch die Veröffentlichung des All-in-One-Bundles für CAN XL-Einsteiger im April 2025 einen wichtigen Schub. Dieses Bundle enthielt eine brandneue PCAN-USB XL-Schnittstelle sowie die Early-Access-Version der Software PCAN-Explorer 7 für Windows 11. Das PCAN XL Starter Bundle brachte den Entwicklern nicht nur neue CAN XL-Hardware für Interoperabilitätstests, sondern bot ihnen auch Einblicke in die Benutzerfreundlichkeit und Konfiguration von CAN XL unter einem anderen Betriebssystem.

 

PCAN-Explorer 7 sendet und empfängt CAN CC/FD/ XL Frames.

 

 

SocketCAN: Anzeige des CAN-Verkehrs mit candump aus den can-utils.

 

Einfache CAN-XL-Verwaltung mit Explorer 7

Insbesondere die CAN-CC/FD/XL-Bitrateneinstellungen mit Berechnungen für die Senderverzögerungskompensation, die Fehlersignalisierung und die PWM-Berechnungen beim Umschalten des CAN-XL-Transceiver-Modus waren sehr hilfreich, um die Auswirkungen des veröffentlichten ISO-CAN-Standards in der Praxis zu verstehen. Zusätzlich zu den hervorragend visualisierten CAN-XL-Konfigurationsbeschränkungen durch den Bitratenmanager bot der PCAN-Explorer 7 selbst Zugriff auf alle Arten von CAN-XL-spezifischen Frame-Inhalten bis hin zum SEC- und RRS-Bit, das bei einigen Konkurrenzprodukten standardmäßig nicht angezeigt wird.

 

Der Bitratenmanager des PCAN-Explorer 7 berechnet, validiert und visualisiert alle Bit-Timing- und Transceiver-Parameter von CAN, CAN FD und CAN XL.

 

Die Durchführung mehrerer Interoperabilitätstests verlief sehr komfortabel und erfolgreich und lieferte zudem frühzeitiges Feedback an die Entwickler des PEAK-Linux-Treibers, die auch an den Diskussionen über die Linux-CAN-XL-Konfigurations-API beteiligt waren. Dies trug dazu bei, einfache und benutzerfreundliche Optionen zu definieren, die nur die erforderlichen Einstellungen bereitstellen und einige CAN-Controller-spezifische Optionen (z. B. die Fehlersignalisierung) automatisch ableiten:

 

Modus-Einstellung

CAN CC

CAN FD

CAN XL

Error-Signalisierung

TMS

Anmerkung

FD

XL

 

 

 

 

 

 

aus

aus

J

N

N

(aktiviert)

(aus)

CC-only-Modus

an

aus

J

J

N

(aktiviert)

(aus)

CC/FD -Modus

an

an

J

J

J

(aktiviert)

(aus)

Mixed-Modus

aus

an

N

N

J

(deaktiviert)

optional

XL-only-Modus

 

Da die CAN-XL-Treiberkonfiguration seit Linux-Version 6.19 öffentlich verfügbar ist, dürfte es nur eine Frage der Zeit sein, bis der PCAN-USB XL CAN-Adapter nicht nur vom kürzlich veröffentlichten PEAK-Linux-Treiber 9.0 unterstützt wird, sondern auch im Linux-Mainline-Kernel enthalten ist. Dies würde eine vollwertige, sofort einsatzbereite CAN-XL-Plug-and-Play-Lösung bieten, die mit allen CAN-XL-fähigen Linux-Tools, einschließlich Wireshark, kompatibel ist.

 

About the Author

Nach seinem Informatikstudium kam Oliver Hartkopp 1996 bei Bosch erstmals mit dem CAN-Bus in Berührung. Seit 2001 arbeitete er bei Volkswagen im Rahmen eines internen Forschungsprojekts an der CAN-Unterstützung für Linux, die 2006 als Open-Source-Projekt veröffentlicht wurde.

SocketCAN ist die offizielle CAN-Implementierung (Controller Area Network) im Linux-Kernel. Sie bietet eine Reihe von CAN-Treibern und ein Netzwerk-Framework, das die CAN-Kommunikation über die standardmäßige BSD-Socket-API ermöglicht. Die Grundidee besteht darin, CAN-Busse wie Netzwerkschnittstellen zu behandeln, sodass Entwickler vertraute Netzwerkkonzepte anstelle proprietärer oder gerätespezifischer CAN-APIs verwenden können. SocketCAN wurde 2008 in den Linux-Kernel integriert und wird seitdem von Dr. Oliver Hartkopp betreut.