Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 80c9238

Browse filesBrowse files
authored
Merge pull request #79 from arduino/fis-36
[Arduino_CAN] support both 11-Bit (standard) and 29-Bit (extended) IDs.
2 parents 700ab05 + 9d1d58b commit 80c9238
Copy full SHA for 80c9238

File tree

9 files changed

+86
-33
lines changed
Filter options

9 files changed

+86
-33
lines changed

‎extras/e2studioProjects/portenta_h33_lib/configuration.xml

Copy file name to clipboardExpand all lines: extras/e2studioProjects/portenta_h33_lib/configuration.xml
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,8 +1060,8 @@
10601060
<property id="config.driver.canfd.rxfifo.7.int_threshold" value="enum.driver.canfd.fifo.int_threshold.1_2"/>
10611061
<property id="config.driver.canfd.rxfifo.7.payload" value="enum.driver.canfd.fifo.payload.8"/>
10621062
<property id="config.driver.canfd.rxfifo.7.depth" value="enum.driver.canfd.fifo.depth.16"/>
1063-
<property id="config.driver.canfd.afl.ch0_num" value="1"/>
1064-
<property id="config.driver.canfd.afl.ch1_num" value="1"/>
1063+
<property id="config.driver.canfd.afl.ch0_num" value="2"/>
1064+
<property id="config.driver.canfd.afl.ch1_num" value="2"/>
10651065
</config>
10661066
<config id="config.driver.gpt">
10671067
<property id="config.driver.gpt.param_checking_enable" value="config.driver.gpt.param_checking_enable.bsp"/>

‎libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino

Copy file name to clipboardExpand all lines: libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void loop()
5454
*/
5555
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
5656
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
57-
CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
57+
CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
5858

5959
/* Transmit the CAN message, capture and display an
6060
* error core in case of failure.

‎libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino

Copy file name to clipboardExpand all lines: libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void loop()
4444
*/
4545
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
4646
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
47-
CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
47+
CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
4848

