FlexCAN 识别 加速CANFD格式 和 非加速CANFD格式 以及 标准CAN 格式的报文
-
问题描述
客户要求芯片作为CANFD节点可以同时识别 加速CANFD格式 和 非加速CANFD格式 以及 标准CAN 格式的报文。
- 若接收到的是 CANFD加速格式的报文,则回复 CANFD加速 报文;
- 若接收到的是 CANFD非加速格式的报文,则回复 CANFD非加速 报文;
- 若接收到的是 CAN 格式的诊断报文,则回复 CAN 报文。
问题分析
Mailbox的结构体中是有对应的位来判断的。
对应到SDK则判断接收的flexcan_msgbuff_t结构体中的CS即可。
typedef struct { uint32_t cs; /*!< Code and Status*/ uint32_t msgId; /*!< Message Buffer ID*/ uint8_t data[64]; /*!< Data bytes of the FlexCAN message*/ uint8_t dataLen; /*!< Length of data in bytes */ } flexcan_msgbuff_t;
解决方法
基于YTM32B1MD1 Flexcan_Canfd_Demo 修改。
Flexcan_Canfd_Demo.zip
参考代码如下:PRINTF("Rx CS = %x\n", rxMsg.cs); if(rxMsg.cs & CAN_MB_EDL_MASK) { PRINTF("Message is FD\n"); }else { PRINTF("Message is not FD\n"); } if(rxMsg.cs & CAN_MB_BRS_MASK) { PRINTF("Message is BRS\n"); }else { PRINTF("Message is not BRS\n"); }
发帖前请查看
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...