Controller Area Network
Projects with ARM and Arduino
Prof Dr Dogan Ibrahim
Near East University
an Elektor Publication
LEARN DESIGN SHARE
CAN Arduino Dogan.indd 3 30-05-16 13:06
Contents
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Chapter 1 • Automotive Bus Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1 Vehicle Network Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2 CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3 LIN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5 MOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6 Byteflight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7 Intellibus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8 Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.9 Comparison of Automotive Bus Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.10 A Brief History of CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.11 CAN in Automotive Industry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.12 The Basic Structure of a CAN Automotive System . . . . . . . . . . . . . . . . . . . . . . . 32
1.13 Advantages of CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.14 Disadvantages of CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.15 Properties of CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.16 The ISO/OSI Reference Model and CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.17 CAN BusISO/OSI Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.18 CANopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.19 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Chapter 2 • Structure of the CAN physical layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.1 CAN Bus Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.2 CAN Bus Data Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3 Cable Stub Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.4 CAN Bus Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.4 CAN Bus Signal Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.4.1 CAN_H Voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4.2 CAN_L Voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4.3 CAN Signal Waveform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4.4 Bus Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
●5
CAN Arduino Dogan.indd 5 30-05-16 13:06
Controller Area Network - Projects with ARM and Arduino
2.4.5 Bus Transceiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.5 CAN Connectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.6 CAN Repeaters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.7 CAN PC Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Chapter 3 • CAN Bus Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.1 Data Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.1.1 Start Of Frame (SOF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.1.2 Arbitration Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.1.3 RTF Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.1.4 Control Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.1.5. Data Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.6 CRC Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.7 ACK Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.1.8 End of Frame Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.2 Remote Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.3 Error Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.4 Overload Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.5 Extended CAN Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Chapter 4 • Error conditions on CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.1 Bit Stuffing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2 CAN Bus Error Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.2.1 Bit Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.2.2 Bit Stuffing Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.2.3 CRC Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.2.4 Frame Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.2.5 ACK Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.3 CAN Bus Fault Confinement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
●6
CAN Arduino Dogan.indd 6 30-05-16 13:06
Contents
Chapter 5 • Data exchange on CAN bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1 Data Exchange With Data Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2 Remote Frames on the Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Chapter 6 • CAN Bus timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.1 Bit Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.2 Selection of Bit Timing Segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.2.1 The Prop_Seg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.2.2 Oscillator Tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Chapter 7 • CAN Bus controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7.1 The Basic Structure of a CAN Transceiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.2 The Basic Structure of a CAN Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.3 The MCP2515 CAN Controller (Without Built-in Transceiver) . . . . . . . . . . . . . . . 104
7.4 The MCP2515 CAN Controller (With Built-in Transceiver) . . . . . . . . . . . . . . . . . 105
7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Chapter 8 • CAN Bus development tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.1 Hardware Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.1.1 CAN MicroMOD Development Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.1.2 mikroElektronika CAN Communication Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
8.1.3 The RCDK8C CAN Development Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
8.1.4 mikroElektronika CAN SPI Click Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.1.5 mikroElektronika CAN-1 board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.1.6 CAN Bus Monitor Demo Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.2 CAN Bus Analyzers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.2.1 Microchip Inc CAN Bus Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.2.2 CANdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.2.3 PCAN Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.2.4 CAN-Bus-Tester 2 (CBT2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.2.5 BitScope Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.2.6 LAP-C Logic Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
●7
CAN Arduino Dogan.indd 7 30-05-16 13:06
Controller Area Network - Projects with ARM and Arduino
8.3 CAN Bus Software Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.3.1 Keil Real-Time Library (RL-ARM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.3.2 mikroElektronika mikroC Pro for ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.3.3 STM32F2xx Standard Peripheral Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Chapter 9 • Architecture of ARM microcontrollers . . . . . . . . . . . . . . . . . . . . . . . . . . 121
9.1 The STM32 Family of ARM Microcontrollers . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
9.2 The STM32F107VCT6 Microcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
9.2.1 Basic Features of the STM32F407VCT6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
9.2.2 Internal Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
9.2.3 The Power Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.2.4 Low Power Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.2.5 The Clock Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Chapter 10 • Programming ARM Microcontrollers . . . . . . . . . . . . . . . . . . . . . . . . . . 141
10.1 mikroC STM32F407VCT6 Microcontroller Specific Features . . . . . . . . . . . . . . . . 141
10.2 The General Purpose Input-Output (GPIO) Library . . . . . . . . . . . . . . . . . . . . . 143
10.2.2 GPIO_Clk_Disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
10.2.4 GPIO_Set_Pin_Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
10.2.5 GPIO_Digital_Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.2.6 GPIO_Digital_Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.2.7 GPIO_Analog_Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.2.8 GPIO_Alternate_Function_Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.3 Memory Type Specifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.4 PORT Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.5 Accessing Individual Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.6 bit Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.7 Interrupts and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.7.1 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.7.2 Interrupt Service Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.8 Creating a New Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
●8
CAN Arduino Dogan.indd 8 30-05-16 13:06
Contents
10.9 Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10.9.1 Setting Break Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.10 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
10.11 Other mikroC IDE Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
10.11.1 ASCII Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
10.11.2 GLCD Bitmap Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
10.11.3 HID Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
10.11.4 Interrupt Assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
10.11.5 LCD Custom Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
10.11.6 Seven Segment Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
10.11.7 UDP Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
10.11.8 USART Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
10.11.9 USB HID Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.11.10 Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.11.11 The Library Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
10.12 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Chapter 11 • Clicker 2 for STM32 Development Board . . . . . . . . . . . . . . . . . . . . . . . 169
11.1 LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
11.2 Push-button Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
11.3 Power Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
11.4 mikroBUS Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
11.5 Programming the Microcontroller on the Clicker 2 for STM32 Board . . . . . . . . . 172
11.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Chapter 12 • mikroC Pro for ARM Built-IN CAN Bus functions . . . . . . . . . . . . . . . . . 177
12.1 STM32F407VGT6 Microcontroller Built-in CAN Controller Module . . . . . . . . . . . . 177
12.1.1 Message Transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
12.1.2 Message Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
12.2 mikroC Pro for ARM CAN Bus Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
12.2.1 CANxSetOperationMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
12.2.2 CANxInitializeAdvanced . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
12.2.3 CANSetMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
●9
CAN Arduino Dogan.indd 9 30-05-16 13:06
Controller Area Network - Projects with ARM and Arduino
12.2.4 CANSetFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
12.2.5 CANSetFilterScale16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
12.2.6 CANSetFilterScale32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
12.2.7 CANxRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.2.8 CANxWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
11.2.9 CANSlaveStartBank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Chapter 13 • CAN BUS projects using ARM Microcontrollers . . . . . . . . . . . . . . . . . . 185
13.1 PROJECT 1 – Remote LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
13.2 PROJECT 2 – Remote Temperature Alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
13.3 PROJECT 3 – Remote DC Motor Drive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
13.4 PROJECT 4 – CAN Bus With 3 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Chapter 14 • Using CAN Bus analyzers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
14.1 Using a Logic Analyzer as a CAN Bus Analyzer . . . . . . . . . . . . . . . . . . . . . . . . 245
14.2 Using the Microchip Inc CAN Bus Analyzer (APGDT002) . . . . . . . . . . . . . . . . . . 249
14.2.1 Connecting the CAN BUS Analyzer to the PC and CAN BUS . . . . . . . . . . . . . . 250
14.2.2 Example CAN Bus Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
14.2.3 Transmitting Data On the Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
14.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Chapter 15 • CAN SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
15.1 CAN SPI Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
15.1.1 CAN SPI Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
15.1.2 CANSPISetOperationMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
15.1.3 CANSPIGETOperationMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
15.1.4 CANSPIInitialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
15.1.5 CANSPISetBaudRate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
15.1.6 CANSPISetMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
15.1.7 CANSPISetFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
15.1.8 CANSPIRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
15.2 Project Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Chapter 16 • Using Arduino with CAN Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
16.1 Arduino CAN Bus Shield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
● 10
CAN Arduino Dogan.indd 10 30-05-16 13:06
Contents
16.2 CAN Bus Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.2.1 CAN.begin(Baud) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.2.2 CAN.checkReceive() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.2.3 CAN.readMsgBuf(&msglen, msgbuf) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.2.4 CAN.getCanId() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.2.5 CAN.sendMsgBuf(msgID, ext, len, buf) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.2.6 CAN.checkError() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.2.7 CAN.init_Mask(num, ext, uiData) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.2.8 CAN.init_Filt(num, ext, uiData) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.2.9 CAN.isRemoteRequest() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.2.10 CAN.isExtendedFrame() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
16.3 Include Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
16.4 Example CAN Bus System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
● 11
CAN Arduino Dogan.indd 11 30-05-16 13:06