Component: CAN (Internal, MCP2515) (Comms: Interface)

From Flowcode Help
Jump to navigationJump to search


Author Matrix Ltd
Version 2.1 (Release)
Category Comms: Interface


Image CAN (Internal, MCP2515) component

Low level routines for controling the CAN interface either using an external MCP2515 IC and a SPI bus connection or using an internal CAN peripheral if available on your device. Both methods will require a CAN driver IC like the MCP2551 to drive the CAN signals on the bus.

Examples

Internal CAN schematic

InternalCAN.jpg


External CAN schematic

ExternalCAN.jpg


CAN Message Decoding

The CAN component works together with the injector component to allow you to decode a CAN message ID into a meaningful command.


Example File FC6 Icon.png CAN_Example1 When a key on the keypad is pressed the CAN components transmits a CAN packet.

The CAN packet is decoded by the injector component to give us a meaningful log on the console window.


High Level CAN Data Console

CAN High.jpg


Low Level CAN Data Console

CAN Low.jpg


Reference from CAN Injector to ID decode file, $(srcdir) refers to the current project directory.

CAN File.jpg


Demo CAN ID file File:CANID.csv

CAN DataFile.jpg


CAN Masks and Filters

How to work out which messages will be trapped by a particular mask/filter combination

Note that all values for message id's, masks and filters are numbers between 0x000 and 0x7FF.


Example 1


Mask0 = 0x0FF

Filter0 = 0x100

Filter1 = 0x050


In binary, this looks like:


Mask0 = 000 1111 1111

Filter0 = 001 0000 0000

Filter1 = 000 0101 0000


For the mask, a "1" signifies "check this bit" and a "0" means "ignore this bit"


