CAN-Bus mit Linux und Python



Ähnliche Dokumente
MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Technical Note 0201 Gateway

Anbindung des eibport an das Internet

Stepperfocuser 2.0 mit Bootloader

XY-Plotter. Hardware. Software µp. Software PC. von Thomas Wagner

IPv6. Übersicht. Präsentation von Mark Eichmann Klasse WI04f 22. November 2005

C.M.I. Control and Monitoring Interface. Zusatzanleitung: Datentransfer mit CAN over Ethernet (COE) Version 1.08

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

MC-Hx 006. Einbindung des MC-Hx Modul als MODBus TCP Slave. MB DataTec GmbH. Stand:

Serielle Kommunikation mit dem Arduino. Teil 1: Das Serial Peripheral Interface (SPI)

Netzwerke 3 Praktikum

Protokollbeschreibung Modbus TCP für EMU TCP/IP Modul

UserManual. Handbuch zur Konfiguration einer FRITZ!Box. Autor: Version: Hansruedi Steiner 2.0, November 2014

Installationsanleitung für das KKL bzw. AGV4000 Interface

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Kurzanleitung IP-Kamera AMGO IP 80 für Livebilder auf Smartphone/Iphone und PC

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Wireless Installationshandbuch

Adressen im Internet (Wdh.)

Heizen mit Linux/Raspberry/Python

Erfahrungen mit Hartz IV- Empfängern

mit ssh auf Router connecten

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Auswertung JAM! Fragebogen: Deine Meinung ist uns wichtig!

Übersicht. Generierung von IPv6-Paketen mit Scapy. Scapy GUI - Kurzvorstellung. Szameitpreiks - Beuth Hochschule für Technik Berlin

WLAN Konfiguration. Michael Bukreus Seite 1

Discovery Tool für COMbricks PROCENTEC

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Professionelle Seminare im Bereich MS-Office

CU-R-CONTROL. Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32. Autor: Christian Ulrich

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Grundlagen der Rechnernetze. Internetworking

Beispiel(unten ist der Spielfeldrand):

S O L U T I O N S ::::: CSE-H55 Ethernet/RS422 Wandler. Installationsanleitung

MODBUS/TCP und Beckhoff Steuerelemente

Mein Recht. im Netz. Der Ratgeber für die digitale Selbstbestimmung

Win-Digipet V 9.2 Premium Edition Wie bastele ich mir steuerbare Kontakte. Wie bastele ich mir steuerbare Kontakte? -Quick-And-Dirty-Lösung-

Synchronisierung. Kommunikationstechnik, SS 08, Prof. Dr. Stefan Brunthaler 73

Tutorial -

Arbeiten mit UMLed und Delphi


GPS Garmin MapSource - Track erstellen und nutzen

Storage Area Networks im Enterprise Bereich

Software- und Druckerzuweisung Selbstlernmaterialien

Wir machen neue Politik für Baden-Württemberg

Kurzanleitung So geht s

SmartDispatch DMR-Dispatcher. Bestellablauf. SmartDispatch-Bestellablauf V1.0

Modem: Intern o. extern

Integrierte Dienstleistungen regionaler Netzwerke für Lebenslanges Lernen zur Vertiefung des Programms. Lernende Regionen Förderung von Netzwerken

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Webalizer HOWTO. Stand:

Was ist das Budget für Arbeit?

Inbetriebnahme Profinet mit Engineer. Inhaltsverzeichnis. Verwendete Komponenten im Beispiel:

Betriebsanleitung Modbus-Konverter Unigate-CL-RS

Zählen von Objekten einer bestimmten Klasse

AW: AW: AW: AW: Kooperationsanfrage anwalt.de

EINRICHTUNG DER FANUC-MERCATOR- SCHNITTSTELLE

I N S T A L L A T I O N S A N L E I T U N G

Konzentration auf das. Wesentliche.

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Dossier Kunden zu Fans Lesen Sie auf nur fünf Seiten, was es mit dem Fanmodell auf sich hat

Tipps & Tricks: März Parameter der tnsnames.ora im RAC Umfeld. 1. Parameter: Bereich: Erstellung: RAC 03/2011 SH. Letzte Überarbeitung: 11.

Installation OMNIKEY 3121 USB

15 Transportschicht (Schicht 4)

Presse-Information

D a s P r i n z i p V o r s p r u n g. Anleitung. - & SMS-Versand mit SSL (ab CHARLY 8.11 Windows)

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Viele Bilder auf der FA-Homepage

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

DNÜ-Tutorium HS Niederrhein, WS 2014/2015. Probeklausur

Sind Sie reif fürs ASSESSEMENT CENTER?

Erstellen von x-y-diagrammen in OpenOffice.calc

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

Fachbereich Medienproduktion

Applikationsbeispiel für VPN Verbindung mit dem ZR150G und Net-Net Router

