Difference between revisions of "EMAC CAN Interface"

From wiki.emacinc.com
Jump to: navigation, search
Line 49: Line 49:
  
 
{{cli | cansend can0 0xBE 0x42 0xEF 0x9A | hostname=ipac9x25}}
 
{{cli | cansend can0 0xBE 0x42 0xEF 0x9A | hostname=ipac9x25}}
 +
The received message, on a board running <code>candump</code>, will look like the following:
 +
{{clop}}<0x001> [4] be 42 ef 9a {{closp}}
  
Identity
+
<code>cansend</code> uses, by default, an identifier of <code>0x01</code>. If an identifier other than default, the <code>-i 0x<IDENT></code> option must be passed on the command line. In the following example, the identity <code>0x89</code> is used.
 +
 
 +
{{cli | cansend can0 -i 0x89 0xBE 0x42 0xEF 0x9A | hostname=ipac9x25}}
 +
The received message, on a board running <code>candump</code>, will look like the following:
 +
{{clop}}<0x089> [4] be 42 ef 9a {{closp}}
 +
 
 +
Using the standard identity, the length of the identity is limited to a maximum hexadecimal value of <code>0x7FF</code>. If a larger identity is needed, the <code>-e</code> option can be passed, which allows an extended CAN frame with a maximum hexadecimal value of <code>0x1FFFFFFF</code>. The following example shows a message with an extended frame.
 +
 
 +
 
 +
{{cli | cansend can0 -e -i 0x8008 0xBE 0x42 0xEF 0x9A | hostname=ipac9x25}}
 +
The received message, on a board running <code>candump</code>, will look like the following:
 +
{{clop}}<0x00008008> [4] be 42 ef 9a{{closp}}
 
====candump====
 
====candump====
 
<!-- /*********************************************************************************************************/ -->
 
<!-- /*********************************************************************************************************/ -->

Revision as of 17:34, 18 January 2016

TODO: {{#todo: InProgress (01.18.2016-10:45->KY+)|Klint Youngmeyer|OE 5.0,KY,InProgress}}

The CAN interface is a vehicle bus standard that allows communication between a controller and various sensors. EMAC produces several boards capable of communicating on a CAN bus. For more information about which products support the CAN bus, see the hardware page.

Background

CAN (controller area network) is a multi-master serial bus for communicating between "nodes" over a two-wire interface. The wires are generally a 120 ohm twisted pair. Each CAN node has the ability to communicate with every other node, one at a time.

EMAC CAN Interface

The CAN bus is able to be accessed from the command line, or using a C API on EMAC products (with CAN support).

CAN Bus Setup

Before using the CAN interface on an EMAC device, two commands must be run. These commands could be scripted to be run at startup.



NOTE
The settings in the first command may need to be changed according to the application in question.


root@ipac9x25:~# ip link set can0 type can bitrate 125000 triple-sampling on


root@ipac9x25:~# ip link set can0 up

Command Line CAN

The command line tools included with EMAC OE 5 are part of the canutils package. The tools included in this package are:

  • canconfig
  • candump
  • canecho
  • cansend
  • cansequence

Of these five, the most easily used are cansend and candump.

cansend

cansend, as the name implies, is used for sending CAN messages over the bus. Up to eight bytes at a time can be sent using cansend, these bytes are formatted at a space separated list of hexadecimal octets e.g. "0xBE 0x42 0xEF 0x9A." The command for sending the previous hexadecimal digits on the can0 device is:

root@ipac9x25:~# cansend can0 0xBE 0x42 0xEF 0x9A

The received message, on a board running candump, will look like the following:

<0x001> [4] be 42 ef 9a

cansend uses, by default, an identifier of 0x01. If an identifier other than default, the -i 0x<IDENT> option must be passed on the command line. In the following example, the identity 0x89 is used.

root@ipac9x25:~# cansend can0 -i 0x89 0xBE 0x42 0xEF 0x9A

The received message, on a board running candump, will look like the following:

<0x089> [4] be 42 ef 9a

Using the standard identity, the length of the identity is limited to a maximum hexadecimal value of 0x7FF. If a larger identity is needed, the -e option can be passed, which allows an extended CAN frame with a maximum hexadecimal value of 0x1FFFFFFF. The following example shows a message with an extended frame.


root@ipac9x25:~# cansend can0 -e -i 0x8008 0xBE 0x42 0xEF 0x9A

The received message, on a board running candump, will look like the following:

<0x00008008> [4] be 42 ef 9a

candump

Conclusion

Further Information

Where to Go Next
Pages with Related Content