Difference between revisions of "CAN bus Linux driver"
m (→Usage) |
(→Usage) |
||
Line 36: | Line 36: | ||
modprobe can-dev | modprobe can-dev | ||
modprobe can-raw | modprobe can-raw | ||
− | modprobe mcp251x | + | modprobe mcp251x # on APF27 & APF51 only |
</pre> | </pre> | ||
* Set the bitrate before all operations | * Set the bitrate before all operations | ||
Line 45: | Line 45: | ||
</pre> | </pre> | ||
− | {{Note| An error occurs when | + | {{Note| An error occurs when you try to set the bitrate with an old Linux kernel. }} |
− | + | ||
− | + | ||
+ | * If the following error occurs when you do the last instruction : | ||
<pre class="apf"> | <pre class="apf"> | ||
ip: either "dev" is duplicate, or "type" is garbage | ip: either "dev" is duplicate, or "type" is garbage |
Revision as of 15:38, 20 April 2013
The current CAN bus driver uses SocketCAN API which is now the official CAN API for Linux. SocketCAN is based on the Linux socket. Further details can be found on the links at the bottom of this page.
Driver installation
- Nothing has to be done for the APF51Dev or the APF28Dev.
- For the APF27DevFull:
$ make linux-menuconfig
Networking support ---> <M> CAN bus subsystem support ---> --- CAN bus subsystem support <M> Raw CAN Protocol (raw access with CAN-ID filtering) <M> Broadcast Manager CAN Protocol (with content filtering) CAN Device Drivers ---> <M> Virtual Local CAN Interface (vcan) <M> Platform CAN drivers with Netlink support [*] CAN bit-timing calculation <M> Microchip 251x series SPI CAN Controller
$ make linux $ make
- Reflash kernel and rootfs
Usage
- Load all the needed drivers:
modprobe can modprobe can-dev modprobe can-raw modprobe mcp251x # on APF27 & APF51 only
- Set the bitrate before all operations
Example: Set the bitrate of the can0 interface to 125kbps:
# ip link set can0 up type can bitrate 125000
- If the following error occurs when you do the last instruction :
ip: either "dev" is duplicate, or "type" is garbage
check that this command:
# which ip
return this message:
/sbin/ip
and not this one :
/bin/ip
If the binary is installed in /bin instead of /sbin, the executable file is a link to busybox and the command to set the bitrate doesn't work on busybox, so try the following instructions:
$ make busybox-clean $ make busybox-dirclean $ make menuconfig
Package Selection for the target ---> Networking applications ---> [*] iproute2
$ make
Then, reflash your rootfs.
Quick test
Once the driver installed and the bitrate is set, the CAN interface has to be started like a standard net interface
# ifconfig can0 up
and can be stopped like that:
# ifconfig can0 down
The socketCAN version can be retrieved like that:
# cat /proc/net/can/version
The socketCAN statistics can be retrieved like that:
# cat /proc/net/can/stats
Userspace tools
Several tools are provided by socketCAN:
- candump: dump traffic on a CAN network
The following command shows the received message from the CAN bus
candump can0
- cansend: simple command line tool to send CAN-frames via CAN_RAW sockets
exemple : The following command sends 3 bytes on the bus (0x1E, 0x10, 0x10) with the identifier 500.
cansend can0 500#1E.10.10
You can send a remote request message
cansend can0 500#R
The information with the identifier 500 will be available on the bus when the device receive the remote request message
- cangen: CAN frames generator for testing purpose
- canplayer: send CAN frames from a file to a CAN interface
These tools can be compiled and installed on the target by means of the Buildroot menuconfig:
$ make menuconfig
Package Selection for the target ---> Networking ---> [*] Socket CAN
$ make
then, reflash your rootfs.
Links
- https://www.ridgerun.com/developer/wiki/index.php/How_to_configure_and_use_CAN_bus (How to configure and use CAN bus)
- http://developer.berlios.de/projects/socketcan/ (CAN Linux Driver)
- http://ww1.microchip.com/downloads/en/DeviceDoc/21801e.pdf (MCP2515 datasheet)
- http://www.kvaser.com/can/protocol/index.htm (CAN introduction)
- http://www.armadeus.com/wiki/index.php?title=User:KevinJ#Communication_with_the_CAN_Bus_of_a_car (Communication with a car CAN bus)