FRAGEBOGEN ANWENDUNG DES ECOPROWINE SELBSTBEWERTUNG-TOOLS

Statuten in leichter Sprache

Widerrufsbelehrung der Free-Linked GmbH. Stand: Juni 2014

Einrichtung einer eduroam Verbindung unter dem Betriebssystem Android

INTERNET UND MMS MIT DEM QTEK2020 MARCO 28. MÄRZ 04

Erst Lesen dann Kaufen

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

1. Warum gibt es Virus Meldung beim Download der Software JNVR? Aber Bitte die Datei nur aus der Webseite: herunterladen.

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

Anleitung über den Umgang mit Schildern

Zwischenablage (Bilder, Texte,...)

Elektrische Logigsystem mit Rückführung

B12-TOUCH VERSION 3.5

Kurzbedienungsanleitung DALI-TOOL

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Jeder ist ein Teil vom Ganzen Inklusion ändert den Blick

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

RARP, BOOTP, DHCP Wie ermittelt ein Client seine IP-Adresse?

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

SMS/ MMS Multimedia Center

Sound-Formate. SelfLinux Autor: Johnny Graber Formatierung: Torsten Hemm Lizenz: GFDL

FF-Messanger SMS-Zusatzalarmierung für Feuerwehren

Transkript:

CAN-Bus mit Linux und Python Grazer Linuxtage 2014 Jörg Faschingbauer 1 / 31

Inhaltsverzeichnis 1 Basics 2 CAN Interfaces 3 Programmierung 4 Hardware, Kernel 5 Schluss 2 / 31

Basics Übersicht 1 Basics 2 CAN Interfaces 3 Programmierung 4 Hardware, Kernel 5 Schluss 3 / 31

Basics Warum dieser Vortrag? Schamlose Werbung Jörg Faschingbauer jf@faschingbauer.co.at www.faschingbauer.co.at Es ist alles sehr kompliziert ( c Fred Sinowatz)... wenn man alles vermischt CAN-Bus wird nicht mit Einfachheit in Verbindung gebracht Linux bringt Einfachheit rein Netzwerkprogrammierung Allgemeinwissen SocketCAN : gespendet von Volkswagen Keine Bindung der Applikation an Hardware Freie Wahl der Programmiersprache natürlich Python Spezielles Goodie: Virtueller CAN-Bus Entwickeln und Testen am PC, ganz ohne Hardware 4 / 31

Basics Halbherzig: Geschichte aus Wikipedia jjj hier noch was her 5 / 31

Basics Netzwerkprogrammierung: Datagrammverkehr Paketvermittlung Datagramme Am Internet: User Datagram Protokoll (UDP) Keine Point-to-Point Verbindung wie TCP Broadcasts möglich Paketgrenzen 6 / 31

Basics Und CAN? Sehr kleine Pakete (bis 8 Bytes Nutzdaten) Bus-Arbitrierung, Priorität und Applikationszuordnung anhand von Paket-IDs Keine Adressen nur Broadcasts = sieht aus wie ein Netzwerk, ist ein Netzwerk 7 / 31

Basics Ein Netzwerkpaket... Definiert als C-Struct Host-Byteorder Python: struct.pack(), struct.unpack() #include <linux/can.h> struct can_frame { canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ u8 can_dlc; /* frame payload length */ u8 data[8] attribute ((aligned(8))); }; 8 / 31

CAN Interfaces Übersicht 1 Basics 2 CAN Interfaces 3 Programmierung 4 Hardware, Kernel 5 Schluss 9 / 31

CAN Interfaces Das CAN-Interface: Konfiguration CAN ist ein Netzwerk... # ip link show... alle interfaces hier... # ip link show can0 3: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAUL link/can # ip link set can0 type can help # ip link set can0 bitrate 500000 # ip link set can0 bitrate 500000 listen-only on # ip link set can0 up 10 / 31

CAN Interfaces CAN Utils (1) Nette kleine Utilities... git@gitorious.org:linux-can/can-utils.git Überbleibsel des SocketCAN Projektes ( CAN als Netzwerk ) cansend: Frame senden candump: Aufzeichnen aus 1.. Interfaces canplayer: Replay aus Logfile... und einige andere Testen der Konfiguration... und mit Fantasie mehr 11 / 31

CAN Interfaces CAN Utils (2) Frames generieren: $ cansend can0 42#deadbeef $ cangen -D deadbeef -L 4 can0 $ cangen -D deadbeef -L 4 -I 42 can0 $ cangen -D i -I 42 -L 8 -g 100 -p 100 can0 Frames mitschnüffeln: $ candump can0 $ candump can0 can1... 12 / 31

CAN Interfaces CAN Utils (3) Record, Replay: $ candump -L can0 > can0.log $ canplayer <./can0.log Wechseln des Interfaces: $ canplayer can1=can0 <./can0.log 13 / 31

