diff --git a/extras/e2studioProjects/portenta_h33_lib/configuration.xml b/extras/e2studioProjects/portenta_h33_lib/configuration.xml
index 2822f008d..c2c812ebf 100644
--- a/extras/e2studioProjects/portenta_h33_lib/configuration.xml
+++ b/extras/e2studioProjects/portenta_h33_lib/configuration.xml
@@ -1060,8 +1060,8 @@
-
-
+
+
diff --git a/libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino b/libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino
index 915680505..1849c394f 100644
--- a/libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino
+++ b/libraries/Arduino_CAN/examples/CAN1Write/CAN1Write.ino
@@ -54,7 +54,7 @@ void loop()
*/
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
- CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
+ CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
/* Transmit the CAN message, capture and display an
* error core in case of failure.
diff --git a/libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino b/libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino
index 2482e2c42..7f2d73410 100644
--- a/libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino
+++ b/libraries/Arduino_CAN/examples/CANWrite/CANWrite.ino
@@ -35,7 +35,7 @@ void loop()
*/
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
- CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
+ CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
/* Transmit the CAN message, capture and display an
* error core in case of failure.
diff --git a/libraries/Arduino_CAN/keywords.txt b/libraries/Arduino_CAN/keywords.txt
index 6c608bd9a..18ddb0013 100644
--- a/libraries/Arduino_CAN/keywords.txt
+++ b/libraries/Arduino_CAN/keywords.txt
@@ -10,6 +10,8 @@ CAN KEYWORD1
CAN1 KEYWORD1
CanMsg KEYWORD1
CanBitRate KEYWORD1
+CanStandardId KEYWORD2
+CanExtendedId KEYWORD2
#######################################
# Methods and Functions (KEYWORD2)
@@ -25,6 +27,11 @@ read KEYWORD2
isError KEYWORD2
clearError KEYWORD2
+getStandardId KEYWORD2
+getExtendedId KEYWORD2
+isStandardId KEYWORD2
+isExtendedId KEYWORD2
+
#######################################
# Constants (LITERAL1)
#######################################
diff --git a/libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp b/libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp
index 4c6873244..ba925470b 100644
--- a/libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp
+++ b/libraries/Arduino_CAN/src/R7FA4M1_CAN.cpp
@@ -56,9 +56,9 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
CAN_DEFAULT_MASK,
CAN_DEFAULT_MASK,
CAN_DEFAULT_MASK,
- 0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox #0. */
- CAN_DEFAULT_MASK,
+ 0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox group #0. */
CAN_DEFAULT_MASK,
+ 0, /* Use no id filtering -> a CAN frame with any ID will be stored in receive mailbox group #2. */
CAN_DEFAULT_MASK
}
, _can_mailbox
@@ -74,15 +74,15 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
{ .mailbox_id = 6, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
{ .mailbox_id = 7, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
/* Mailbox Group #2 */
- { .mailbox_id = 8, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
- { .mailbox_id = 9, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
- { .mailbox_id = 10, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
- { .mailbox_id = 11, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 8, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 9, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 10, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 11, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
/* Mailbox Group #3 */
- { .mailbox_id = 12, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
- { .mailbox_id = 13, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
- { .mailbox_id = 14, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
- { .mailbox_id = 15, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 12, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 13, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 14, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
+ { .mailbox_id = 15, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_TRANSMIT},
/* We only use the very first receive mailbox for receiving. */
/* Mailbox Group #4 */
{ .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)
{ .mailbox_id = 6, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
{ .mailbox_id = 7, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
/* Mailbox Group #6 */
- { .mailbox_id = 8, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
- { .mailbox_id = 9, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
- { .mailbox_id = 10, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
- { .mailbox_id = 11, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 8, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 9, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 10, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 11, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
/* Mailbox Group #7 */
- { .mailbox_id = 12, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
- { .mailbox_id = 13, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
- { .mailbox_id = 14, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
- { .mailbox_id = 15, .id_mode = CAN_ID_MODE_EXTENDED, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE }
+ { .mailbox_id = 12, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 13, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 14, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE },
+ { .mailbox_id = 15, .id_mode = CAN_ID_MODE_STANDARD, .frame_type = CAN_FRAME_TYPE_DATA, .mailbox_type = CAN_MAILBOX_RECEIVE }
}
, _can_extended_cfg
{
.clock_source = CAN_CLOCK_SOURCE_PCLKB,
.p_mailbox_mask = _can_mailbox_mask,
.p_mailbox = _can_mailbox,
- .global_id_mode = CAN_GLOBAL_ID_MODE_EXTENDED,
+ .global_id_mode = CAN_GLOBAL_ID_MODE_MIXED,
.mailbox_count = CAN_MAX_NO_MAILBOXES,
.message_mode = CAN_MESSAGE_MODE_OVERWRITE,
.p_fifo_int_cfg = nullptr,
@@ -205,9 +205,11 @@ int R7FA4M1_CAN::disableInternalLoopback()
int R7FA4M1_CAN::write(CanMsg const & msg)
{
+ bool const is_standard_id = msg.isStandardId();
+
can_frame_t can_msg = {
- /* id = */ msg.id,
- /* id_mode = */ CAN_ID_MODE_EXTENDED,
+ /* id = */ is_standard_id ? msg.getStandardId() : msg.getExtendedId(),
+ /* id_mode = */ is_standard_id ? CAN_ID_MODE_STANDARD : CAN_ID_MODE_EXTENDED,
/* type = */ CAN_FRAME_TYPE_DATA,
/* data_length_code = */ min(msg.data_length, CAN_DATA_BUFFER_LENGTH),
/* options = */ 0
@@ -215,7 +217,9 @@ int R7FA4M1_CAN::write(CanMsg const & msg)
memcpy(can_msg.data, msg.data, can_msg.data_length_code);
- if(fsp_err_t const rc = R_CAN_Write(&_can_ctrl, CAN_MAILBOX_ID_0, &can_msg); rc != FSP_SUCCESS)
+ if(fsp_err_t const rc = R_CAN_Write(&_can_ctrl,
+ is_standard_id ? CAN_MAILBOX_ID_0 : CAN_MAILBOX_ID_16,
+ &can_msg); rc != FSP_SUCCESS)
return -rc;
return 1;
@@ -241,7 +245,7 @@ void R7FA4M1_CAN::onCanCallback(can_callback_args_t * p_args)
/* Extract the received CAN message. */
CanMsg const msg
(
- p_args->frame.id,
+ (p_args->frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(p_args->frame.id) : CanExtendedId(p_args->frame.id),
p_args->frame.data_length_code,
p_args->frame.data
);
diff --git a/libraries/Arduino_CAN/src/R7FA6M5_CAN.cpp b/libraries/Arduino_CAN/src/R7FA6M5_CAN.cpp
index e0ed27ed7..47940ef61 100644
--- a/libraries/Arduino_CAN/src/R7FA6M5_CAN.cpp
+++ b/libraries/Arduino_CAN/src/R7FA6M5_CAN.cpp
@@ -190,9 +190,11 @@ int R7FA6M5_CAN::disableInternalLoopback()
int R7FA6M5_CAN::write(CanMsg const & msg)
{
+ bool const is_standard_id = msg.isStandardId();
+
can_frame_t can_msg = {
- /* id = */ msg.id,
- /* id_mode = */ CAN_ID_MODE_EXTENDED,
+ /* id = */ is_standard_id ? msg.getStandardId() : msg.getExtendedId(),
+ /* id_mode = */ is_standard_id ? CAN_ID_MODE_STANDARD : CAN_ID_MODE_EXTENDED,
/* type = */ CAN_FRAME_TYPE_DATA,
/* data_length_code = */ min(msg.data_length, CAN_DATA_BUFFER_LENGTH),
/* options = */ 0 /* This ensures that CAN Classic is used. */
@@ -221,7 +223,7 @@ size_t R7FA6M5_CAN::available()
/* Extract the received CAN message. */
CanMsg const msg
(
- frame.id,
+ (frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(frame.id) : CanExtendedId(frame.id),
frame.data_length_code,
frame.data
);
@@ -247,7 +249,7 @@ void R7FA6M5_CAN::onCanFDCallback(can_callback_args_t * p_args)
/* Extract the received CAN message. */
CanMsg const msg
(
- p_args->frame.id,
+ (p_args->frame.id_mode == CAN_ID_MODE_STANDARD) ? CanStandardId(p_args->frame.id) : CanExtendedId(p_args->frame.id),
p_args->frame.data_length_code,
p_args->frame.data
);
diff --git a/libraries/Arduino_CAN/src/R7FA6M5_CAN_AFL.c b/libraries/Arduino_CAN/src/R7FA6M5_CAN_AFL.c
index 84a7d57c1..b7185dd2e 100644
--- a/libraries/Arduino_CAN/src/R7FA6M5_CAN_AFL.c
+++ b/libraries/Arduino_CAN/src/R7FA6M5_CAN_AFL.c
@@ -23,6 +23,26 @@ canfd_afl_entry_t const CANFD0_AFL[CANFD_CFG_AFL_CH0_RULE_NUM] = {
.rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_0,
.fifo_select_flags = CANFD_RX_FIFO_0,
}
+ },
+ {
+ .id =
+ {
+ .id = 0x1FFFFFFF,
+ .frame_type = CAN_FRAME_TYPE_DATA,
+ .id_mode = CAN_ID_MODE_STANDARD,
+ },
+ .mask =
+ {
+ .mask_id = 0,
+ .mask_frame_type = 1,
+ .mask_id_mode = 1,
+ },
+ .destination =
+ {
+ .minimum_dlc = CANFD_MINIMUM_DLC_0,
+ .rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_1,
+ .fifo_select_flags = CANFD_RX_FIFO_1,
+ }
}
};
@@ -46,6 +66,26 @@ canfd_afl_entry_t const CANFD1_AFL[CANFD_CFG_AFL_CH1_RULE_NUM] = {
.rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_1,
.fifo_select_flags = CANFD_RX_FIFO_1,
}
+ },
+ {
+ .id =
+ {
+ .id = 0x1FFFFFFF,
+ .frame_type = CAN_FRAME_TYPE_DATA,
+ .id_mode = CAN_ID_MODE_STANDARD,
+ },
+ .mask =
+ {
+ .mask_id = 0,
+ .mask_frame_type = 1,
+ .mask_id_mode = 1,
+ },
+ .destination =
+ {
+ .minimum_dlc = CANFD_MINIMUM_DLC_0,
+ .rx_buffer = (canfd_rx_mb_t) CANFD_RX_MB_1,
+ .fifo_select_flags = CANFD_RX_FIFO_1,
+ }
}
};
diff --git a/variants/PORTENTA_C33/includes/ra_cfg/fsp_cfg/r_canfd_cfg.h b/variants/PORTENTA_C33/includes/ra_cfg/fsp_cfg/r_canfd_cfg.h
index d7374abbb..4b00ee16e 100644
--- a/variants/PORTENTA_C33/includes/ra_cfg/fsp_cfg/r_canfd_cfg.h
+++ b/variants/PORTENTA_C33/includes/ra_cfg/fsp_cfg/r_canfd_cfg.h
@@ -9,8 +9,8 @@
#define CANFD_CFG_PARAM_CHECKING_ENABLE ((1))
-#define CANFD_CFG_AFL_CH0_RULE_NUM (1)
-#define CANFD_CFG_AFL_CH1_RULE_NUM (1)
+#define CANFD_CFG_AFL_CH0_RULE_NUM (2)
+#define CANFD_CFG_AFL_CH1_RULE_NUM (2)
#define CANFD_CFG_GLOBAL_ERROR_CH ((1U))
diff --git a/variants/PORTENTA_C33/libs/libfsp.a b/variants/PORTENTA_C33/libs/libfsp.a
index 209e8ab67..abb6f7d10 100644
Binary files a/variants/PORTENTA_C33/libs/libfsp.a and b/variants/PORTENTA_C33/libs/libfsp.a differ