MCP2515 an RPi3 in Betrieb nehmen -> Cannot find device "can0"

  • Hallo zusammen,

    ich möchte meinen RPi3 an einem CAN-Bus betreiben. Dafür habe ich mir so ein CAN-Board besorgt:
    http://www.ebay.de/itm/Neu-Arduin…xoAAOSw~gRVzEV9

    Als Betriebssystem verwende ich Raspbian vom 27.05.2016.

    Als Grundlage habe ich dieses Tutorial verwendet:
    CanBus mit dem Raspberry Pi

    Zwischen dem RPi und dem CAN-Board habe ich zwei von diesen Convertern um die Spannungspegel anzupassen:
    http://www.ebay.de/itm/Pegelwandl…K0AAOSw8aNXGkGD

    Das Problem ist, dass ich nach dem Befehl

    Code
    sudo /sbin/ip link set can0 up type can bitrate 500000


    immer die Meldung

    Code
    Cannot find device "can0"


    erhalte.

    Darauf hin habe ich an die 3,3V-CS-Leitung mal das Oszi angeschlossen um zu sehen, ob das überhaupt etwas raus kommt.
    Das ist aber nicht der Fall. Die CS-Leitung bleibt immer unverändert.

    Um sicher zu gehen, dass ich mit den CS des MCP2515 auch tatsächlich mit dem SPI_CE0_N (GPIO8) des RPi verbunden habe, habe ich die /boot/config.txt wieder in ihren Ursprungszustand zurück gesetzt und den GPIO über die Shell auf Ausgang gesetzt und seinen Wert verändert. Die Änderungen konnte ich am Oszi entsprechend sehen.

    Es scheint, als ob keine SPI-Kommunikation stattfindet.

    Gibt es beim RPi3 vielleicht etwas besonderes zu beachten?

    Hat jemand bereits einen MCP2515 am RPi3 in Betrieb genommen?

    Danke für eure Hilfe!

  • MCP2515 an RPi3 in Betrieb nehmen -> Cannot find device "can0"? Schau mal ob du hier fündig wirst!

  • Scheinbar wurde etwas mit der neuen Kernel Version geändert.
    Vor ein paar Tagen hatte jemand genau das gleiche Problem.
    Probier mal diese Einträge in der /boot/config.txt :

    Code
    dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25 
    dtoverlay=spi-bcm2835

    Das hat das Problem bei ihm gelöst, ich probiere das gleich auch mal aus und update dann mal das Tutorial. :thumbs1:
    Viel Glück noch :lol:

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Hallo petit_miner,

    danke für die schnelle Antwort. Ich sitze gerade auch schon wieder vor meinem Pi und teste das gleich mal. Hab hierfür schnell das Betriebssystem neu auf die SD-Karte aufgespielt.

    Wie sieht es mit der Zeile

    Code
    dtparam=spi=on


    in der /boot/config.txt aus? Weisst du schon ob die noch rein muss oder nicht?

    Und muss ich die SPI-Schnittstelle in raspi-config noch aktivieren?

    Danke für deine Hilfe!

    Update: habe es jetzt nochmal mit unterschiedlichen Variationen der Konfiguration getestet. Leider ohne Erfolg. Ich gehe als nächstes nochmal meine Verdrahtung durch...

    Update: Ich habe in Raspbian alles, was SPI angeht wieder entfernt. Anschließend habe ich alle GPIO, die in Verwendung sind über die Konsole (/sys/class/gpio) händisch angesprochen und deren Pegel nach den Pegelwandlern mit dem Oszi betrachtet. Das sieht alles gut aus. Die Verdrahtung ist korrekt und die Signale kommen durch...

    Und plötzlich funktioniert der Aufruf

    Code
    sudo /sbin/ip link set can0 up type can bitrate 500000


    Das Interface wird mit ifconfig als can0 aufgeführt.

    Hab dann gleich mal candump ausgeführt, allerdings kommen da keine Daten an.
    Als Sender verwende ich einen Laptop mit einem CAN-Interface und einer Software die garantiert funktionieren. (500k, CAN-Message wird zyklisch alle 5ms ausgesendet)
    CAN-High und CAN-Low sind nicht vertauscht. Das Anschließen eines Abschlusswiderstandes (120Ohm) bringt auch nichts.

    Einmal editiert, zuletzt von matt (9. August 2016 um 19:38)

  • Dann stehst du genau vor dem gleichen Problem wie ich.
    Bei mir wird der CAN Bus richtig eingehangen aber empfängt keine Daten.
    Ich habe das CAN Bus Board von SKpang.
    Senden und empfangen funktioniert bei mir gar nicht.
    Nur eine Idee für dich: Welcher Wert steht auf dem Quarz auf dem CAN Bus Board?
    Wenn du nur 2 Teilnehmer im gesamten Bus hast musst du bei beiden den Terminierungswiderstand setzten.
    Der Widerstand zwischen CAN High und Low muss dann 60 Ohm betragen.

    Gesendet von meinem GT-I9305 mit Tapatalk

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Dann weiss ich zumindest mal, dass es nicht nur mir so ergeht :)

    Hast du eine Vermutung, an was es liegen könnte?
    Könnte die Verwendung einer älteren Version von Raspbian kurzfristig Abhilfe schaffen?

  • Ja die einzigsten Sachen wären deine Bus Terminierung und welches Quarz auf dem Board verbaut wurde.
    Ich kann diese Anleitung zur richtigen Busterminierung empfehlen: LINK

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Auf dem Board ist ein 8MHz Quarz verlötet.

    Die Terminierung habe ich angepasst. Allerdings ohne Erfolg.
    candump und cansniffer geben immer noch nichts aus.

    Einmal editiert, zuletzt von matt (10. August 2016 um 20:01)

  • Dann liegt der Fehler, hoffentlich, daran das du im Devicetree statt 8000000 16000000 eingegeben hast.
    dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25

    Der Oscillator muss auch im Devicetree angegeben werden.
    Müsste das auch mal im Tutorial eintragen...

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Es funktioniert!

    Ich hatte vorhin noch den falschen CAN-Kanal des CAN-Adapters, der zyklisch Messages raus sendet mit dem MCP2515 Board verbunden.

    Außerdem habe ich in der /boot/config.txt den Wert für den Oszillator angepasst:

    Code
    dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
  • Ich habe gerade den Wert nochmal auf 16000000 geändert. Dann hatte ich genau das gleiche Verhalten wir vorher.
    Gleich entferne ich mal noch die Terminierungswiderstände um zu prüfen welchen Einfluss die darauf haben.

    Gerade ist mir auch noch aufgefallen, dass candump und cansniffer nach kurzem Betrieb keine Daten mehr ausgeben.
    Laut meinem Rechner, der zyklisch Daten aussendet, liegt am Bus aber kein Fehler vor...


    Update:
    Ganz ohne Terminierungswiderstände funktioniert es auch bei einem oscillator-Wert von 8000000 nicht.
    Sobald ein Widerstand drin ist scheint es aber zu funktionieren.

    Das Problem, dass von candump nach kurzem Betrieb keine Daten mehr ausgegeben werden besteht weiterhin.
    Auch das entfernen des CAN-Interfaces mittels

    Code
    sudo ifconfig can0 down


    und das anschließende wieder Einhängen bringen nichts. Bis jetzt behelfe ich mir mit einen Reboot.

    Einmal editiert, zuletzt von matt (10. August 2016 um 20:16)

  • Das erinnert mich an die Zeit wo es beim PI noch keinen Devicetree gab, damals musste man die Module manuell laden und waren äußert verbuggt.
    Der schlimmste Bug ist der das der Buffer vom MCP2515 nach einer Zeit voll läuft und dann alle anderen CAN Nachrichten verwirft.
    Beim 3.18 Kernel wo der Devicetree eingeführt wurde funktioniert alles bestens, Stundenlang CAN Nachrichten vom Auto mit 500kbps auslesen war kein Problem.
    :D
    Ich probiere das Morgen mal aus

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

    Einmal editiert, zuletzt von petit_miner (10. August 2016 um 20:26)

  • Hallo Zusammen,

    ich habe mich gestern nochmal mit dem Problem befasst.
    Mittlerweile ich das ganze am Laufen.

    Hier mal das aktuelle Setup:
    -RPi 3
    - Raspbian vom 23.09.2016 (Kernel: 4.4.26-v7+)
    - Pegelwandler: http://www.ebay.de/itm/TXS0108E-8…FkAAOSwbsBXpLQf
    - CAN-Interface: http://www.ebay.de/itm/MCP2515-Mo…oUAAOSwGtRXyHA5

    Hier die Zeilen die ich der /boot/config.txt angehängt habe:

    Code
    dtparam=spi=on
    dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
    dtoverlay=spi-bcm2835-overlay

    Nach dem Starten des RPi aktiviere ich das Interface:

    Code
    sudo /sbin/ip link set can0 up type can bitrate 500000

    Damit funktionert die Kommunikation nun schon seit mehreren Stunden.


    Als nächstes will ich an den RPi ein zweites CAN-Interface (über CE1) hängen um gleichzeitig mit zwei CAN-Bussen arbeiten zu können.

  • Habe gerade die /boot/config.txt wie folgt angepasst:

    Code
    dtparam=spi=on
    dtoverlay=mcp2515-can1,oscillator=8000000,interrupt=25
    dtoverlay=spi-bcm2835-overlay

    Damit wollte ich testen, ob alles grundsätzlich mit dem CAN1 funktioniert. An der Verdrahtung habe ich lediglich den CS des MCP2515 von CE0 auf CE1 umgesteckt.
    Der Befehl

    Code
    sudo /sbin/ip link set can1 up type can bitrate 500000


    gibt allerdings

    Code
    Cannot find device "can1"


    aus. Muss noch zusätzlich was geändert werden?

    Danke

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!