CAN Interfaces vcan: Virtuelles CAN-Interface Problem: Lösung: CAN-Programmierung braucht Hardware... mindestens zwei Teilnehmer (oder Loopback über Controller) Programmieren und Testen so schwer wie möglich # modprobe vcan # ip link add dev mein-test-can type vcan # canplayer mein-test-can=can0 <./can0.log Fantasie: Programmieren und Testen zuhause am PC Continuous Integration... 14 / 31

Programmierung Übersicht 1 Basics 2 CAN Interfaces 3 Programmierung 4 Hardware, Kernel 5 Schluss 15 / 31

Programmierung CAN Programmierung CAN geht über Sockets... Paketvermittlung ähnlich wie UDP Neue Protocol Family: PF CAN Keine Adressen Binden per Interface Index Pakete ( Frames ) von fixer Größe 16 / 31

Programmierung CAN in C Socket, Interface Index Documentation/networking/can.txt int s; struct sockaddr_can addr; struct ifreq ifr; s = socket(pf_can, SOCK_RAW, CAN_RAW); strcpy(ifr.ifr_name, "can0"); ioctl(s, SIOCGIFINDEX, &ifr); addr.can_family = AF_CAN; addr.can_ifindex = ifr.ifr_ifindex; bind(s, (struct sockaddr *)&addr, sizeof(addr)); 17 / 31

Programmierung CAN in Python Socket, Interface Index can_socket = socket.socket( socket.pf_can, socket.sock_raw, socket.can_raw) can_socket.bind(( can0,)) 18 / 31

Programmierung CAN in C Frames (1) Kernel liefert (und akzeptiert) Netzwerkpakete fixer Größe CAN Frames #include <linux/can.h> struct can_frame { canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ u8 can_dlc; /* frame payload length */ u8 data[8] attribute ((aligned(8))); }; 19 / 31

Programmierung CAN in C Frames (2) struct can_frame frame; read(s, &frame, sizeof(struct can_frame)); /* do something with frame */ write(s, &frame, sizeof(struct can_frame)); 20 / 31

Programmierung CAN in Python Frames struct can_frame { canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ u8 can_dlc; /* frame payload length */ u8 data[8] attribute ((aligned(8))); }; frame_layout = "=IB3x8s" frame_size = struct.calcsize(frame_layout) frame = can_socket.recv(frame_size) can_id, can_dlc, data = struct.unpack(frame_layout, frame) /* do something with frame */ frame = struct.pack(frame_layout, can_id+1, len(data), data) can_socket.send(frame) 21 / 31

Programmierung Was gibts noch zu sagen? Interface Index 0 (Python: leerer Interface-Name, ) alle Interfaces Alternative System Calls: recvfrom(), sendto(), wenn man am Interface interessiert ist Der Rest ist Unix Filedescriptoren Event Loops Client-Server Techniken, die altbekannt sind Realtime... hat nix damit zu tun Kann man machen, wenn man will/muss Vorsicht: soll man nicht, wenn man nicht muss 22 / 31

Hardware, Kernel Übersicht 1 Basics 2 CAN Interfaces 3 Programmierung 4 Hardware, Kernel 5 Schluss 23 / 31

Hardware, Kernel MCP2515: Schaltplan http://lnxpps.de/can2udpe/openwrt/ 24 / 31

Hardware, Kernel MCP2515: Löterei 25 / 31

Hardware, Kernel MCP2515: SPI Serial Peripheral Interface SPI SPI: asymmetrisch (Master/Slave) MOSI, MISO, SCLK: SPI an sich Chip Select ( Slave Select ) Benachrichtigung an Master Interrupt Raspi: beliebiger GPIO 26 / 31

Hardware, Kernel MCP2515: Raspberry Raspberry P1 Pinout Broadcom BCM2835 2 SPI Master, davon einer über Header P1 erreichbar 2 Chip-Select CE0 ( Chip Enable ) Haufenweise IO GPIO25 Stromversorgung 3.3V für MCP2515 5V für Transceiver 27 / 31

Hardware, Kernel Arbeiten am Kernel Board File : Verdrahtung der Software mit Hardware C Code Hauptsächlich Strukturen in Analogie zur Hardware Raspberry Board File: arch/arm/mach-bcm2708/bcm2708.c MCP2515 Driver: drivers/net/can/mcp251x.c http://github.com/jfasch/linux/tree/rpi-mcp2515 28 / 31

Schluss Übersicht 1 Basics 2 CAN Interfaces 3 Programmierung 4 Hardware, Kernel 5 Schluss 29 / 31

Schluss Weiterführendes SocketCAN: http://en.wikipedia.org/wiki/socketcan CAN-Utils: https://gitorious.org/linux-can/can-utils Kernel Doc: Documentation/networking/can.txt (im Kernel Source) Python-CAN: http://python-can.readthedocs.org OBD II: http://de.wikipedia.org/wiki/on-board-diagnose 30 / 31

Schluss Viel Spass 31 / 31