2L01I
Renesas Electronics America Inc.
© 2012 Renesas Electronics America Inc. All rights reserved.
CAN In A Day
© 2012 Renesas Electronics America Inc. All rights reserved.2
Renesas Technology & Solution Portfolio
© 2012 Renesas Electronics America Inc. All rights reserved.3
Microcontroller and Microprocessor Line-up
Wide Format LCDs
Industrial & Automotive, 130nm
350µA/MHz, 1µA standby
44 DMIPS, True Low Power
Embedded Security, ASSP
165 DMIPS, FPU, DSC
1200 DMIPS, Performance
1200 DMIPS, Superscalar
500 DMIPS, Low Power
165 DMIPS, FPU, DSC
25 DMIPS, Low Power
10 DMIPS, Capacitive Touch
Industrial & Automotive, 150nm
190µA/MHz, 0.3µA standby
Industrial, 90nm
200µA/MHz, 1.6µA deep standby
Automotive & Industrial, 90nm
600µA/MHz, 1.5µA standby
Automotive & Industrial, 65nm
600µA/MHz, 1.5µA standby
Automotive, 40nm
500µA/MHz, 35µA deep standby
Industrial, 40nm
200µA/MHz, 0.3µA deep standby
Industrial, 90nm
1mA/MHz, 100µA standby
Industrial & Automotive, 130nm
144µA/MHz, 0.2µA standby
2010
2012
32-bit8/16-bit
32-Bit High Performance
DSP, FPU with High Integration
© 2012 Renesas Electronics America Inc. All rights reserved.4
Smart Society Challenge
You don’t have time to write and debug a reliable CAN driver
You need to get your idea to market SOON
Solution
Use CAN and the CAN API!
The CAN API handles controlling the peripheral
The CAN peripheral - Handles ALL the low level details
Focus on your application!
Connect to the Smart Society with CAN!
Agenda
© 2012 Renesas Electronics America Inc. All rights reserved.5
Where Use CAN!?
The CAN Dataframe
The CAN Mailbox
The CAN API
Polling vs. Interrupts
Transmit Dataframes
Polling vs. Interrupt
Receive Dataframes
Polling vs. Interrupt
Error Handling
Lab
Application Level Considerations
Agenda
© 2012 Renesas Electronics America Inc. All rights reserved.6
Lab
Learn how to
Initialize the CAN peripheral with the API
Transmit from a CAN mailbox
Receive data to a mailbox
Use a low cost CAN Monitor to
view and send CAN dataframes
The lab is straightforward
Reading
Understanding
Uncommenting code…
So don’t leave!
The CAN API
© 2012 Renesas Electronics America Inc. All rights reserved.7
Where CAN is Best! – 4 min.
/>Mainly on-board comm.
Too expensive
Poor noise immunity
© 2012 Renesas Electronics America Inc. All rights reserved.8
CAN – Continuously Moving into New Fields
Machines (knitting)
Agriculture
Control Electronics
Factory Assembly Lines
Medical Systems
Railway Electronics
Marine Electronics
Elevators
Building Automation
Printing, Copying
© 2012 Renesas Electronics America Inc. All rights reserved.9
Lowest Levels
Dataframe and Mailbox
© 2012 Renesas Electronics America Inc. All rights reserved.10
The Dataframe
“Standard” 11-bit ID Dataframe
ID extend
1
Rem Req
1
I
F
S
3+
Data
(Bytes)
0-8 bytes
C
R
C
15
A
C
K
1
S
O
F
1
Identifier
11
Control
6
Data
(Bytes)
0-8 bytes
Identifier
11
Control
6
Application software only reads/writes
CAN ID
Data Length Code (in Control Field)
Data Field
© 2012 Renesas Electronics America Inc. All rights reserved.11
Mailbox
A.k.a. “Message Box”, “Buffer”, “Slot”
Application <-> Bus point of interaction
One mailbox handles one complete dataframe (0-8 bytes)
RX has 32 mailboxes/peripheral
With two channels, 64 mailboxes to use on one bus
More mailboxes SW design easier
More SW design flexibility
Less runtime reconfiguring
Frame Resides in Mailbox
© 2012 Renesas Electronics America Inc. All rights reserved.12
Managing a Mailbox
HW takes care of rest
Tx mailbox: HW takes care of low level transmit details
Rx mailbox: HW captures messages with the set ID
Mailboxes can be reconfigured at runtime
Transmit
Write
Write
Write
Field
ID
DLC
Data
All app
needs
to do!
Receive
Setup mailbox
Write
-
-
Receive
Get message
Read
Read
Read
© 2012 Renesas Electronics America Inc. All rights reserved.13
CAN Firmware & Peripheral Interaction
CAN
Peripheral
Firmware
Node
MCU
Node
MCU
Node
MCU
MaskMaskMask
ID=5,Data= ,RXID=5,Data=123,TX
Configure a mailbox
to receive ID=5
Configure a mailbox
to send a frame
with ID=5
Mailboxes
Mailboxes Mailboxes
Transceiver Transceiver Transceiver
123…
© 2012 Renesas Electronics America Inc. All rights reserved.14
Which of these do you need in order to setup a mailbox to
transmit?
1. CAN ID
2. Data Length Code
3. Data Field
4.
All above
Which of these do you need to specify to setup a mailbox to
receive?
1. CAN ID
2. Data Length Code
3. Data Field
4.
All above
Question
© 2012 Renesas Electronics America Inc. All rights reserved.15
Application Level
© 2012 Renesas Electronics America Inc. All rights reserved.16
Let’s move up the layers.
Layers (Where are we?)
Optional industrial protocol
© 2012 Renesas Electronics America Inc. All rights reserved.17
Dealing with the CAN Registers…
…can be tedious.
Sure would be nice to have…
CAN Initialization
START
Enter CAN reset/ initialization mode
CAN reset mode?
NO
YES
Enable CAN ports
Set CAN control register
- Loopback mode select bit
- Message order select bit
- Basic CAN mode select bit
- Bus error interrupt enable bit
Set CAN bit timing and baud rate
Set mask register
Go to CAN operation mode
CAN operation mode?
NO
END
YES
Exit CAN sleep mode
The CAN API
© 2012 Renesas Electronics America Inc. All rights reserved.18
Initialization, Port and Peripheral Control
R_CAN_Create (ch_nr);
R_CAN_SetBitrate (ch_nr);
R_CAN_PortSet (ch_nr, action_type);
[action_type = ENABLE, DISABLE]
R_CAN_Control (ch_nr, action_type); [action_type = ENTERSLEEP_CANMODE,
EXITSLEEP_CANMODE, RESET_CANMODE,
HALT_CANMODE, OPERATE_CANMODE,
CANPORT_TEST_LISTEN_ONLY,
CANPORT_TEST_0_EXT_LOOPBACK,
CANPORT_TEST_1_INT_LOOPBACK,
CANPORT_RETURN_TO_NORMAL
]
Send
R_CAN_TxSet (ch_nr, mbox_nr, frame_p, frame_type);
R_CAN_Tx (ch_nr, mbox_nr);
R_CAN_TxCheck (ch_nr, mbox_nr);
R_CAN_TxStopMsg (ch_nr, mbox_nr);
Receive
R_CAN_RxSet (ch_nr, mbox_nr, stid, frame_type);
R_CAN_RxRead (ch_nr, mbox_nr, frame_p);
R_CAN_RxPoll (ch_nr, mbox_nr, frame_p);
R_CAN_RxSetMask (ch_nr, sid_mask_value, mask_reg_nr);
Error Check
R_CAN_CheckErr (ch_nr);
The CAN API
The CAN API
© 2012 Renesas Electronics America Inc. All rights reserved.19
Polling
You only need data at a certain execution path
You don’t want CAN interrupts interfering some other task
Note:
– Overrun New message discarded
–
Overwrite New message overwrites old
Interrupts
For processing data as soon as it arrives
When messages may not be lost - “linked” messages
To avoid overwrite / overrun
Polling vs. Interrupts
© 2012 Renesas Electronics America Inc. All rights reserved.20
The API function
Waits for previous frame to finish transmit
Clears message control register
Disables interrupts for mailbox
Sets CAN ID
Sets DLC
Sets transmit data
Transmits Dataframe
Transmitting A Frame
struct can_std_data_s
{
uint16 id;
uint8 dlc;
uint8 data[8];
};
R_CAN_TxSet (0, mbox_nr, &my_tx_frame, DATA_FRAME);
my_tx_frame.id = 0x700;
my_tx_frame.dlc = 2;
my_tx_frame.data[0] = 0x11;
my_tx_frame.data[1] = 0x22;
struct can_std_frame_t my_tx_frame;
The CAN API
© 2012 Renesas Electronics America Inc. All rights reserved.21
Not necessary
…unless application must know whether message sent yet
Example; message in a sequence
CAN peripheral will deliver unless Bus Off
Just continuously check for Error Passive/Bus Off
Transmit Verification
#define USE_CAN_POLL 0
Successful Dataframe transmit triggers ISR
CAN0_TXM0_ISR() checks which mailbox sent.
Flag the application that data has been sent!
Polling
#define USE_CAN_POLL 1 (config_r_can_rapi.h)
Check if data sent by calling
API_status = R_CAN_TxCheck (ch_nr, mbox_nr);
If API_OK, message was sent!
Transmit interrupt
© 2012 Renesas Electronics America Inc. All rights reserved.22
A CAN mailbox configured with an ID can later be reused to
handle other IDs?
A. True, a mailbox can be reconfigured at runtime.
Can a mailbox be reconfigured from transmit to receive?
A. Again, yes! A mailbox can be reconfigured at runtime.
Question
© 2012 Renesas Electronics America Inc. All rights reserved.23
The API
Waits for any previous transmission/reception to complete
Interrupt disables the mailbox
Clears mailbox control register
Sets Standard ID for selected mailbox
Sets Dataframe/Remote frame
Sets receive interrupt enabled
unless USE_CAN_POLL defined
Configure Mailbox to Receive
R_CAN_RxSet(ch_nr, mbox_nr, stid, frame_type);
The CAN API
© 2012 Renesas Electronics America Inc. All rights reserved.24
Polling for Received Data
How to receive Dataframe in application
At System Setup
In config_r_can_rapi.h
#define USE_CAN_POLL 1
When polling from app, use
R_CAN_RxPoll(ch_nr, mbox_nr, frame_p);
If this returns API_OK, mailbox has new message, call
R_CAN_RxRead (ch_nr, mbox_nr, frame_p);
Copies data to address -> frame_p.
© 2012 Renesas Electronics America Inc. All rights reserved.25
Using the Receive Interrupt
How to receive Dataframe in application
At System Setup
In config_r_can_rapi.h
#define USE_CAN_POLL 0
When frame arrives with ID set by API
the CAN Receive ISR triggers
Check which mailbox caused the interrupt with
R_CAN_RxPoll (ch_nr, mbox_nr, frame_p);
If new frame, call
R_CAN_RxRead (ch_nr, mbox_nr, frame_p);
which copies the data to frame_p
Set a flag to tell the main application that data has been
received