Forum: Fahrzeugelektronik RaspberryPI CAN BUS Receiver


von Andreas A. (uragan1987)


Lesenswert?

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

von Thomas (kosmos)


Lesenswert?

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.

von Andreas A. (uragan1987)


Lesenswert?

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.

von Abc. (Gast)


Lesenswert?

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.

von Andreas A. (uragan1987)


Lesenswert?

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 :(

von mukel (Gast)


Lesenswert?

Hast du mal verschiedene Baudraten durchprobiert? 1 Mbit scheint mir für 
Automotive ziemlich schnell

von tinCAN (Gast)


Lesenswert?

Was sagt ein 'ip -s -d link show can0'?

von Wolfgang (Gast)


Lesenswert?

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?

von Andreas A. (uragan1987)


Lesenswert?

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 :(

von Andreas A. (uragan1987)


Lesenswert?

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 :(

von Olli Z. (z80freak)


Lesenswert?

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.

von Andreas A. (uragan1987)


Lesenswert?

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

von Andreas A. (uragan1987)


Lesenswert?

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"

von Klaus D. (Firma: MHS-Elektronik GmbH & Co. KG) (mhs-elektronik)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.