FULL CAN和BASIC CAN

为什么需要FullCAN和BasicCAN?

在CAN驱动层,可以通过过滤的方式,过滤一段范围内的CanID,也就是说:会有一段范围内的报文接收进来,但是接收进来的这一段范围的报文并不一定都是上层所需要的,怎么办呢?用软件方式,再过滤一遍,由CanIf过滤所需要的CAN报文。因此,提出了FullCAN和BasicCAN的概念。

比如:HRH对应BASIC CAN类型,接收CanID范围:0x10~0x18,CanIf根据过滤算法,在0x10~0x18范围内过滤出需要的0x10、0x13、0x14、0x16、0x17送给上层,而其余的丢弃。

Basic CAN

尽可能快地复制信息,因为所有报文仅由一个接收寄存器接收。

一个HWObject(Hardware Object)可以处理一段范围的CanId

Full CAN

有多少接受寄存器取决于硬件

也可以选择直接操作硬件寄存器

一个HWObject(Hardware Object)只能处理单个CanId

不同报文类型如何选择FULL CAN后者BASIC CAN?

应用报文:一般选择配置成FULL CAN类型,对于应用报文,一般不需要缓存,使用最新接收的数据即可。对于发送的应用报文,都配置成FULL CAN类型需要一个前提:上层需要发送应用报文数量<底层硬件缓存区数量。比如:底层发送硬件缓存区数量为32,节点需要发送的应用报文数量为50,显然无法将50个发送的应用报文都配置成FULL CAN。遇到这种情况,一般会将重要的应用报文配置成FULL CAN,而其他要发送的应用报文配置成BASIC CAN。这样配置以后,硬件缓存区的分配就需要混用,即:Dedicated Tx Buffers+Tx Queue或者 Dedicated Tx Buffers+Tx FIFO,如下所示

如上图,ID3、ID15、ID20是比较重要的应用报文,配置成FULL CAN,分别给一个独立的缓存区;其他的缓存区则配置成BASIC CAN,即:一个缓存区可以发送多个不同CanID的报文。

诊断报文:由于诊断报文的请求及响应需按顺序处理,且数据不能被覆盖,一般将诊断报文配置为Basic-CAN,即共用Buffer,先进先出(FIFO);

网络管理报文:同样按网管报文的接收与发送进行区分:

对于接收类型的网管报文,一个接收节点通常会要求可以接收一段范围的网管报文,因此一般配置成Basic-CAN。

对于发送类型的网管报文,由于单个节点的发送的网理报文是唯一的,在资源满足情况下,推荐配置成Full-CAN,资源不够情况下配置成Basic-CAN也是可以的;

XCP报文:对于XCP报文,与诊断报文类似,XCP的CTO报文报文需要顺序执行,推荐配置成Full-CAN类型。

其他报文:如果系统中有必须经常接收的报文,请将它们放在Full CAN对象中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值