Discussion:
serial can or socket can ?
bruce bushby
2012-06-12 12:55:09 UTC
Permalink
Hi

I wanted to confirm my understanding of "socketcan" in terms "slcan0" and "can0"

I've been playing with a Beaglebone board the a usb-can adaptor from
mictronics.de:
http://www.mictronics.de/projects/usb-can-bus/
Purchased from:
http://shop.greenstage.co.nz/product/usb-can-bus-interface

1. Is my understanding correct that "slcan" will ALWAYS be used when
connecting a USB based CANBUS adapter?

I am able to bringup slcan0 using the following commands:
# slcan_attach -o -s6 /dev/ttyUSB0
attached tty /dev/ttyUSB0 to netdevice slcan0
# slcand ttyUSB0
# ifconfig slcan0 up
# ifconfig slcan0
slcan0 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)

#


2. AM335x has an internal D_CAN, but the Beaglebone is missing any CAN
transceiver...would the lack of the transceiver prevent the kernel
from creating the "can0" device?


# lsmod
Module Size Used by Not tainted
d_can 5470 0
can_raw 3679 0
can_dev 4414 1 d_can
can 16648 1 can_raw
slcan 3437 1
ftdi_sio 24056 1
usbserial 18026 3 ftdi_sio

# ip link set can0 up
ip: SIOCGIFFLAGS: No such device

# ifconfig can0
ifconfig: can0: error fetching interface information: Device not found

# ifconfig -a
eth0 Link encap:Ethernet HWaddr D4:94:A1:89:BC:FF
inet addr:192.100.1.13 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:70 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21678 (21.1 KiB) TX bytes:1392 (1.3 KiB)
Interrupt:40

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:166 (166.0 B) TX bytes:166 (166.0 B)

slcan0 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)

#


FYI: This is probably a better board if you want to play with CANBUS:
http://www.ti.com/tool/tmdxice3359


Cheers
Bruce
--
To unsubscribe from this list: send the line "unsubscribe linux-can" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Oliver Hartkopp
2012-06-12 13:44:11 UTC
Permalink
Post by bruce bushby
Hi
I wanted to confirm my understanding of "socketcan" in terms "slcan0" and "can0"
Ok, let's go ...
Post by bruce bushby
I've been playing with a Beaglebone board the a usb-can adaptor from
http://www.mictronics.de/projects/usb-can-bus/
http://shop.greenstage.co.nz/product/usb-can-bus-interface
1. Is my understanding correct that "slcan" will ALWAYS be used when
connecting a USB based CANBUS adapter?
No.

The slcan driver provides a CAN network device for CAN interfaces that are
controlled by the ASCII protocol first brought up by LAWICEL (www.can232.com,
www.canusb.com). The slcan driver converts the ASCII frames to struct
can_frame which is used in the Linux CAN subsystem (aka SocketCAN).

You may have a CAN device supporting the SLCAN protocol on RS232, USB-serial
adapters, whatever.

See

http://lxr.linux.no/#linux+v3.4.2/drivers/net/can/Kconfig#L13

and

http://lxr.linux.no/#linux+v3.4.2/drivers/net/can/slcan.c#L99

There are CAN USB drivers in the tree, that do not use the SLCAN protocol:

http://lxr.linux.no/#linux+v3.4.2/drivers/net/can/usb/Kconfig
Use this
Post by bruce bushby
# slcan_attach -o -s6 /dev/ttyUSB0
attached tty /dev/ttyUSB0 to netdevice slcan0
OR this
Post by bruce bushby
# slcand ttyUSB0
!

Running slcand and slcan_attach together doesn't make sense.
Post by bruce bushby
# ifconfig slcan0 up
# ifconfig slcan0
slcan0 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)
#
2. AM335x has an internal D_CAN, but the Beaglebone is missing any CAN
transceiver...would the lack of the transceiver prevent the kernel
from creating the "can0" device?
No. A missing CAN transceiver is not detected (so far).

I assume you need a platform driver specification for your board to find and
access the CAN controller. If you have it, the CAN controller can be accessed
and initialized => can0 appears.
Post by bruce bushby
# lsmod
Module Size Used by Not tainted
d_can 5470 0
can_raw 3679 0
can_dev 4414 1 d_can
can 16648 1 can_raw
slcan 3437 1
ftdi_sio 24056 1
usbserial 18026 3 ftdi_sio
# ip link set can0 up
ip: SIOCGIFFLAGS: No such device
# ifconfig can0
ifconfig: can0: error fetching interface information: Device not found
As expected: Not platform definition => no hardware access => no device
Post by bruce bushby
# ifconfig -a
eth0 Link encap:Ethernet HWaddr D4:94:A1:89:BC:FF
inet addr:192.100.1.13 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:70 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21678 (21.1 KiB) TX bytes:1392 (1.3 KiB)
Interrupt:40
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:166 (166.0 B) TX bytes:166 (166.0 B)
slcan0 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)
#
http://www.ti.com/tool/tmdxice3359
Cheers
Bruce
Regards,
Oliver
--
To unsubscribe from this list: send the line "unsubscribe linux-can" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Marc Kleine-Budde
2012-06-12 13:53:47 UTC
Permalink
Post by Oliver Hartkopp
Post by bruce bushby
Hi
I wanted to confirm my understanding of "socketcan" in terms "slcan0" and "can0"
Ok, let's go ...
Post by bruce bushby
I've been playing with a Beaglebone board the a usb-can adaptor from
http://www.mictronics.de/projects/usb-can-bus/
http://shop.greenstage.co.nz/product/usb-can-bus-interface
1. Is my understanding correct that "slcan" will ALWAYS be used when
connecting a USB based CANBUS adapter?
No.
The slcan driver provides a CAN network device for CAN interfaces that are
controlled by the ASCII protocol first brought up by LAWICEL (www.can232.com,
www.canusb.com). The slcan driver converts the ASCII frames to struct
can_frame which is used in the Linux CAN subsystem (aka SocketCAN).
You may have a CAN device supporting the SLCAN protocol on RS232, USB-serial
adapters, whatever.
See
http://lxr.linux.no/#linux+v3.4.2/drivers/net/can/Kconfig#L13
and
http://lxr.linux.no/#linux+v3.4.2/drivers/net/can/slcan.c#L99
http://lxr.linux.no/#linux+v3.4.2/drivers/net/can/usb/Kconfig
Use this
Post by bruce bushby
# slcan_attach -o -s6 /dev/ttyUSB0
attached tty /dev/ttyUSB0 to netdevice slcan0
OR this
Post by bruce bushby
# slcand ttyUSB0
!
Running slcand and slcan_attach together doesn't make sense.
Post by bruce bushby
# ifconfig slcan0 up
# ifconfig slcan0
slcan0 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)
#
2. AM335x has an internal D_CAN, but the Beaglebone is missing any CAN
transceiver...would the lack of the transceiver prevent the kernel
from creating the "can0" device?
As Oliver said, you need a platform device definition in your board file
and a kernel that supports the d_can hardware. You can use David
Miller's net-next/master tree.

regards, Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
Loading...