CAN und Linux im praktischen Einsatz Linux Stammtisch 8. Juni 2012 Lutz Wirsig
Seite 1/31 Inhalt CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 2/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 3/31 CAN-Bus Entwicklungsziele, Verwendung einfache Verkabelung durch preiswerte verdrillte Zweidrahtleitung einfache nachträgliche Erweiterung des Netzwerkes kein Einfluß auf Netzwerk bei Ausfall eines Busteilnehmers Multi Master Netzwerksystem bidirektionale Datenrichtung Verwendung in Autombilindustrie, Luft-und Raumfahrt, Automatisierungstechnik und Medizintechnik
Seite 4/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 5/31 Einordnung in ISO 7-Schichtenmodell Application Layer 7 z.b. CANopen 3 Transport Layer 2 1 Data Link Layer Physical Layer CAN 2.0 (Bosch)
Seite 6/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 7/31 Bustopologie High Speed CAN Knoten 1 Knoten 2 Knoten N 120Ω 120Ω
Seite 8/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 9/31 Signalpegel High Speed CAN (ISO-IS 11898) 5.0 V 3.5 V U CAN_H 2.5 V 1.5 V U CAN_L 0.0 V Rezessiv (binäre 1 ) Dominant (binäre 0 )
Seite 10/31 Signalpegel Low Speed CAN (ISO-IS 11519) 5.0 V 3.6 V U CAN_H 2.5 V 1.4 V U CAN_L 0.0 V Rezessiv (binäre 1 ) Dominant (binäre 0 )
Seite 11/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 12/31 Stuffbits
Seite 12/31 Stuffbits nach 5 aufeinanderfolgenden gleichwertigen Bits wird ein anderwertiges Stuffbit eingeschoben
Seite 13/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 14/31 Arbitrierung - Open Kollektor Kopplung 5V R T R T R T Knoten 1 Knoten 2 Knoten 3
Seite 14/31 Arbitrierung - Open Kollektor Kopplung 5V R T R T R T Knoten 1 Knoten 2 Knoten sendet und liest Bus-Pegel ein Knoten 3
Seite 14/31 Arbitrierung - Open Kollektor Kopplung 5V R T R T R T Knoten 1 Knoten 2 Knoten 3 Knoten sendet und liest Bus-Pegel ein Knoten liest dominaten Pegel, hat aber einen rezessiven gesendet
Seite 14/31 Arbitrierung - Open Kollektor Kopplung 5V R T R T R T Knoten 1 Knoten 2 Knoten 3 Knoten sendet und liest Bus-Pegel ein Knoten liest dominaten Pegel, hat aber einen rezessiven gesendet
Seite 14/31 Arbitrierung - Open Kollektor Kopplung 5V R T R T R T Knoten 1 Knoten 2 Knoten 3 Knoten sendet und liest Bus-Pegel ein Knoten liest dominaten Pegel, hat aber einen rezessiven gesendet
Seite 14/31 Arbitrierung - Open Kollektor Kopplung 5V R T R T R T Knoten 1 Knoten 2 Knoten 3 Knoten sendet und liest Bus-Pegel ein Knoten liest dominaten Pegel, hat aber einen rezessiven gesendet
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet Knoten stoppt seine Übertragung
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet Knoten stoppt seine Übertragung
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet Knoten stoppt seine Übertragung
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet Knoten stoppt seine Übertragung
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet Knoten stoppt seine Übertragung
Seite 15/31 Arbitrierung - Identifier Priorität 11 Bit Identifier Knoten 1 Knoten 2 Knoten 3 Buspegel 10 9 8 7 6 5 4 3 2 1 0 Knoten sendet Knoten stoppt seine Übertragung
Seite 16/31 Gliederung CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 17/31 Nachrichtenformat Standard Frame CAN 2.0A (11 Bit Identifier) Bus Leerlauf 0 Bit Start-Bit Identifier 11 Bit RTR-Bit IDE-Bit Reserve-Bit Datenlänge 4 Bit Daten 0... 8 Byte CRC 15 Bit CRC Delimiter ACK 2 Bit EOF 7 Bit IFS 3 Bit Bus Leerlauf 0 Bit
Seite 17/31 Nachrichtenformat Standard Frame CAN 2.0A (11 Bit Identifier) Bus Leerlauf 0 Bit Start-Bit Identifier 11 Bit RTR-Bit IDE-Bit Reserve-Bit Datenlänge 4 Bit Daten 0... 8 Byte Für Anwender wichtig! CRC 15 Bit CRC Delimiter ACK 2 Bit EOF 7 Bit IFS 3 Bit Bus Leerlauf 0 Bit
Seite 18/31 Nachrichtenformat Extended Frame CAN 2.0B (29 Bit Identifier) Bus Leerlauf 0 Bit Start-Bit Identifier 11 Bit SRR-Bit IDE-Bit Identifier 18 Bit RTR-Bit Reserve 2 Bit Datenlänge 4 Bit Daten 0... 8 Byte CRC 15 Bit Unterschiede zu Standard Frame Format CRC Delimiter ACK 2 Bit EOF 7 Bit IFS 3 Bit Bus Leerlauf 0 Bit
Seite 19/31 Gliederung CAN unter Linux und Praxis CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 20/31 CAN unter Linux und Praxis Kernelkonfiguration Linux Kernel version >= 2.6.32 CONFIG_CAN=m CONFIG_CAN_RAW=m CONFIG_CAN_BCM=m CONFIG_CAN_DEV=m CONFIG_CAN_CALC_BITTIMING=y $ make modules Kernelmodule laden $ sudo modprobe can_raw $ sudo modprobe can_dev Modul mit Gerätetreiber laden, hier: $ insmod systec_can.ko
Seite 21/31 CAN unter Linux und Praxis Netzwerkkonfiguration CAN-Bus konfigurieren $ ip link set can0 type can bitrate 500000 optional Timings setzen (Vorsicht nur für Profis) (z.b. Werte für 125000 Baud) $ ip link set can0 type can tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2... und Start $ ifconfig can0 up Reset des CAN-Buses, z.b. notwendig nach Kurzschluß $ ip link set can0 type can restart für die Statistik $ ip -details -statistics link show can0
Seite 22/31 Gliederung CAN unter Linux und Praxis CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 23/31 CAN unter Linux und Praxis Werkzeuge Programme aus dem Paket can-utils cangen - generiert zufällig CAN-Pakete einmalig oder zyklisch cansend - sendet bestimmte CAN-Pakete candump - tcpdump für den CAN-Bussysteme canbusload - top für den CAN-Bussysteme Wireshark - Analyse vom Netzwerk...
Seite 24/31 Gliederung CAN unter Linux und Praxis CAN-Bus Entwicklungsziele, Verwendung Einordnung in OSI 7-Schichtenmodell Bustopologie High Speed CAN Signalpegel Stuffbits Arbitrierung Nachrichtenformat CAN unter Linux und Praxis Konfiguration Werkzeuge On-Board-Diagnose OBD Literatur Fragen
Seite 25/31 CAN unter Linux und Praxis OBD Diagnosestecker ISO 15031-3 Pin 6 CAN_HIGH Pin 14 CAN_LOW
Seite 26/31 CAN unter Linux und Praxis Gesetzliche vorgeschriebene CAN-Identifier ISO 15765-4 Diagnoseanfrage-Identifier 0x7DF 0x7E0 0x7E1 0x7E2 0x7E3 0x7E4 0x7E5 0x7E6 0x7E7 Steuergerätantwort-Identifier funktionale Anfrage 0x7E8 0x7E9 0x7EA 0x7EB 0x7EC 0x7ED 0x7EE 0x7EF
Seite 27/31 CAN unter Linux und Praxis OBD Anfrage Nachrichtenlayout Byte 7 Byte 6 Byte 5 Byte 4 Byte 3 Byte 2 Byte 1 Byte 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Füllbyte z.b. 0x55 Füllbyte z.b. 0x55 Füllbyte z.b. 0x55 Füllbyte z.b. 0x55 Füllbyte z.b. 0x55 Parameter Identifier PID z.b. 0x05 Service Identifier SID z.b. 0x02 Anzahl der nachfolgenden Datenbytes z.b. 0x02 z.b. Kühlw.temperatur ID=0x7DF Daten=0x 02 02 05 55 55 55 55 55
Seite 28/31 CAN unter Linux und Praxis OBD Antwort Nachrichtenlayout Byte 7 Byte 6 Byte 5 Byte 4 Byte 3 Byte 2 Byte 1 Byte 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Füllbyte z.b. 0xAA Füllbyte z.b. 0xAA Füllbyte z.b. 0xAA Füllbyte z.b. 0xAA Antwort-Werte z.b. 0x3E Parameter Identifier PID z.b.0x05 Service Identifier SID & 0x40 z.b.0x42 Anzahl der nachfolgenden Datenbytes z.b.0x03 z.b. Kühlw.temperatur ID=0x??? Daten=0x 03 42 05 3E AA AA AA AA
Seite 29/31 CAN unter Linux und Praxis Umrechnung der HEX-Werte in physikalische Werte PH = HEX 2 n (MAX MIN) + MIN 1 PH... Physikalischer Wert HEX... Hexadezimaler Wert MAX... Maximaler Wert MIN... Minimaler Wert n... Datengröße in [Bit] z.b. HEX = 0x3E = 62, n = 8, MIN = 40 C, MAX = +215 C PH = 62 2 8 1 (215 C ( 40 C)) + ( 40 C) = 22 C
Seite 30/31 Literatur CAN 2.0 Specifikation Bosch http:www.semicond uctors.bosch.demediapdfcanliteraturcan2 spec.pdf ISO 15765-4: Road vehicles Diagnostics on Controller Area Networks (CAN) - Part 4 Requirements for emissions-related systems. 2005 ISO 15031-3: Road vehicles - Communication between vehicle and external equipment for emissions-related diagnostics - Part 3 Diagnostic connector and related electrical circuits, specification and use OBD-II Pids http:en.wikipedia.orgwikiobd-ii_pids Zimmermann, W.; Schmidgall, R.: Bussysteme in der Fahrzeugtechnik. Vieweg, 2006
Seite 31/31 Fragen Fragen? Vielen Dank für Ihre Aufmerksamkeit!