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
:
Bearbeitet durch User
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
1 | ...
|
2 | [ 6.676666] sd 0:0:0:0: [sda] 7831552 512-byte logical blocks: (4.00 GB/3.73 GiB) |
3 | [ 6.696595] CAN device driver interface |
4 | [ 6.721487] sd 0:0:0:0: [sda] Write Protect is off |
5 | [ 6.744905] spi spi0.0: setting up native-CS0 as GPIO 8 |
6 | [ 6.757416] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00 |
7 | [ 6.759220] sd 0:0:0:0: [sda] No Caching mode page found |
8 | [ 6.783921] sd 0:0:0:0: [sda] Assuming drive cache: write through |
9 | [ 6.842181] random: nonblocking pool is initialized |
10 | [ 6.854253] sda: sda1 |
11 | [ 6.886432] sd 0:0:0:0: [sda] Attached SCSI removable disk |
12 | [ 7.333585] spi spi0.1: setting up native-CS1 as GPIO 7 |
13 | [ 9.008537] sd 0:0:0:0: Attached scsi generic sg0 type 0 |
14 | [ 12.534009] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) |
15 | [ 13.102326] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) |
16 | [ 23.776403] mcp251x spi0.0 can0: bit-timing not yet defined |
17 | [ 23.776450] mcp251x spi0.0: unable to set initial baudrate! |
18 | ...
|
19 | [ 24.720899] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup |
20 | [ 24.879310] mcp251x spi0.0 can0: bit-timing not yet defined |
21 | [ 24.879357] mcp251x spi0.0: unable to set initial baudrate! |
22 | [ 25.879995] mcp251x spi0.0 can0: bit-timing not yet defined |
23 | [ 25.880047] mcp251x spi0.0: unable to set initial baudrate! |
24 | [ 26.325205] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1 |
25 | |
26 | [ 30.886607] mcp251x spi0.0 can0: bit-timing not yet defined |
27 | [ 30.886656] mcp251x spi0.0: unable to set initial baudrate! |
28 | [ 31.592628] Adding 102396k swap on /var/swap. Priority:-1 extents:2 across:2134012k SSFS |
29 | [ 31.888007] mcp251x spi0.0 can0: bit-timing not yet defined |
30 | [ 31.888056] mcp251x spi0.0: unable to set initial baudrate! |
31 | ...
|
32 | [ 60.924084] mcp251x spi0.0: unable to set initial baudrate! |
33 | [ 269.569538] can: controller area network core (rev 20120528 abi 9) |
34 | [ 269.571126] NET: Registered protocol family 29 |
35 | [ 269.615014] can: raw protocol (rev 20120528) |
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 | ip link set can0 up type can bitrate 500000 |
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
:
Bearbeitet durch User
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:
1 | CPU0
|
2 | 3: 11490 ARMCTRL 3 BCM2708 Timer Tick |
3 | 16: 0 ARMCTRL 16 bcm2708_fb dma |
4 | 24: 161 ARMCTRL 24 DMA IRQ |
5 | 25: 2760 ARMCTRL 25 DMA IRQ |
6 | 32: 232738 ARMCTRL 32 dwc_otg, dwc_otg_pcd, dwc_otg_hcd:usb1 |
7 | 49: 0 ARMCTRL 49 20200000.gpio:bank0 |
8 | 50: 0 ARMCTRL 50 20200000.gpio:bank1 |
9 | 65: 14 ARMCTRL 65 ARM Mailbox IRQ |
10 | 66: 2 ARMCTRL 66 VCHIQ doorbell |
11 | 75: 1 ARMCTRL 75 |
12 | 80: 0 ARMCTRL 80 20204000.spi |
13 | 83: 4 ARMCTRL 83 uart-pl011 |
14 | 84: 9388 ARMCTRL 84 mmc0 |
15 | 419: 0 pinctrl-bcm2835 25 mcp251x |
16 | FIQ: usb_fiq |
17 | Err: 0 |
cat /sys/kernel/debug/gpio:
1 | Datei oder Verzeichnis nicht gefunden |
ip -s -d link show can0:
1 | 3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 10 |
2 | link/can |
3 | can state ERROR-ACTIVE restart-ms 0 |
4 | bitrate 500000 sample-point 0.875 |
5 | tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 |
6 | mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 |
7 | clock 8000000 |
8 | re-started bus-errors arbit-lost error-warn error-pass bus-off |
9 | 0 0 0 0 0 0 |
10 | RX: bytes packets errors dropped overrun mcast |
11 | 0 0 0 0 0 0 |
12 | TX: bytes packets errors dropped carrier collsns |
13 | 0 0 0 0 0 0 |
can state ERROR-ACTIVE --> klingt nicht so gut... PS: vielen Dank für die kräftige Unterstützung! Gruß René
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
:
Bearbeitet durch User
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é
Es wäre auch toll, wenn du deine Aufzeichnungen dann auch hier uploaden könntest.
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.
kleiner Nachtrag: habe vor kurzer Zeit die von mir erstellte Anleitung auch erfolgreich an einem Raspberry Pi 2 Model B getestet!
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.