Issue with CAN cape

Hi there!

I don’t know how to get BBB’s DCAN1 working, though I’ve been striving for quite a long time.

I installed the OS from a Debian image available at http://beagleboard.org/ and followed the guide http://dev.ardupilot.com/wiki/building-the-code/building-for-beaglebone-black-on-linux/ to make the kernel RT-Preempt:

root@beaglebone:~# uname -a
Linux beaglebone 3.8.13-rt9-00899-g3d8f2b1 #1 SMP PREEMPT Sat Jan 31 12:22:12 CET 2015 armv7l GNU/Linux

To work with DCAN1, I also followed the guide http://www.embedded-things.com/bbb/enable-canbus-on-the-beaglebone-black/ using the suggested device tree overlay:

root@beaglebone:~# modprobe can
root@beaglebone:~# modprobe can-dev
root@beaglebone:~# modprobe can-raw
root@beaglebone:~# echo BB-DCAN1 > $SLOTS
root@beaglebone:~# cat $SLOTS
0: 54:PF—
1: 55:PF—
2: 56:PF—
3: 57:PF—
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-DCAN1

root@beaglebone:~# /sbin/ip link set can0 up type can bitrate 500000
root@beaglebone:~# ifconfig can0 up
root@beaglebone:~# ifconfig can0
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP NOARP MTU:16 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:24 (24.0 B) TX bytes:0 (0.0 B)
Interrupt:71

Pins seem to be muxed correctly:

root@beaglebone:~# cat $PINS | grep 984
pin 97 (44e10984) 00000032 pinctrl-single
root@beaglebone:~# cat $PINS | grep 980
pin 96 (44e10980) 00000012 pinctrl-single

Now, as I run a simple cansend-candump test on can0, candump doesn’t get anything. Is there anyone who can help me out?

Thank you

Frudak

Well that "3.8.13" "RT" kernel isn't maintained anymore. Other then
Can0 what else do you need?

As you could just grab the latest image: http://beagleboard.org/latest-images

then install the "3.14.x RT" kernel:

sudo apt-get update ; sudo apt-get install
linux-image-3.14.35-ti-rt-r56 ; sudo reboot

(right now i only have can1 built by default:

dtb=am335x-boneblack-can1.dtb

You can use dtb-rebuilder to enable can0..

Regards,

Thank you very much for the answer!

By the truth, I need to be able to use also other interfaces (GPIOs, PWM, Analog Input, I2C, SPI, UART, USB, Ethernet).
I followed your suggestions (installed 3.14 RT kernel):
root@beaglebone:~# uname -a
Linux beaglebone 3.14.35-ti-rt-r56 #1 SMP PREEMPT Sun Mar 29 01:13:05 UTC 2015 armv7l GNU/Linux

… but I have the following problems:

  1. with SocketCAN. Giving the commands:
    root@beaglebone:~# /sbin/ip set link can1 type can bitrate 500000
    root@beaglebone:~# ifconfig can1 up
    I enable can1:
    root@beaglebone:~# ifconfig can1
    can1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
    UP RUNNING NOARP MTU:16 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:10
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
    Interrupt:71
    Now I just perform the candump - cansend (can-utils installed on BBB from https://github.com/digitalbond/canbus-beaglebone) test on can1 but cansend doesn’t send anything.

  2. New device tree overlay management. I cannot see any longer the slots file for pin muxing (before it was located in the directory /sys/devices/bone_capemgr.9):
    root@beaglebone:~# find / -name “bone_capemgr*”
    root@beaglebone:~# find / -name “slots”
    /sys/module/snd/parameters/slots
    root@beaglebone:~#

So far, I have always handled pins with device tree overlays, by taking the available ones (placed in /lib/firmware) or creating new ones. Do I need to adapt all my existing programs according to the new management?

  1. Ethernet-over-USB is no longer working with kernel 3.14: the interface usb0 doesn’t come up any more with ifconfig.

  2. I went back to 3.8 kernel (by modifying properly uname_r variable in uEnv.txt and rebooting) and then I tried to return to 3.14 (always by modifying uEnv.txt and rebooting), but the system doesn’t boot.

Do you have some more advice?

Thank you

Frudak

Thank you very much for the answer!

By the truth, I need to be able to use also other interfaces (GPIOs, PWM,
Analog Input, I2C, SPI, UART, USB, Ethernet).
I followed your suggestions (installed 3.14 RT kernel):
root@beaglebone:~# uname -a
Linux beaglebone 3.14.35-ti-rt-r56 #1 SMP PREEMPT Sun Mar 29 01:13:05 UTC
2015 armv7l GNU/Linux

Did you change dtb in /boot/uEnv.txt ?

dtb=am335x-black-can1.dtb

... but I have the following problems:
1) with SocketCAN. Giving the commands:
root@beaglebone:~# /sbin/ip set link can1 type can bitrate 500000
root@beaglebone:~# ifconfig can1 up
I enable can1:
root@beaglebone:~# ifconfig can1
can1 Link encap:UNSPEC HWaddr
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP MTU:16 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
          Interrupt:71
Now I just perform the candump - cansend (can-utils installed on BBB from
https://github.com/digitalbond/canbus-beaglebone) test on can1 but cansend
doesn't send anything.

The peripheral is enabled, but the pinmux is not set by default..

2) New device tree overlay management. I cannot see any longer the slots
file for pin muxing (before it was located in the directory
/sys/devices/bone_capemgr.9):
root@beaglebone:~# find / -name "bone_capemgr*"
root@beaglebone:~# find / -name "slots"
/sys/module/snd/parameters/slots
root@beaglebone:~#

So far, I have always handled pins with device tree overlays, by taking the
available ones (placed in /lib/firmware) or creating new ones. Do I need to
adapt all my existing programs according to the new management?

capemgr = 3.8.x

3) Ethernet-over-USB is no longer working with kernel 3.14: the interface
usb0 doesn't come up any more with ifconfig.

