Hallo zusammen,
ich stehe derzeit vor einem großen Problem und komme einfach nicht
weiter. Bin schon mehrere Tage mit diversen Versuchen beschäftigt und
komme nicht zu einer annähernd funktionierenden Lösung.
Ziel:
Ansteuerung von CAN-BUS Komponenten über einen RaspberryPiB+ für
Hausautomatisierungszwecke.
Ich habe eine Versuchsschaltung aufgebaut bei der ein
Atmega8+MCP2515+MCP2551 Daten auf den Bus legt, ein zweiter
Atmega8+MCP2515+MCP2551 zeigt diese ankommenden Daten auf einem Display
an. Der CAN-Bus an sich läuft also ohne Probleme.
Jetzt will ich per Raspberry ebenfalls Daten auf den BUS legen, bzw.
Daten vom BUS lesen und verarbeiten.
Meine Erfahrung mit dem Raspberry ist gleich=0, habe bisher ein paar
eigenständige Experimente durchgeführt um Linux etwas kennenzulernen.
Ich habe inzwischen in zahlreichen Foreneinträgen Informationen über den
Betrieb eines MCP2515 an einem Raspberry gefunden, und mehrere Versuche
angestellt, leider alle ohne den geringsten Erfolg.
Mein bisher größter Fortschritt:
Ich konnte einen "vcan" auf dem Raspberry betreiben, senden und
empfangen von Daten klappte problemlos. auf dem selben Raspberry habe
ich anschließend einen MCP2515 angeschlossen, und ich dachte ich habe es
endlich geschafft, dem war aber nicht so :(
Ich habe das Gefühl, dass der Raspberry überhaupt nicht mit dem MCP
kommuniziert (Treiberproblem)?!?
Gibt es irgendjemand hier im Forum der auf einem RaspberryPiB+ einen
CAN-BUS über einen MCP2515 zum laufen gebracht hat?
(wenn möglich auf dem aktuellsten Kernel 3.16 --> ist aber nur
zweitrangig)und mir ein paar Tipps hierzu geben kann?
Weitere Informationen bezüglich meiner genauen
Vorgehensweise/Konfiguration/Schaltplan kann ich natürlich auch noch
bekanntgeben, aber währe froh wenn ich zuvor schon die ein oder andere
Person finde die mir weiterhelfen kann.
Gruß
René
Ich finde eine USB-Lösung am Raspberry besser als die Orgie mit den
Treibern für den MCP2515. Der preiswerte Bausatz von Thomas Fischl
reicht völlig aus.
http://www.fischl.de/usbtin/
Läuft auf dem Raspberry problemlos.
Immer der PI!
Der Prozessor auf dem BeagleBoneBlack hat CAN bereits direkt eingebaut,
Du musst nur noch einen Transceiver anschließen.
http://www.koervernet.de/elektronik/beagle-bone-black
Und da der CAN Controller direkt im Prozessor drin ist, ist der auch bei
hoher Buslast zu gebrauchen.
fchk
@temp:
USB-Lösung klingt super, nur habe ich derzeit kein passendes USB-Modul
zur Hand und wollte eigentlich den MCP verwenden, da diese auf Hardware
beruht und "weniger Probleme" mit sich bringt... dachte ich zumindest
bis jetzt!
@Frank K.:
Ich dachte mir damals "man fängt immer klein an" und habe mich für den
Raspberry entschieden, da dieser meines Wissens mehr verbreitet ist,
dass die simple Ansteuerung eines SPI Moduls solche Probleme bereitet,
habe ich nicht gedacht...
René P. schrieb:> @Frank K.:> Ich dachte mir damals "man fängt immer klein an" und habe mich für den> Raspberry entschieden, da dieser meines Wissens mehr verbreitet ist,> dass die simple Ansteuerung eines SPI Moduls solche Probleme bereitet,> habe ich nicht gedacht...
Der MCP2515 gehört nicht zu den Glanzleistungen von Microchip. Die haben
mittlerweile selber besseres, und die verbesserten ECAN-Module sind in
den PICs drin. Ein PIC18F25K80 ist billiger, kleiner und
CAN-Bus-technisch besser als ein AVR+MCP2515, weil (a) der
SPI-Flaschenhals wegfällt, (b) der ECAN des PIC mehr Buffer und weniger
Fehler als der MCP2515 hat, (c) der anzuschließende Quarz CAN und den
Rest des Prozessors taktet und (d) Du einen Chip weniger hast.
fchk
Frank K. schrieb:> Der MCP2515 gehört nicht zu den Glanzleistungen von Microchip. Die haben> mittlerweile selber besseres, und die verbesserten ECAN-Module sind in> den PICs drin. Ein PIC18F25K80 ist billiger, kleiner und> CAN-Bus-technisch besser als ein AVR+MCP2515, weil (a) der> SPI-Flaschenhals wegfällt, (b) der ECAN des PIC mehr Buffer und weniger> Fehler als der MCP2515 hat, (c) der anzuschließende Quarz CAN und den> Rest des Prozessors taktet und (d) Du einen Chip weniger hast.
OK, verstehe ich,... aber jemand der mir hier ein paar Tipps geben kann,
wie ich es mit dieser Hardware bewerkstelligen kann die ich zur
Verfügung habe muss es ja auch geben.
Hallo Rene,
hast Du die Konfiguration Deines Adapters über spi-config geladen ?
In etwa so:
# CS0 ; MCP2515/INT -> GPIO25 ; MCP2515 Quarz 16 Mhz
sudo spi-config devices=\
bus=0:cs=0:modalias=mcp2515:speed=1000000:gpioirq=25:pd=20:pds32-0=16000
000:pdu32-4=0x2002:force_release
sudo modprobe mcp251x
sudo ip link set can0 type can bitrate 250000
sudo ifconfig can0 up
Was sagt 'dmesg | egrep -i "can|mcp251|spi"' ?
Gruß
Gerd
Hallo Gerd,
ich habe schon mehrere Methoden probiert den CAN zum laufen zu bekommen,
das von dir beschriebene Prozedere kommt mir sehr bekannt vor.
mein aktueller Stand ist nach folgender Anleitung:
http://skpang.co.uk/blog/archives/1165
vorab noch eine prinzipielle Frage:
Der MCP2515 hat ja einen Takt Ausgang auf Pin3, dieser läuft beim
anlagen der Betriebsspannung mit 2Mhz. Im selben Moment startet der
Raspberry, nach einigen Sekunden (genau bei der Initialisierung von SPI)
hört der MCP auf dem Pin3 auf zu Takten... ist das Normal? --> ist das
ein Zeichen für eine funktionierende Initialisierung?
hier ein kleiner Auszug aus dem LOG, kompletter LOG siehe Anhang
Außer dem Eintrag in der "/boot/config.txt" steht keine weitere
Konfiguration in der benutzten Anleitung?!?
Das CAN Interface lässt sich auch ohne Fehler aktivieren: (meistens
zumindest)
1
iplinksetcan0uptypecanbitrate500000
es kann auch mit "cansend can0 7DF#01..." gesendet werden, nur zählen
weder die gesendeten bit laut "ifconfig" hoch, noch habe ich das Gefühl
das etwas per SPI an den MCP gesendet wird.
Gruß René
Hallo Rene,
das mit dem MCP2515 Clkout kann ich Dir nicht beantworten. Kann gut
sein, das die (erfolgreiche) Initialisierung das stoppt. Allgemein sieht
es gar nicht so schlecht aus - die Meldung "can0: bit-timing not yet
defined" ist ein gutes Zeichen. BTW: was passiert, wenn Du noch ein
"sudo ifconfig can0 up" mitgibst ?
Ok. Du verwendest jetzt einen neueren Kernel mit Device Tree Overlay.
Kannst Du noch den Output von "cat /proc/interrrupts ; cat
/sys/kernel/debug/gpio ; ip -s -d link show can0" geben ?
Ich vermute, das noch etwas mit der MCP2515-Int Leitung nicht in Ordnung
ist. Die Initialisierung scheint erfolgreich gewesen zu sein.
Gruß
Gerd
Gerd B. schrieb:> Ok. Du verwendest jetzt einen neueren Kernel mit Device Tree Overlay.
ja, es ist der aktuellste Kernel, und er ist noch komplett
unkonfiguriert sozusagen "jungfräulich"
"sudo ifconfig can0 up" wird durchgeführt, kein Fehler... aber ändert
nichts an der Situation.
cat /proc/Interrupts:
Wie ist der Pegel der Int Leitung ?
can state ERROR-ACTIVE --> ist richtig. Siehe MCP2515 Doku.
Bitte mach noch folgendes:
mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/gpio
der Pegel liegt im Normalfall bei 3.3V (sollte ja nur bei Empfang einer
Nachricht auf 0V sinken wenn ich das richtig verstanden habe.
Jetzt habe ich es gerade geschafft etwas zu senden! (weiß aber noch
nicht wieso es auf einmal gehen sollte...
habe folgendes gemacht:
- MCP sendete auf einmal Daten an den MCP2551 (Bus war noch nicht
angeschlossen)
- Raspberry reboot
- CAN an "CAN Monitor" (Atmega mit MCP2515 und Display) angeschlossen
- ip -s -d link Show can0 (can state STOPPED, mode DEFAULT, ...)
- sudo ip link set can0 up type can Bitrate 125000 (endgültige Baudrate)
- ip -s -d link Show can0 (can state ERROR-ACTIVE, mode DEFAULT, ...)
- cansend can0 7DF#01020301
- ip -s -d link Show can0 (TX zeigte 4 Byte und 1 Paket)
- sudo ifconfig can0 up
- ip -s -d link Show can0 (TX zeigte immer noch 4 Byte und 1 Paket)
anschließend konnte ich Daten senden!!!
wie wäre hier die richtige Vorgehensweise?
was bewirkt "sudo ifconfig can0 up" -> "up" wurde ja schon bei der
Baudrateneinstellung mitgegeben.
Gruß René
Hallo Rene,
ich kann nicht alles nachvollziehen, was Du gemacht hast.
Hilfreich zur Analyse kann auch:
candump -tA -xe can0,0:0,#FFFFFFFF
sein.
Gruß
Gerd
Hallo Gerd,
Danke für deine hilfreichen Tipps! Haben mich echt weiter gebracht.
Habe meine Schaltung gestern wieder auf den Originalzustand
zurückversetzt (ohne Oszi), um alle äußeren Einflüsse zu minimieren.
Dann den Raspberry neugestartet um nochmals zu checken welche
Vorgehensweise zum Erfolg führt. Interessanterweise musste ich nur den
CAN mit der Baudrate 125000 konfigurieren und konnte sofort mit candump
Werte empfangen.
Werde Heute nochmals eine neue SD Karte in den Raspberry stecken und die
Konfiguration wiederholen, und alle nötigen Schritte notieren, damit ich
nicht nächstes Mal wieder vor dem Nichts stehe.
Für mich ist Linux eine neue Materie mit der ich mich erst noch richtig
beschäftigen muss.
Nochmals Danke für deine Hilfe!
Gruß René
EGS TI schrieb:> Es wäre auch toll, wenn du deine Aufzeichnungen dann auch hier uploaden> könntest.
Hall René,
Ich wäre auch an Deiner Schritt-für-Schritt-Anleitung interessiert.
René P. schrieb:> Hallo Gerd,>> Danke für deine hilfreichen Tipps! Haben mich echt weiter gebracht.>
Bitte, gern gesachehen. Eine Frage noch: Hast Du beide Enden Deines
CAN-Busses mit 120 Ohm terminiert ?
Gruß
Gerd
Gerd B. schrieb:> Bitte, gern gesachehen. Eine Frage noch: Hast Du beide Enden Deines> CAN-Busses mit 120 Ohm terminiert ?
Ja, wobei die komplette Leitungslänge des CAN-Bus derzeit nur etwa 50cm
beträgt.
So, habe nun nochmals einen Pi neu Konfiguriert (funktionierte alles
problemlos) und gleichzeitig diese Anleitung geschrieben, ich hoffe der
ein oder andere kann etwas damit anfangen.
Ich habe versucht die ganzen Tipps von Gerd B. auch mit einfließen zu
lassen.
Gruß René
Sehr gute Beschreibung, Rene. Das wird vielen helfen. Darf ich diese auf
meiner Internet-Seite (http://lnxpps.de/rpie) veröffentlichen ?
Alternativ zum CAN Tranceiver MCP2551 kann man auch den MCP2562
verwenden.
Vorteil: Der Spannungsteiler entfällt, da der Tranceiver mit zwei
Spannungen arbeitet (VDD und VIO).
Gruß
Gerd
Habe kein Problem damit Gerd, ich bin froh wenn ich der Gemeinschaft
wieder einen Teil zurückgeben kann...
Wenn mindestens einer mit dieser Anleitung Erfolg hat, und nicht solange
mit Recherche verbringen muss, hat sich meine Mühe gelohnt.
Über Rückmeldungen/Verbesserungsvorschläge hier im Forum würde ich mich
natürlich freuen.