Difference between revisions of "CAN bus Linux driver"

From ArmadeusWiki
Jump to: navigation, search
m
(rollback previous deleting)
Line 5: Line 5:
  
 
==Driver installation==
 
==Driver installation==
 +
* Nothing has to be done for the APF51Dev.
 +
* For the [[APF27Devfull]]:
 
<pre class="host">
 
<pre class="host">
  $ make linux26-menuconfig
+
  $ make linux-menuconfig
 
</pre>
 
</pre>
  
Line 23: Line 25:
  
 
<pre class="host">
 
<pre class="host">
  $ make linux26
+
  $ make linux
 
  $ make
 
  $ make
 
</pre>
 
</pre>
Line 108: Line 110:
  
 
==Userspace tools==
 
==Userspace tools==
*Several tools are provided by socketCAN:
+
Several tools are provided by socketCAN:
**'''candump''': dump traffic on a CAN network
+
*'''candump''': dump traffic on a CAN network
**'''cansend''': simple command line tool to send CAN-frames via CAN_RAW sockets
+
The following command shows the received message from the CAN bus
**'''cangen''': CAN frames generator for testing purpose
+
<pre class="apf">
**'''canplayer''': send CAN frames from a file to a CAN interface
+
candump can0
 +
</pre>
 +
*'''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.
 +
<pre class="apf">
 +
cansend can0 500#1E.10.10
 +
</pre>
 +
You can send a remote request message
 +
<pre class="apf">
 +
cansend can0 500#R
 +
</pre>
 +
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:
+
These tools can be compiled and installed on the target by means of the Buildroot menuconfig:
 
<pre class="host">
 
<pre class="host">
 
$ make menuconfig
 
$ make menuconfig
Line 133: Line 149:
 
* http://ww1.microchip.com/downloads/en/DeviceDoc/21801e.pdf (MCP2515 datasheet)
 
* http://ww1.microchip.com/downloads/en/DeviceDoc/21801e.pdf (MCP2515 datasheet)
 
* http://www.kvaser.com/can/protocol/index.htm (CAN introduction)
 
* 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)
  
 
[[Category:Linux drivers]]
 
[[Category:Linux drivers]]
 
[[Category:CAN bus]]
 
[[Category:CAN bus]]

Revision as of 21:46, 19 January 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.

Warning Warning: Please ensure that you use the trunk version of armadeus (kernel version greater or equal to linux-2.6.38 is required) before trying the instructions described on this page!


Driver installation

  • Nothing has to be done for the APF51Dev.
  • 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
  • Set the bitrate before all operations

Example: Set the bitrate of the can interface can0 on 125kbps

# ip link set can0 up type can bitrate 125000
Note Note: An error occurs when I try to set the bitrate!


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