Verbindungsaufbau zwischen Raspberry Pi 4B und MCP2515

  • Hallo zusammen,

    ich versuche mit meinem Raspberry Pi 4 (5.10.17-v7l+) eine Verbindung mit einem Automobilsteuergerät aufzubauen. Als CAN-Schnittstelle dient der MCP2515. Leider funktioniert das nicht wie in diversen Anleitungen beschrieben.


    Meine bisherigen Aktivitäten:

    - anschließen des CAN-Moduls an die vorgegebenen PINs aus dem Datenblatt

    dabei sind: CS an Pin 24(CE0)

    S0 an Pin 21(MISO)

    SI an Pin 19 (MOSI)

    SCK an Pin 23

    NT an Pin 22 (GPIO 25 für Interrupt)

    Spannungsversorgung 3,3 V an Pin 1 und 5 V an Pin 4

    (Status-LED am MCP2515 leuchtet)

    - Upgrade (sudo apt-get update; sudo apt-get upgrade)

    - CAN-Utils installieren (sudo apt-get install can-utils)

    - SPI-Schnittstelle über raspi-config eingeschalten

    - Overlay hinzufügen (sudo nano /boot/config.txt)

        dtparam=spi=on

        dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25

    - bei der Überprüfung des CAN-Kanals (sudo ip link set can0 up type can bitrate 50000)

    wird folgender Fehler angezeigt: Cannot find device „can0“


    Meiner Meinung liegt das Problem im SPI Overlay:

    Welches Overlay soll ich verwenden?    dtoverlay=spi<n>-<m>cs (genauer: dtoverlay=spi0-0cs)

    Oder: dtoverlay=spi-bcm2835-overlay

    Nach dem reboot wird in den Gerätedateien für SPI in /sys/dev/bus/spi/devices

    spi0.0 und spi0.1 angezeigt ohne die Einträge zu can0.

    Zudem wird in die freigegebene Schnittstelle im Ordner /dev/spi* nicht angezeigt nur spidev0.1


    Welches Overlay muss ich für spi0.0 aktivieren bzw. falls nicht vorhanden wie installiere ich ein Overlay?

    Eventuell liegt auch der Fehler wo anders cih bin mir nich zu 100% sicher.

  • Nach meinem /boot/overlays/README braucht das mcp2515-can0 Overlay auch die Angabe einer Maximum SPI frequence in Hz.

    Es gilt immer die Anleitung am installierten System, sodass im README bei Dir etwas anderes stehen kann. Welche Werte default in den Treiber einkompiliert sind, geht aus meiner Anleitung (README) nicht hervor.


    Servus !


    PS: Ground fehlt in der Belegung(sbeschreibung). Und für das verwendete Modul selbst, 3 ,3 V, 5 V kann man nicht einmal orakeln.

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • Ist es denn ein CAN-Modul für 3,3V?

    Es ist ein MCP2515 Stand-Alone CAN Controller with SPI Interface. Laut Datenblatt V(DD)- Supply Voltage 2,7 - 5,5 V.

    Am Pi muss der natürlich mit 3,3 V betrieben werden. Woher die 5 V in #1 herkommen, weiss ich nicht.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Moin chris-h-r-,


    erstmal: Herzlich Willkommen im Forum!

    Nach dem reboot wird in den Gerätedateien für SPI in /sys/dev/bus/spi/devices

    spi0.0 und spi0.1 angezeigt ohne die Einträge zu can0.

    Zudem wird in die freigegebene Schnittstelle im Ordner /dev/spi* nicht angezeigt nur spidev0.1

    Das ist normal. Entferne den Eintrag für den Can-Bus aus der config.txt und es sind beide Einträge wieder da.


    Du bist dir sicher das dein Kontroller mit 16MHz läuft?

    Die Verdrahtung ist auch richtig?


    Weil erst wenn der Baustein durch die SPI-Schnittstelle richtig erkannt wird, kann der CAN-Bus auch angezeigt werden.


    gtfn-e :

    Ist es denn ein CAN-Modul für 3,3V?

    Wenn der Baustein kann von 2,7V - 5,5V betrieben werden. Besser aber 3,3V, dann wird kein Levelshifter zum Raspberry benötigt.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Hallo zusammen,


    Vielen Dank für die schnellen Antworten. Ich habe einige Anregungen überprüft.

    • Ergänzung der maximalen SPI-Frequenz im Overlay hilft leider nichts
    • Zu den Default Werten bei SPI speziell bei spi0-1cs

    CS-Pin bei Pin 8 und der Rest der SPI-Anschlüsse wie im Plan (überprüft habe ich das mit dem Befehl raspi-gpio) ->auch im Anhang

    • der GND-Anschluss ist auf Pin 6, den habe ich oben vergessen
    • das CAN-Modul hat einen 3,3V Anschluss und einen 5 V Anschluss, die laut Datenblatt beide angeschlossen sein müssen.
    • Das CAN-Modul läuft mit einer Frequenz von 8Mhz, was ich in Overlay ausgebessert habe (hat beim Test leider nichts bewirkt)

    Ich habe gelesen, dass für neuere Raspberry-Pi Modelle das Overlay dtoverlay=spi<n>-<m>cs gemäß der Benennung in Ordner /boot/overlays , wie ist dazu die Meinung der Mehrheit ?


    Der Fehler ist meiner Meinung nach wie vor im Erkennen der SPI-Schnittstelle

  • Moin chris-h-r- ,


    Gehen wir mal davon aus, das bei dir alles richtig verdrahtet ist.

    Was sagt denn der Befehl journalctl -ae | grep mcp251* ?


    ich habe es nur eingerichtet, aber nichts angeschlossen.


    Code
    journalctl -ae | grep mcp251*
    Aug 04 01:32:16 bernd-stick-lite kernel: mcp251x spi0.0: MCP251x didn't enter in conf mode after reset
    Aug 04 01:32:16 bernd-stick-lite kernel: mcp251x spi0.0: Probe failed, err=110
    Aug 04 01:32:16 bernd-stick-lite kernel: mcp251x: probe of spi0.0 failed with error -110

    Und wie du siehst wird auch spi0.0 verwendet.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Es gibt nicht nur ein Modul (auf der Welt), auf dem ein MCP2515 SPI-CAN-Controller verbaut ist.

    Vielleicht kannst Du einen Link zu dem von Dir verwendeten/gekauften Modul posten, damit wir nicht aneinander vorbei reden.


    Bei mir steht in /boot/overlays/README:

    zu mcp2515*

    und zu spi* u.A.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo zusammen,

    Bernd666 Danke für den Tipp ich komme bei dem Befehl auf das gleiche Ergebnis. (Siehe Anhang)

    Heißt das dann, dass die SPI-Schnittstelle funktioniert und möglicherweise bei den CAN-Modul Anschlüssen ein Problem vorliegt?


    RTFM Vielen Dank auch für deine Antwort, ich habe die gleichen Overlays in der Readme gespeichert (Siehe Anhang)

    Link für das CAN-Modul:

    Joy-it SBC-CAN01 CAN Interface 1 St. Passend für (Entwicklungskits): Arduino, Banana Pi, Raspberry Pi, Cubieboard kaufen (conrad.de)

  • Post by gtfn-e ().

    This post was deleted by the author themselves ().
  • Post by gtfn-e ().

    This post was deleted by the author themselves: doppelpost ().
  • So, hier nochmal mein Post ohne Zitat:


    Ich habe das gleiche Modul von Reichelt, allerdings ist bei mir ein 16MHz Quarz verbaut. Schau bitte mal nach was

    bei Deinem Modul auf der Platine verbaut ist. Hatte selber schon viel Spass mit den unterschiedlichen Quarzen auf

    verschiedenen Modulen...


    mfg

    gtfn

  • Moin chris-h-r- ,


    Bernd666 Danke für den Tipp ich komme bei dem Befehl auf das gleiche Ergebnis. (Siehe Anhang)

    Heißt das dann, dass die SPI-Schnittstelle funktioniert und möglicherweise bei den CAN-Modul Anschlüssen ein Problem vorliegt?

    Im Gegenteil. Deine SPI-Schnittstelle bzw. der MCP2515 antwortet nicht.

    Nochmal die Frage, deine Verdrahtung ist genauso wie in dem Datenblatt von der Conrad-Seite?


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Im Gegenteil. Deine SPI-Schnittstelle bzw. der MCP2515 antwortet nicht.

    Ist ja nicht initialisiert [ dtoverlay=spi0-1cs].

    Und bei dtoverlay=mcp2515-can0 (oder can1) fehlt die spimaxfrequency=

    Der Wert ist wohl aus dem Datenblatt des mcp2515 zu entnehmen (Table 13-6)


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Moin RTFM,


    Ist ja nicht initialisiert [ dtoverlay=spi0-1cs].

    Ist das nun ironisch gemeint?

    In der README der Overlays steht folgendes:

    Unter anderem steht da spi0.0

    Und die ist aktiviert!!


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Unter anderem steht da spi0.0

    Und die ist aktiviert!!

    Ich würde eher sagen, die serielle Gerätedatei ist zwar angelegt (mit mknod), kann aber die Register des mcp2515 nicht erreichen.

    Der erwartete Link auf /dev/can0 wird wohl frühestens erst dann angelegt, wenn das Device mit dem MCP kommunizieren kann.


    Mit den Angaben des TO in #1 [sudo ip link set can0 up type can bitrate 50000] und #6 [Ergänzung der maximalen SPI-Frequenz im Overlay hilft leider nichts] fange ich sowieso nichts an.


    Wenn beim Family Driver mcp151*fd die Aktivierung von spi1, oder spi2 ausdrücklich gefordert wird, kann das beim mcp2515-can0 | 1 imho nicht schaden. Ungünstigstenfalls wird eine MINOR Nummer der Gerätedatei verbraten.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Könnte sein, dass es mit dem Modul funktioniert nicht funktioniert.

    Von einem OBD Hersteller gibt es auch ein Modul für den PI, das Extra für OBD vorgesehen ist und dass auch Dokumentiert ist.

    Link

    Dokumentation unter Download in dem Link!

  • Hallo zusammen,

    vielen Dank für eure Hilfe !

    ich habe die Verbindung aufbauen können mit dem Overlay siehe Anhang.

    Die Frequenz auf dem MCP2515 ist 8MHz laut Datenblatt auf dem Board habe ich leider keinen Hinweis gefunden.

    Wo genau jetzt das Problem lag weiß ich um ehrlich zu sein auch nicht.

    Ganz reibungslos funktioniert die Kommunikation noch nicht.

    Wenn ich eine Nachricht mit dem Tool Caring Caribou schicke und dann den Bus überprüfe, dann ist unter den Tx Daten kein Eintrag.

    Liegt das an der Bitrate (habe 500000 Bit/s eingestellt)?

    Die Tx Nachrichten müssten bei ip -s -d link show can0 unabhängig vom Empfänger angezeigt werden.