So, these filters will accept the following messages ("x" = don't care)


Filter0 = xxx 0000 0000

Filter1 = xxx 0101 0000


i.e.


Filter0 = 0x000, 0x100, 0x200, 0x300, 0x400, 0x500, 0x600, 0x700

Filter1 = 0x050, 0x150, 0x250, 0x350, 0x450, 0x550, 0x650, 0x750


Example 2


Mask1 = 0x350

Filter2 = 0x200

Filter3 = 0x123

Filter4 = 0x3FF


Rewriting in binary:


Mask1 = 111 0101 0000

Filter2 = 010 0000 0000

Filter3 = 001 0010 0011

Filter4 = 111 1111 1111


Here, the mask will only check 4 bits and ignore the other 6. Here's what the filters will accept:


Filter2 = 010 x0x0 xxxx

Filter3 = 001 x0x0 xxxx

Filter4 = 111 x1x1 xxxx


They will actually trap a lot of messages (64 each!):


Filter2 = 0x200, 0x201, 0x202, ... 0x220, 0x221, ... 0x280, 0x281, ... 0x2A0, 0x2A1, ... 0x2AF

Filter3 = 0x100, 0x101, 0x102, ... 0x120, 0x121, ... 0x180, 0x181, ... 0x1A0, 0x1A1, ... 0x1AF

Filter4 = 0x750, 0x751, 0x752, ... 0x770, 0x771, ... 0x7D0, 0x7D1, ... 0x7F0, 0x7F1, ... 0x7FF


This second example is not very practical. In general, it is more logical to set the mask so that each filter accepts a consecutive range of messages.


As you can see, the mask determines which bits of the filters are actually looked at. Setting the mask to 0x000 will effectively mean that the filter will accept any incoming message. Also, the value of the mask directly relates to how many messages each filter will trap - i.e. 2^(number of '0' bits in the mask).


A useful way to use the mask would be to ignore the least significant bits. Lets say that you wanted the filters to accept 16 messages each - setting the Mask0 to 0x7F0 would achieve this. Then, setting the filters to the following:


Filter0 = 0x100

Filter1 = 0x110


would mean that the following messages are accepted:


Filter0 = 0x100, 0x101, 0x102, 0x103, 0x104, ... 0x10D, 0x10E, 0x10F

Filter1 = 0x110, 0x111, 0x112, 0x113, 0x114, ... 0x11D, 0x11E, 0x11F


Of course, for simple CAN applications you may wish to only accept one or two messages. Setting the mask to 0x7FF in this instance would mean that only the message ID specified by each filter would be accepted, e.g.


Mask1 = 0x7FF

Filter2 = 0x100

Filter5 = 0x200


This would mean that only messages 0x100 and 0x200 would be accepted into buffer 1.

Downloadable macro reference

ReadSwitches

Returns switch input states from the external MCP2515 device.

0 = No Switch Pressed, 1 = Switch 1 Pressed, 2 = Switch 2 Pressed, 3 = Both Pressed

(External CAN only)

Parameters

This macro has no parameters


Return value

BYTE


SetTxData

Assigns one of the outgoing transmit buffers with data ready to be sent.

Parameters

BYTE Buffer
BYTE Count
BYTE d0
BYTE d1
BYTE d2
BYTE d3
BYTE d4
BYTE d5
BYTE d6
BYTE d7


Return value

This call does not return a value


SetRxMask

Allows the receive ID mask to be configured on the fly allowing different ID ranges to be received.

Parameters

BYTE Mask
Specifies which receive mask to modify. Range: 0-1
ULONG ID
The ID mask value you wish to use


Return value

This call does not return a value


GetRxData

Returns last received message data byte at position Index.

Buffer parameter is currently ignored

Parameters

BYTE Buffer
BYTE Index


Return value

BYTE


GetRxIDHi

Gets the Hi byte Rx ID in register format.

Standard ID only 0-2047.

Compatible with v5 component and previous,

Parameters

BYTE Buffer
Receive Buffer. Range 0-1


Return value

BYTE


SetTxIDSimple

Set the Tx CAN ID as a generic number.

Standard IDs only 0-2047.

Parameters

BYTE Buffer
Transmit buffer to load. Range: 0-2
UINT ID
The ID value you wish to use. Range: 0-2047


Return value

This call does not return a value


SendBuffer

Transmits one of the transmit buffers which should have already been populated with an ID and data.

Parameters

BYTE Buffer
Specifies which transmit buffer to send


Return value

This call does not return a value


GetRxDataCount

Returns last received message data length.

Buffer parameter is currently ignored

Parameters

BYTE Buffer


Return value

BYTE


SetRxFilterID

sets the Filter

Standard mode only

(for V5 compatibility only)

Parameters

BYTE Filter
Specifies which filter to modify. Range: 0-5
BYTE Hi
ID bits 3-10
BYTE Lo
ID bits 0-2 stored in the upper 3 bits of the byte


Return value

This call does not return a value


GetRxIDLo

Gets the Lo byte Rx ID in register format.

Standard ID only 0-2047.

Compatible with v5 component and previous,

Parameters

BYTE Buffer


Return value

BYTE


SetRxMaskID

set the Mask

Standard ID mode only

(for V5 compatibility)

Parameters

BYTE Mask
Specifies which receive mask to modify. Range: 0-1
BYTE Hi
ID bits 3-10
BYTE Lo
ID bits 0-2 stored in the upper 3 bits of the byte


Return value

This call does not return a value


SetRxFilter

Allows the receive ID filter to be configured on the fly allowing different ID ranges to be received.

Parameters

BYTE Filter
Specifies which receive filter to modify. Range: 0-5
ULONG ID
The ID filter value you wish to use


Return value

This call does not return a value


SetTxIdent

Set the Tx CAN ID as a generic number.

Standard and extended IDs

Standard 0-2047

Extended 2048-536870911

Parameters

BYTE Buffer
Transmit buffer to load. Range: 0-2
ULONG ID
The ID or Extended ID value you wish to use. Range: 0-536870911


Return value

This call does not return a value


CheckRx

Checks to see if any messages are available for 'Buffer' specified

Parameters

BYTE Buffer
Send buffer: 0 to 1


Return value

BYTE


GetRxIDSimple

Gets the Rx ID as a Integer

Standard ID only 0-2047.

Parameters

BYTE Buffer
Receive Buffer. Range 0-1


Return value

UINT


SetTxID

Set the Tx CAN ID in register format.

Standard ID only 0-2047.

Compatible with v5 component and previous,

Parameters

BYTE Buffer
Transmit buffer to load. Range: 0-2
BYTE Hi
ID bits 3-10 e.g. ((ID & 0x7F8) >> 3)
BYTE Lo
ID bits 0-2 stored in the upper 3 bits of the byte e.g. ((ID & 0x7) << 5)


Return value

This call does not return a value


ShowLEDs

Set LED state

(External CAN only)

Parameters

BYTE led1
Controls LED 1. Range: 0-1
BYTE led2
Controls LED 2. Range: 0-1


Return value

This call does not return a value


GetRxIdent

Gets the Rx ID as a Integer

Standard and Extended IDs.

Parameters

BYTE Buffer


Return value

ULONG


Initialise

Must be called before any other CAN component macros to enable and initialise the CAN peripheral.

Parameters

This macro has no parameters


Return value

This call does not return a value


Simulation macro reference

SetBaud

No additional information


Parameters

This macro has no parameters


Return value

This call does not return a value



Property reference

Channel

This property is of type Fixed list of ints and can be referenced with the variable name CHANNEL_CAN.

Switches between Internal CAN peripheral and External CAN controller IC MCP2515.

Controller Osc

This property is of type Fixed list of ints and can be referenced with the variable name EXT_OSC.

No additional information


Bus Rate

This property is of type Fixed list of ints and can be referenced with the variable name BUS_RATE.

Data rate of the bus specified in thousand bits per second, Kbps.

Sync Jump Width

This property is of type Fixed list of ints and can be referenced with the variable name SJW.

Defines how far a resyncronisation may move the sample point

Sample Point

This property is of type Fixed list of ints and can be referenced with the variable name SAMPLE.

Point in each bit period where the incoming data is sampled.

ID Type

This property is of type Fixed list of ints and can be referenced with the variable name EXID.

Switches between using Standard, or Standard and Extended CAN

TX Pin

This property is of type Single digital pin and can be referenced with the variable name TXPin.

Internal CAN TX Pin

RX Pin

This property is of type Single digital pin and can be referenced with the variable name RXPin.

Internal CAN Rx Pin

Message ID

This property is of type Signed integer and can be referenced with the variable name TXB0ID.

TX Buffer 0 Message Identifier

Length

This property is of type Signed integer and can be referenced with the variable name TXB0LEN.

TX Buffer 0 Number of data bytes

D0

This property is of type Signed integer and can be referenced with the variable name TXB0DB0.

TX Buffer 0 Data Byte 0

D1

This property is of type Signed integer and can be referenced with the variable name TXB0DB1.

TX Buffer 0 Data Byte 1

D2

This property is of type Signed integer and can be referenced with the variable name TXB0DB2.

TX Buffer 0 Data Byte 2

D3

This property is of type Signed integer and can be referenced with the variable name TXB0DB3.

TX Buffer 0 Data Byte 3

D4

This property is of type Signed integer and can be referenced with the variable name TXB0DB4.

TX Buffer 0 Data Byte 4

D5

This property is of type Signed integer and can be referenced with the variable name TXB0DB5.

TX Buffer 0 Data Byte 5

D6

This property is of type Signed integer and can be referenced with the variable name TXB0DB6.

TX Buffer 0 Data Byte 6

D7

This property is of type Signed integer and can be referenced with the variable name TXB0DB7.

TX Buffer 0 Data Byte 7

Message ID

This property is of type Signed integer and can be referenced with the variable name TXB1ID.

TX Buffer 1 Message Identifier

Length

This property is of type Signed integer and can be referenced with the variable name TXB1LEN.

TX Buffer 1 Number of data bytes

D0

This property is of type Signed integer and can be referenced with the variable name TXB1DB0.

TX Buffer 1 Data Byte 0

D1

This property is of type Signed integer and can be referenced with the variable name TXB1DB1.

TX Buffer 1 Data Byte 1

D2

This property is of type Signed integer and can be referenced with the variable name TXB1DB2.

TX Buffer 1 Data Byte 2

D3

This property is of type Signed integer and can be referenced with the variable name TXB1DB3.

TX Buffer 1 Data Byte 3

D4

This property is of type Signed integer and can be referenced with the variable name TXB1DB4.

TX Buffer 1 Data Byte 4

D5

This property is of type Signed integer and can be referenced with the variable name TXB1DB5.

TX Buffer 1 Data Byte 5

D6

This property is of type Signed integer and can be referenced with the variable name TXB1DB6.

TX Buffer 1 Data Byte 6

D7

This property is of type Signed integer and can be referenced with the variable name TXB1DB7.

TX Buffer 1 Data Byte 7

Message ID

This property is of type Signed integer and can be referenced with the variable name TXB2ID.

TX Buffer 2 Message Identifier

Length

This property is of type Signed integer and can be referenced with the variable name TXB2LEN.

TX Buffer 2 Number of data bytes

D0

This property is of type Signed integer and can be referenced with the variable name TXB2DB0.

TX Buffer 2 Data Byte 0

D1

This property is of type Signed integer and can be referenced with the variable name TXB2DB1.

TX Buffer 2 Data Byte 1

D2

This property is of type Signed integer and can be referenced with the variable name TXB2DB2.

TX Buffer 2 Data Byte 2

D3

This property is of type Signed integer and can be referenced with the variable name TXB2DB3.

TX Buffer 2 Data Byte 3

D4

This property is of type Signed integer and can be referenced with the variable name TXB2DB4.

TX Buffer 2 Data Byte 4

D5

This property is of type Signed integer and can be referenced with the variable name TXB2DB5.

TX Buffer 2 Data Byte 5

D6

This property is of type Signed integer and can be referenced with the variable name TXB2DB6.

TX Buffer 2 Data Byte 6

D7

This property is of type Signed integer and can be referenced with the variable name TXB2DB7.

TX Buffer 2 Data Byte 7

Settings

This property is of type Fixed list of ints and can be referenced with the variable name RXB0CFG.

RX Buffer 0 Message Receive Mode

Settings

This property is of type Fixed list of ints and can be referenced with the variable name RXB1CFG.

RX Buffer 1 Message Receive Mode

Label

This property is of type Line of text and can be referenced with the variable name label.

Comms Flasher Identification Label