FLEXCAN收发报文ID数超出物理邮箱数量时邮箱分配参考方案(Classical CAN & LeacyFIFO)
-
前言
本文档以YTM32B1Mx为例介绍FLEXCAN收发报文数超过物理邮箱个数时邮箱分配方案、LegacyFIFO用法,同时也适用于YTM32B1Lx系列。1. YTM32B1Mx FLEXCAN邮箱资源介绍
MC03的FLEXCAN资源:
MD14的FLEXCAN资源:
ME05的FLEXCAN资源:
以ME05为例,邮箱负载为8字节负载时,CAN0、CAN1、CAN2的邮箱数为64个,CAN3、CAN4、CAN5的邮箱数为32个。
硬件设计时注意优先选用CAN邮箱资源多的CAN通道。以CAN0为例,
- 收发报文数量小于等于邮箱数(64)时,为每一条收发报文分配一个邮箱即可;
- 收发报文数量超过邮箱数时,可通过配置接收FIFO、配置邮箱接收范围ID的方式来实现。
下文将通过一个ME05应用实例,介绍使用经典CAN时合理分配邮箱来解决收发报文超过邮箱数问题的方案。
2. 应用实例说明
2.1 需求描述
用户使用CAN0,经典CAN,需要发送的报文ID有40条,需要接收的报文ID包括118条离散ID、1条范围ID(0x600 ~ 0x67F)。如下图:
2.2 方案概述
由需求知收发报文总条数远大于CAN0邮箱总数,故接收报文需要用到LegacyFIFO,基本步骤如下:
(1)根据需要接收的报文数,计算LegacyFIFO占用的邮箱数,并配置LegacyFIFO用于接收118条离散ID;
(2)剩下的邮箱中,选择一个邮箱用于接收范围ID(0x600 ~ 0x67F);
(3)剩下的所有邮箱均用做发送邮箱,需要发送报文时滚动轮询发送邮箱的状态,使用空闲邮箱进行发送。
例如,一种邮箱分配参考方案如下:
2.3 功能实现
2.3.1 接收FIFO配置
需接收的离散报文ID共118条,因此LegacyFIFO实际需要占用的邮箱数与配置120条滤波码时占用的邮箱数一致,即占用0~35共36个邮箱,配置LegacyFIFO后剩余28个邮箱(邮箱号为36~63)可用。
LegacyFIFO配置方式:
(1)配置接收LeacyFIFO,手动添加118个接收离散报文ID到过滤表中。配置完成后启动LeacyFIFO接收。
(2)通过LeacyFIFO接收到报文时重新调用FLEXCAN_DRV_RxFifo(CAN_INST, &rxFifoMsg)函数启动下一次接收。
2.3.2 接收邮箱配置
LegacyFIFO占用了MailBox0~35共36个邮箱,这里配置邮箱36用于接收ID范围为0x600~0x67F的报文。
配置方式:
(1)配置MailBox36的接收ID和掩码值,用于接收0x600~0x67F的范围ID报文。
(2)MailBox36接收到报文时重新调用 FLEXCAN_DRV_Receive(CAN_INST, 36, &rxMsgBuffer);函数启动下一次接收。
2.3.3 发送邮箱配置
剩下的MailBox37~63共27个邮箱可用做发送邮箱,需要发送报文时,滚动轮询这27个邮箱的状态,使用空闲邮箱发送即可。
配置方式:
(1)配置27个发送邮箱
(2)滚动查询27个发送邮箱的状态,使用空闲邮箱发送报文
3. 总结
(1)本文档仅提供一个参考方案,收发邮箱的分配应当根据实际的收发报文条数、通讯周期等需求来分配。
(2)本文档中对于所有的离散ID,均使用LeacyFIFO进行接收,实际应用时可以少分配一些发送邮箱,预留出更多的邮箱用于报文接收,例如对一部分周期较长或优先级较低的报文可以使用LeacyFIFO接收,对周期较短或优先级较高的报文,单独配置接收邮箱实现等。参考文档及demo工程
(1)参考文档
AN_0008_YTM32_FlexCAN_SDK_User_Guide_zh_review.pdf
AN_0019_YTM32_FlexCAN_Introduction_zh_review.pdf
(2)示例demo
Flexcan_MB_example.zip -
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...