4949
/* Transmit the CAN message, capture and display an
5050
* error core in case of failure.

‎libraries/Arduino_CAN/keywords.txt

Copy file name to clipboardExpand all lines: libraries/Arduino_CAN/keywords.txt
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ CAN KEYWORD1
1010
CAN1 KEYWORD1
1111
CanMsg KEYWORD1
1212
CanBitRate KEYWORD1
13+
CanStandardId KEYWORD2
14+
CanExtendedId KEYWORD2
1315

1416
#######################################
1517
# Methods and Functions (KEYWORD2)
@@ -25,6 +27,11 @@ read KEYWORD2
2527
isError KEYWORD2
2628
clearError KEYWORD2
2729

30+
getStandardId KEYWORD2
31+
getExtendedId KEYWORD2
32+
isStandardId KEYWORD2
33+
isExtendedId KEYWORD2
34+
2835
#######################################
2936
# Constants (LITERAL1)
3037
#######################################

‎libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp

Copy file name to clipboardExpand all lines: libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp
+27-23Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
5656
CAN_DEFAULT_MASK,
5757
CAN_DEFAULT_MASK,
5858
CAN_DEFAULT_MASK,
59-
0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox #0. */
60-
CAN_DEFAULT_MASK,
59+
0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox group #0. */
6160
CAN_DEFAULT_MASK,
61+
0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox group #2. */
6262
CAN_DEFAULT_MASK
6363
}
6464
, _can_mailbox
@@ -74,15 +74,15 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
7474
{ .mailbox_id = 6, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
7575
{ .mailbox_id = 7, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
7676
/* Mailbox Group #2 */
77-
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
78-
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
79-
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
80-
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
77+
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
78+
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
79+
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
80+
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
8181
/* Mailbox Group #3 */
82-
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
83-
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
84-
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
85-
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
82+
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
83+
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
84+
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
85+
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
8686
/* We only use the very first receive mailbox for receiving. */
8787
/* Mailbox Group #4 */
8888
{ .mailbox_id = 0, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
@@ -95,22 +95,22 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
9595
{ .mailbox_id = 6, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
9696
{ .mailbox_id = 7, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
9797
/* Mailbox Group #6 */
98-
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
99-
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
100-
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
101-
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
98+
{ .mailbox_id = 8, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
99+
{ .mailbox_id = 9, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
100+
{ .mailbox_id = 10, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
101+
{ .mailbox_id = 11, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
102102
/* Mailbox Group #7 */
103-
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
104-
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
105-
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
106-
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE }
103+
{ .mailbox_id = 12, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
104+
{ .mailbox_id = 13, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
105+
{ .mailbox_id = 14, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
106+
{ .mailbox_id = 15, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE }
107107
}
108108
, _can_extended_cfg
109109
{
110110
.clock_source = CAN_CLOCK_SOURCE_PCLKB,
111111
.p_mailbox_mask = _can_mailbox_mask,
112112
.p_mailbox = _can_mailbox,
113-
.global_id_mode = CAN_GLOBAL_ID_MODE_EXTENDED,
113+
.global_id_mode = CAN_GLOBAL_ID_MODE_MIXED,
114114
.mailbox_count = CAN_MAX_NO_MAILBOXES,
115115
.message_mode = CAN_MESSAGE_MODE_OVERWRITE,
116116
.p_fifo_int_cfg = nullptr,
@@ -205,17 +205,21 @@ int R7FA4M1_CAN::disableInternalLoopback()
205205

206206
int R7FA4M1_CAN::write(CanMsg const & msg)
207207
{
208+
bool const is_standard_id = msg.isStandardId();
209+
208210
can_frame_t can_msg = {
209-
/* id = */ msg.id,
210-
/* id_mode = */ CAN_ID_MODE_EXTENDED,
211+
/* id = */ is_standard_id ? msg.getStandardId() : msg.getExtendedId(),
212+
/* id_mode = */ is_standard_id ? CAN_ID_MODE_STANDARD : CAN_ID_MODE_EXTENDED,
211213
/* type = */ CAN_FRAME_TYPE_DATA,
212214
/* data_length_code = */ min(msg.data_length, CAN_DATA_BUFFER_LENGTH),
213215
/* options = */ 0
214216
};
215217

216218
memcpy(can_msg.data, msg.data, can_msg.data_length_code);
217219

218-
if(fsp_err_t const rc = R_CAN_Write(&_can_ctrl, CAN_MAILBOX_ID_0, &can_msg); rc != FSP_SUCCESS)
220+
if(fsp_err_t const rc = R_CAN_Write(&_can_ctrl,
221+
is_standard_id ? CAN_MAILBOX_ID_0 : CAN_MAILBOX_ID_16,
222+
&can_msg); rc != FSP_SUCCESS)
219223
return -rc;
220224

221225
return 1;
@@ -241,7 +245,7 @@ void R7FA4M1_CAN::onCanCallback(can_callback_args_t * p_args)
241245
/* Extract the received CAN message. */
242246
CanMsg const msg
243247
(
244-
p_args->frame.id,
248+
(p_args->frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(p_args->frame.id) : CanExtendedId(p_args->frame.id),
245249
p_args->frame.data_length_code,
246250
p_args->frame.data
247251
);

‎libraries/Arduino_CAN/src/R7FA6M5_CAN.cpp

Copy file name to clipboardExpand all lines: libraries/Arduino_CAN/src/R7FA6M5_CAN.cpp
+6-4Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,11 @@ int R7FA6M5_CAN::disableInternalLoopback()
190190

191191
int R7FA6M5_CAN::write(CanMsg const & msg)
192192
{
193+
bool const is_standard_id = msg.isStandardId();
194+
193195
can_frame_t can_msg = {
194-
/* id = */ msg.id,
195-
/* id_mode = */ CAN_ID_MODE_EXTENDED,
196+
/* id = */ is_standard_id ? msg.getStandardId() : msg.getExtendedId(),
197+
/* id_mode = */ is_standard_id ? CAN_ID_MODE_STANDARD : CAN_ID_MODE_EXTENDED,
196198
/* type = */ CAN_FRAME_TYPE_DATA,
197199
/* data_length_code = */ min(msg.data_length, CAN_DATA_BUFFER_LENGTH),
198200
/* options = */ 0 /* This ensures that CAN Classic is used. */
@@ -221,7 +223,7 @@ size_t R7FA6M5_CAN::available()
221223
/* Extract the received CAN message. */
222224
CanMsg const msg
223225
(
224-
frame.id,
226+
(frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(frame.id) : CanExtendedId(frame.id),
225227
frame.data_length_code,
226228
frame.data
227229
);
@@ -247,7 +249,7 @@ void R7FA6M5_CAN::onCanFDCallback(can_callback_args_t * p_args)
247249
/* Extract the received CAN message. */
248250
CanMsg const msg
249251
(
250-
p_args->frame.id,
252+
(p_args->frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(p_args->frame.id) : CanExtendedId(p_args->frame.id),
251253
p_args->frame.data_length_code,
252254
p_args->frame.data
253255
);

‎libraries/Arduino_CAN/src/R7FA6M5_CAN_AFL.c

Copy file name to clipboardExpand all lines: libraries/Arduino_CAN/src/R7FA6M5_CAN_AFL.c
+40Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,26 @@ canfd_afl_entry_t const CANFD0_AFL[CANFD_CFG_AFL_CH0_RULE_NUM] = {
2323
.rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_0,
2424
.fifo_select_flags = CANFD_RX_FIFO_0,
2525
}
26+
},
27+
{
28+
.id =
29+
{
30+
.id = 0x1FFFFFFF,
31+
.frame_type = CAN_FRAME_TYPE_DATA,
32+
.id_mode = CAN_ID_MODE_STANDARD,
33+
},
34+
.mask =
35+
{
36+
.mask_id = 0,
37+
.mask_frame_type = 1,
38+
.mask_id_mode = 1,
39+
},
40+
.destination =
41+
{
42+
.minimum_dlc = CANFD_MINIMUM_DLC_0,
43+
.rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_1,
44+
.fifo_select_flags = CANFD_RX_FIFO_1,
45+
}
2646
}
2747
};
2848

@@ -46,6 +66,26 @@ canfd_afl_entry_t const CANFD1_AFL[CANFD_CFG_AFL_CH1_RULE_NUM] = {
4666
.rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_1,
4767
.fifo_select_flags = CANFD_RX_FIFO_1,
4868
}
69+
},
70+
{
71+
.id =
72+
{
73+
.id = 0x1FFFFFFF,
74+
.frame_type = CAN_FRAME_TYPE_DATA,
75+
.id_mode = CAN_ID_MODE_STANDARD,
76+
},
77+
.mask =
78+
{
79+
.mask_id = 0,
80+
.mask_frame_type = 1,
81+
.mask_id_mode = 1,
82+
},
83+
.destination =
84+
{
85+
.minimum_dlc = CANFD_MINIMUM_DLC_0,
86+
.rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_1,
87+
.fifo_select_flags = CANFD_RX_FIFO_1,
88+
}
4989
}
5090
};
5191

‎variants/PORTENTA_C33/includes/ra_cfg/fsp_cfg/r_canfd_cfg.h

Copy file name to clipboardExpand all lines: variants/PORTENTA_C33/includes/ra_cfg/fsp_cfg/r_canfd_cfg.h
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
#define CANFD_CFG_PARAM_CHECKING_ENABLE ((1))
1111

12-
#define CANFD_CFG_AFL_CH0_RULE_NUM (1)
13-
#define CANFD_CFG_AFL_CH1_RULE_NUM (1)
12+
#define CANFD_CFG_AFL_CH0_RULE_NUM (2)
13+
#define CANFD_CFG_AFL_CH1_RULE_NUM (2)
1414

1515
#define CANFD_CFG_GLOBAL_ERROR_CH ((1U))
1616

‎variants/PORTENTA_C33/libs/libfsp.a

Copy file name to clipboard
12.4 KB
Binary file not shown.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.