你好:
在使用S32k312 配置CANFD功能时发现,
FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0, RX_MB_IDX, &rx_info, MSG_ID);
FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, false);
rx_info.data_length = 8u;
rx_info.fd_enable = FALSE;
1. Data的length和FD_enable 设置为8U,和FALSE时,当发送端发送16个字节CANFD帧时,S32K312 端还是能接收到16个byte的数据,请问这是问什么?代码如下:
Flexcan_Ip_DataInfoType rx_info;
IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn);
IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR);
FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0);
FlexCAN_Ip_SetRxMaskType_Privileged(INST_FLEXCAN_0,FLEXCAN_RX_MASK_INDIVIDUAL);
FlexCAN_Ip_SetRxIndividualMask_Privileged(INST_FLEXCAN_0,RX_MB_IDX,0x0<<18);
FlexCAN_Ip_SetStartMode(INST_FLEXCAN_0);
//setupCanXCVR_TJA1153();
tx_info.is_polling = FALSE;
tx_info.msg_id_type = FLEXCAN_MSG_ID_STD;
tx_info.data_length=64;
tx_info.fd_enable = TRUE;
tx_info.enable_brs = TRUE;
rx_info.msg_id_type = FLEXCAN_MSG_ID_STD;
rx_info.data_length = 8u;
rx_info.fd_enable = FALSE;
rx_info.fd_padding = FALSE;
rx_info.enable_brs = FALSE;
rx_info.is_polling = FALSE;
rx_info.is_remote = FALSE;
FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0, RX_MB_IDX, &rx_info, MSG_ID);
FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, false);
FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&dummyData);
此图为s32k312接收到数据,再发送出来:
Solved! Go to Solution.
不错的问题,之前没细心留意过。
我测试之后发现确实是这样,当调用过FlexCAN_Ip_Init之后,每个MB的大小是已经确定了,你的工程是设置为64byte的数据长度,所以只要rx_info.data_length在64byte之内,你能收到所有的数据。
但是你可以查看rxData.dataLen来查看当前收到的Frame的数据长度,这样你就直到你实际需要接收多少个字节的数据。
“
FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, false);
for(int i=0;i<rxData.dataLen;i++)
{
dummyData[i]=rxData.data[i];
}
”
不错的问题,之前没细心留意过。
我测试之后发现确实是这样,当调用过FlexCAN_Ip_Init之后,每个MB的大小是已经确定了,你的工程是设置为64byte的数据长度,所以只要rx_info.data_length在64byte之内,你能收到所有的数据。
但是你可以查看rxData.dataLen来查看当前收到的Frame的数据长度,这样你就直到你实际需要接收多少个字节的数据。
“
FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, false);
for(int i=0;i<rxData.dataLen;i++)
{
dummyData[i]=rxData.data[i];
}
”
Hi@Bert2023
工程发过来,我帮你测试检查下
好的,多谢!工程文件如附件,环境DS3.4 +S32K3 RTD2.0.0 ,FD code参考Example S32K358 FlexCAN TXRX ISR S32DS35 RTD400 - NXP Community例程。