Hallo ich versuche einen kleinen Sniffer für CAN BUS zu erstellen und die Logic zu verstehen. Habe 1x Raspberry Pi 3B https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ 1x RS485 CAN HAT https://www.waveshare.com/wiki/RS485_CAN_HAT Manual: https://www.waveshare.com/w/upload/2/29/RS485-CAN-HAT-user-manuakl-en.pdf Schaltplan: https://www.waveshare.com/w/upload/1/1d/RS485_CAN_HAT_Schematic.pdf 1x älteres Tacho von einem BMW, mit dem ich experimentieren möchte CAN Info: "PT-CAN: Datenübertragungsrate etwa 500 kBits/s. Kein Eindrahtbetrieb möglich" RaspPI habe ich nach dieser Anleitung eingestellt: https://www.waveshare.com/wiki/Libraries_Installation_for_RPi Ich kann jetzt zwar mit zwei terminals Daten senden und empfangen, geprüft mit Wireshark: Anleitung: http://skpang.co.uk/blog/archives/1141 Jedoch wenn ich mein Tacho anschließe, dann passiert nichts. Es wedern keine Daten vom Tacho empfangen. Das Tacho ist mit 12V versorgt und Display leuchtet. Die Tacho CAN-High ist an CAN-High des RaspPI angeschlossen. Bei CAN-Low genau das selbe. Habe ich etwas vergessen? Gruß Andi
es kann sein das de Tacho bezüglich Diebstahlschutz erstmal auf eine bestimmte Nachricht wartet oder generell erstmal ein "Startsignal" braucht. Hast du Informationen der CAN-IDs für Geschwindigkeit, Drehzahl usw. um das an den Tacho zu senden.
Nein, ich bin gerade am Anfang mit dem Projekt, daher habe ich noch keine Informationen über die IDs Muss erstmal überprüfen, ob mein RasPI Daten bekommen kann. Das kann schon sein, dass das Tacho ein WakeUP-Signal abwartet, werde mich mal schlau machen.
Hast du die passende K-Matrix oder ein passendes .dbc-File für den bus? Wenn nein: Sorry, vergiss es. Du könntest noch die Diagnose nach der Iso-Norm probieren. Musst allerdings die Diagnose-Adresse kennen. Vorher liest du dir aber mal die ISO 15031 durch.
mir gehts erstmal drum überhaupt signale empfangen zu können, kann man das nicht indem man sich einfach in den CAN Strang einklemmt? Da ich nicht sicher war ob das Tacho CAN Signale ausgibt, habe ich jetzt direkt am Fahrzeug versucht, dort müssen 100% welche fließen, von den angeschlossenen Teilnehmern. Jedoch ohne Erfolg. So bin ich vergegangen: - CAN High/Low vom Fahzeug auf CAN H/L vom Raspberry angeschlossen - Auf Raspberry den can0 gestartet: sudo ip link set can0 type can bitrate 100000 sudo ifconfig can0 up - Wireshark gestartet und can0 ausgewählt, dort müssten wenn ich alles richtig verstanden habe Signale/Packete ankommen? Doch leider bleibt die Liste leer :(
Hast du mal verschiedene Baudraten durchprobiert? 1 Mbit scheint mir für Automotive ziemlich schnell
mukel schrieb: > Hast du mal verschiedene Baudraten durchprobiert? 1 Mbit scheint mir für > Automotive ziemlich schnell Bevor man sich in wilde Spekulationen und Probiererei ergeht, könnte man als ersten Schritt einfach mal mit einem Logikanalysator an RXCAN (Ausgang Pin 4 vom SN65HVD230) nachsehen, was auf dem Bus los ist und mit welcher Baudrate die Daten unterwegs sind?
mukel schrieb: > Hast du mal verschiedene Baudraten durchprobiert? 1 Mbit scheint mir für > Automotive ziemlich schnell wie kommst du den auf 1 Mbit? bitrate 100000 == 100kBits/s -> K-CAN bei einem BMW bitrate 500000 == 500kBits/s -> PT-CAN beim KOMBI oder habe ich hier etwas falsch verstanden? @Wolfgang Die Idee ist super mit Logikanalysator, doch leider bin ich einer von vielen die soetwas nicht besitzen :(
tinCAN schrieb: > Was sagt ein 'ip -s -d link show can0'? RaspPI an Tacho CAN angeschlossen can0 mit diesen parametern fürs Tacho gestartet: sudo ip link set can0 type can bitrate 500000 sudo ifconfig can0 up Tacho eingeschaltet, etwas gewartet und: root@raspberrypi:/home/pi# ip -s -d link show can0 3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10 link/can promiscuity 0 can state ERROR-ACTIVE restart-ms 0 bitrate 500000 sample-point 0.750 tq 250 prop-seg 2 phase-seg1 3 phase-seg2 2 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 4000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 0 0 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 Ich finde als erstes komisch, wieso ich hier "clock 4000000" habe? Den in der config ist dies drin: dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=1 000000 Dazu keine IN/OUT packete :(
Versetze den MCP erstmal in den Loopback-Modus und versuche eigene Pakete zu send und zu empfangen. Ob das BMW IPC überhaupt was sendet, so ganz ohne das restliche Netzwerk drumrum, kannst/solltest Du vorab mit einem Oszi testen. Damit, falls ein DSO zur Hand kannst Du auch gleich die richtige CAN Geschwindigkeit ermitteln. Die Ford IPCs senden auch, zumindest kurze Zeit wenn man sie an Spannung anschließt. In der Tat erwarten die aber Infos vom Motorsteuergerät (PCM), einer Zentraleinheit (BCM) oder Audiosystemen. Neben einem Signal über den Zündungsstatus gibt es natürlich auch welche die das IPC darstellt, wie z.B. die Motordrehzahl oder den Lichtstatus oder Handbremse, usw. Ohne zu wissen was das für IDs und Bytes darin sind, eher keine Chance dahinter zu kommen.
Das Senden der Packete klappt ohne Probleme send500.py -------INHALT------ import os import can can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_ctypes') msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False) can0.send(msg) ------------------ receive500.py --------INHALT------------ import os import can os.system('sudo ip link set can0 type can bitrate 500000') os.system('sudo ifconfig can0 up') can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_ctypes') msg = can0.recv(100) print msg if msg is None: print('Timeout occurred, no message.') os.system('sudo ifconfig can0 down') --------------------- root@raspberrypi:/home/pi/RS485_CAN_HAT_Code/CAN/python# python receive500.py Timestamp: 1557592324.213217 ID: 0123 S DLC: 8 00 01 02 03 04 05 06 07 Channel: can0 Habe MCP in den Loopback-Modus geschalten, ändert sich nicht viel, mit dem Befehl sudo ip link set can0 type can bitrate 500000 loopback on So wie es aussieht muss ich mir einen DSO besorgen
habe mir die zwei Schaltpläne genauer angeschaut und verglichen https://www.waveshare.com/w/upload/1/1d/RS485_CAN_HAT_Schematic.pdf http://skpang.co.uk/catalog/images/raspberrypi/pi_2/pican2_rev_B.pdf 1. Es werden mit verschiedenen Spannungen gearbeitet 1x 3V3 1x 5V 2. bei pican2 hängt zwischen RXCAN und RXD ein 10K Resistor, dazu ein 22K gegen GND Habe dieses Thema dazu gefunden und klar ist jetzt, dass es so nicht klappen kann Beitrag "CAN Transceiver für 3.3 V UND 5.0 V"
> Das Tacho ist mit 12V versorgt und Display leuchtet. > Die Tacho CAN-High ist an CAN-High des RaspPI angeschlossen. > Bei CAN-Low genau das selbe. > > Habe ich etwas vergessen? Masse, der CAN Bus benötigt CAN-H, CAN-L und GND Beitrag "CANBUS Steckerbelegung" Grüße Klaus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.