Hallo, Ich habe mir vorgenommen den Raspberry mit einem Can-Interface auszustatten. In Zukunft soll ein Bus aus mehreren Mikrocontrollern und Embedded-Boards entstehen. Dazu habe ich die folgende Schaltung auf einem Breadboard aufgebaut: http://lnxpps.de/rpie/rpi_mcp2515.png Ich verwende das neueste Raspbian-Jessie Image. Wünschenswert wäre es diese Standard-Image, indem ja bereits die Treiber als Modul enthalten sind zu verwenden ohne den Kernel neu Kompilieren zu müssen. Vorgegangen bin ich nach folgendem Tutorial: http://skpang.co.uk/blog/archives/1165 Leider komme ich nicht weiter. Bekomme keine vernünftigen Ergebnisse bei folgenden Commandos cat /proc/interrupts kein Interrupt für mcp2515 dmesg | grep mcp keine Ausgabe dmesg | grep can keine Ausgabe ip link can0 taucht auf Auf diversen Freescale-Boards habe ich CAN schon mal am Laufen gehabt. Wenn benötigt gebe ich natürlich noch mehr Ausgaben. für Hilfe oder Hinweise warum ich so garnichts vom mcp2515 sehe wäre ich sehr Dankbar
:
Bearbeitet durch User
So nun habe ich wenigstens folgende Situtation: Ich sehen ihn mit ip link und auch unter den interrupts ist er nach dem aktivieren nun aufgelistet. Ich finde es nur seltsam dass ich unter /boot/config.txt oscillator=16000000 einstelle und angeblich eine clock von 8000000 habe. Dann habe ich versucht zu senden und mit einem Logic-Analyzer zu horchen. Leider bisher ohne vernünftige Ausgabe. Hier einige Ausgaben: root@raspberrypi:~# ip -d -s 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-PASSIVE restart-ms 0 bitrate 125000 sample-point 0.875 tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 8000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 1 1 0 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 root@raspberrypi:~# cat /proc/interrupts CPU0 3: 9095 ARMCTRL 3 Edge BCM2708 Timer Tick 16: 0 ARMCTRL 16 Edge bcm2708_fb dma 20: 3062 ARMCTRL 20 Edge DMA IRQ 21: 0 ARMCTRL 21 Edge DMA IRQ 24: 0 ARMCTRL 24 Edge DMA IRQ 32: 119647 ARMCTRL 32 Edge dwc_otg, dwc_otg_pcd, dwc_otg_hcd:usb1 49: 3 ARMCTRL 49 Edge 20200000.gpio:bank0 50: 0 ARMCTRL 50 Edge 20200000.gpio:bank1 65: 16 ARMCTRL 65 Edge 2000b880.mailbox 66: 2 ARMCTRL 66 Edge VCHIQ doorbell 75: 1 ARMCTRL 75 Edge 77: 220 ARMCTRL 77 Edge DMA IRQ 80: 0 ARMCTRL 80 Edge 20204000.spi 83: 5 ARMCTRL 83 Edge uart-pl011 84: 10779 ARMCTRL 84 Edge mmc0 416: 3 pinctrl-bcm2835 22 Edge mcp251x FIQ: usb_fiq Err: 0 root@raspberrypi:~# dmesg | grep mcp [ 12.516503] mcp251x spi0.0 can0: bit-timing not yet defined [ 12.516548] mcp251x spi0.0: unable to set initial baudrate! [ 12.520098] mcp251x spi0.0 can0: bit-timing not yet defined [ 12.520140] mcp251x spi0.0: unable to set initial baudrate! [ 12.520210] mcp251x spi0.0 can0: bit-timing not yet defined [ 12.520231] mcp251x spi0.0: unable to set initial baudrate! [ 12.520290] mcp251x spi0.0 can0: bit-timing not yet defined [ 12.520312] mcp251x spi0.0: unable to set initial baudrate! [ 12.520369] mcp251x spi0.0 can0: bit-timing not yet defined [ 12.520391] mcp251x spi0.0: unable to set initial baudrate! [ 13.622634] mcp251x spi0.0 can0: bit-timing not yet defined [ 13.622679] mcp251x spi0.0: unable to set initial baudrate! [ 14.623927] mcp251x spi0.0 can0: bit-timing not yet defined [ 14.623973] mcp251x spi0.0: unable to set initial baudrate! [ 15.625292] mcp251x spi0.0 can0: bit-timing not yet defined [ 15.625336] mcp251x spi0.0: unable to set initial baudrate! [ 16.626091] mcp251x spi0.0 can0: bit-timing not yet defined [ 16.626137] mcp251x spi0.0: unable to set initial baudrate! Aktiviert habe ich can0 mit ip link set can0 up type can bitrate 125000 root@raspberrypi:~# lsmod Module Size Used by can_raw 7427 8 can 30360 1 can_raw cfg80211 501663 0 rfkill 22491 1 cfg80211 mcp251x 9554 0 can_dev 13042 1 mcp251x spi_bcm2835 7980 0 bcm2835_gpiomem 3703 0 uio_pdrv_genirq 3690 0 uio 10009 1 uio_pdrv_genirq i2c_dev 6737 0 snd_bcm2835 22339 3 snd_pcm 92573 1 snd_bcm2835 snd_timer 23456 1 snd_pcm snd 68161 9 snd_bcm2835,snd_timer,snd_pcm fuse 91842 3 ipv6 360365 24 Die Module can und can-raw werden dabei nicht automatisch mitgeladen. Diese habe ich manuell nachgeladen. Für was brauche ich welches Modul ? Unsicher bin ich mir auch bei den Pull-Up Widerständen für z.B. Interrupt. Ich nehme aber an dass ich diese brauche um die Pegel auf einen Invertierten Zustand zu bringen
:
Bearbeitet durch User
>can state ERROR-PASSIVE In dem Zustand sollter er auch nichts senden.. >clock 8000000 ist normal bei oscillator=16000000
Ich muss dazu sagen das dies der Zustand ist, nachdem ich gesendet habe. Vor dem Senden ist er auf ERROR-Active. Das wäre soweit ich weiß in Ordnung. Nur die Ausgabe von dmesg ist nicht in Ordnung denk ich. Beim Freescale-Board war es so, dass weil ich keinen aktiven zweiten Teilnehmer dranhängen hatte die Message immer wieder gesendet wird (logisch, da kein ACK). Ah ok mit oscillator=8000000 scheint es soweit zu gehen. Zumindest kommt das am Logic-Analzyer an was ich sende. Dennoch ERROR-Passive. Aber ich nehme mal an das das der MCP2515 einfach n bisschen anders regelt als ein integrierter im imx. Deshalb gehe ich jetz mal davon aus das es daher kommt das einfach keine ACK-Meldung kommt.
:
Bearbeitet durch User
Kenne die CAN Hardware von dir nicht. Hier nur zur Info: Habe das CAN Interface usb2can von www.8devices.com. Hier klappt's bei mir folgendermaßen: sudo modprobe can_raw sudo modprobe can_dev sudo insmod /usr/local/lib/usb_8dev.ko sudo ip link set can0 up type can bitrate 500000 sample-point 0.875 und mit dem USBtin Interface von http://www.fischl.de/usbtin/ funktionierts so: modprobe can modprobe can-raw modprobe slcan slcan_attach -f -s6 -o /dev/ttyACM2 slcand ttyACM2 can0 sleep 2 ifconfig can0 up Da beide Interface über USB angeschlossen werden hilft es dir vielleicht nicht. Gerhard
MCP2515 schrieb im Beitrag #4317215: >>can state ERROR-PASSIVE > > In dem Zustand sollter er auch nichts senden.. Doch er sendet, sendet aber keine aktiven Error Bits mehr.
Gerhard schrieb: > und mit dem USBtin Interface von http://www.fischl.de/usbtin/ > funktionierts so: > > modprobe can > modprobe can-raw > modprobe slcan > > slcan_attach -f -s6 -o /dev/ttyACM2 > slcand ttyACM2 can0 > sleep 2 > ifconfig can0 up Kommt auch immer drauf an was man vor hat. Ich verwende das usbtin auch unter windows und linux. Dazu braucht es überhaupt keine can-Kernelmodule. Wenn man eine lib hat um mit der seriellen Schnittstelle umzugehen hat man schon gewonnen. Sowas sollte unter allen Sprachen zu finden sein. Socket Can hat halt den Nachteil nur unter Linux zu gehen. Raspi und MCP2515 ist wohl generell keine glückliche Konstellation.
temp schrieb: > Ich verwende das usbtin auch > unter windows und linux. Dazu braucht es überhaupt keine > can-Kernelmodule. Wenn man eine lib hat um mit der seriellen > Schnittstelle umzugehen hat man schon gewonnen. Stimmt schon. Leider sind die can-utils, die es unter Linux für Socket Can gibt so ein mächtiger Werkzeugkasten. Ich möchte sie nicht missen und gäbe einiges dafür, ich hätte sie auch unter Windows zur Verfügung. Gerhard
Ja das stimmt. Es wäre wohl deutlich besser nen Beaglebone zu verwenden und einfach n Transceiver noch hin zu hängen. Ich bin n ziemlicher Linux-Fan und bin auch beruflich genau in dieser Ecke unterwegs (Embedded-Linux). Ich habe den 2515 genommen, da er überall verwendet wird und es eben besagten treiber als Modul bereits gibt und der 2515 auch am Mikrocontroller gut laufen soll. Möchte damit evtl n paar versuche als Hausbus mit mehreren Mikrocontrollern (Atmel) und Embedded-Linux-Devices (ala Raspberry, Beaglebone) aufbauen. Hatte sowas in der Art schon mal mit RS485 aufgebaut. Nun eben mal in Can n bisschen einarbeiten, da es ja immer als relativ guter Bus für diese Zwecke angepriesen wird. Mit dem Raspberry habe ich es wie in der Anleitung beschrieben gemacht und anschließend modprobe can modprobe can-raw ip link set can0 up type can bitrate 125000 und funktioniert wohl auch soweit einigermaßen. Alles weiter wird sich zeigen, wenn mehr als ein Teilnehmer dran hängt.
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.