odd.. cat /etc/dogtag

4) I went back to 3.8 kernel (by modifying properly uname_r variable in
uEnv.txt and rebooting) and then I tried to return to 3.14 (always by
modifying uEnv.txt and rebooting), but the system doesn't boot.

cat /etc/dogtag

Regards,

Thank you very much for the answer!

By the truth, I need to be able to use also other interfaces (GPIOs, PWM,
Analog Input, I2C, SPI, UART, USB, Ethernet).
I followed your suggestions (installed 3.14 RT kernel):
root@beaglebone:~# uname -a
Linux beaglebone 3.14.35-ti-rt-r56 #1 SMP PREEMPT Sun Mar 29 01:13:05 UTC
2015 armv7l GNU/Linux

Did you change dtb in /boot/uEnv.txt ?

dtb=am335x-black-can1.dtb

Yes, I did.

… but I have the following problems:

  1. with SocketCAN. Giving the commands:
    root@beaglebone:~# /sbin/ip set link can1 type can bitrate 500000
    root@beaglebone:~# ifconfig can1 up
    I enable can1:
    root@beaglebone:~# ifconfig can1
    can1 Link encap:UNSPEC HWaddr
    00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
    UP RUNNING NOARP MTU:16 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:10
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
    Interrupt:71
    Now I just perform the candump - cansend (can-utils installed on BBB from
    https://github.com/digitalbond/canbus-beaglebone) test on can1 but cansend
    doesn’t send anything.

The peripheral is enabled, but the pinmux is not set by default…

Since I had the dmesg error “bit timing not yet defined”, I added the option “triple-sampling on” to ip. But I have the same problem as before.

  1. New device tree overlay management. I cannot see any longer the slots
    file for pin muxing (before it was located in the directory
    /sys/devices/bone_capemgr.9):
    root@beaglebone:~# find / -name “bone_capemgr*”
    root@beaglebone:~# find / -name “slots”
    /sys/module/snd/parameters/slots
    root@beaglebone:~#

So far, I have always handled pins with device tree overlays, by taking the
available ones (placed in /lib/firmware) or creating new ones. Do I need to
adapt all my existing programs according to the new management?

capemgr = 3.8.x

Is this an option of uEnv.txt?

  1. Ethernet-over-USB is no longer working with kernel 3.14: the interface
    usb0 doesn’t come up any more with ifconfig.

odd… cat /etc/dogtag

root@beaglebone:~/CAN/can-utils# cat /etc/dogtag
BeagleBoard.org Debian Image 2015-03-01

  1. I went back to 3.8 kernel (by modifying properly uname_r variable in
    uEnv.txt and rebooting) and then I tried to return to 3.14 (always by
    modifying uEnv.txt and rebooting), but the system doesn’t boot.

cat /etc/dogtag

root@beaglebone:~/CAN/can-utils# cat /etc/dogtag
BeagleBoard.org Debian Image 2015-03-01

Regards,


Robert Nelson
https://rcn-ee.com/

Thank you

Frudak

Hi Guys,

I have a similar Problem. I am trying to activate the CAN1 Bus. (P9_24 & P9_26).

With Kernel 3.8.13 I am using the bone_capemgr.9 according to http://www.embedded-things.com/bbb/enable-canbus-on-the-beaglebone-black/
It works!

But with 3.19.0 I have some problems. I just can get any signal with candump!
I used the dtb-rebuilder and commented out the two CAN1 lines:
...
#include "am335x-peripheral-can1.dtsi"
#include "am335x-bone-pinmux-can1.dtsi"
...

After make install, modeprobe etc... the ifconfig of debian 3.19 and 3.13 (bone_capemgr.9) **looks the same.**

can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:159

But with 3.19 I can't get any signal. Anyone a Idea?
Thanks in advance for your help!

Benjamin

Hi Onur, everything works now. It was a problem with the transceiver. They were not soldered properly… If you still have some problems just write me a mail or ask in detail here.

Regards,

benjamin