[AutoSar]BSW_Com016 硬件滤波、软件滤波、mask、code 配置

本文介绍了在嵌入式系统中,CAN滤波的硬件和软件实现方法,包括使用vectorcfg配置的硬件滤波、CANIF中的软件滤波,以及CanFilterCodeValue和CanFilterMaskValue的作用。着重对比了它们在CPU消耗、效率和范围上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
>>>>>回到总目录<<<<<<

一、背景

  什么是CAN 滤波?讲人话,就是个筛选器,哪些报文需要,哪些不需要,筛选一下就行。通过配置就可以实现上述功能。

二、硬件滤波和软件滤波

2.1 硬件滤波

  硬件滤波实现是在CAN Drv 。MCU会提通过相关存器来实现对标准11bit或者扩展29bit ID 的过滤。下图为TC3XX系列相关寄存器说明,有兴趣自行查看:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.1.1硬件滤波在vector cfg中的配置处

在这里插入图片描述

在这里插入图片描述

2.2 软件滤波

  软件滤波在CANIF中通过相关配置实现。
在这里插入图片描述

2.3 软件滤波和硬件滤波对比

  CPU消耗: 硬件滤波 < 软件滤波
  效率: 硬件滤波 > 软件滤波
   范围: 硬件滤波 2n 例如0x0-0x1,0x0-0x3,0x0-0x7,0x0-0xF。软件滤波任意范围帧。

三、CanFilterCodeValue 和 CanFilterMaskValue

  满足下面公式的报文才能通过滤波:

  receiveID & Mask == Code & Mask

3.1 Filter Mask

  翻译为掩码。标准帧11bit,扩展帧29bit。如果对这个bit关心则置为1,否则为0.
例如:接收ID范围0x400–0x43F
0x400 二进制:0100 0000 0000
0x43F 二进制:0100 0011 1111

bit11109876543210
0X400010000000000
0X43F010000111111
mask011111000000

①bit11:超出范围,不关心置为0。
②bit10-bit8:收到的报文这3bit必须为1 0 0即0x4,所以这三位都必须关心,因此mask这三bit分别置为1 1 1。
③bit7-bit4:bit7和bit6在0x0变为0x3的过程中没有任何变化,所以收到的报文这两位必须是0,因此这两位必须被关心,mask bit7 bit6 被置为1.而bit5 和bit6 在0x0变为0x3的过程中都被改变过,所以不管收到的报文这两位是什么值我们都不必关心,因此mast 的bit5和bit6 被置为0.
④bit3 -bit0:bit3 -bit0 在0x0变为0xF的过程中都被改变过,所以不管收到的报文这四位是什么值我们都不必关心,因此mast 的bit3 -bit0 被置为0.
因此mask = 0x7C0.

3.2 Filter Code

  翻译为滤波区号,即滤波区间码。
官方手册说得有点复杂,这里提供一种取巧的计算方式:在保证mask计算无误的情况下,用滤波范围内的任意一个值&mask 就能得出code。

如3.1中的0x400–0x43F,取任意一个值:0x431
0x431&0x7C0 = 0x400=code

>>>>>回到总目录<<<<<<

filter code 的关系是什么?何时会用到 filter mask 以及如何配置它们? filter maskfilter code 是用于过滤 CAN 总线上的报文的参数。在 CAN 总线上,每个报文都有唯一的报文 ID,filter maskfilter code 的作用就是根据报文 ID 的特定位来决定是否接收该报文。 具体来说,filter code 是用来匹配报文 ID 的指定位,而 filter mask 则是用来定义哪些位是关心的(1)和哪些位是不关心的(0)。当 filter codefilter mask 进行与运算后,结果与报文 ID 进行与运算,如果结果与 filter code 相等,则表示匹配成功,该报文将被接收。 在 CAN 总线应用中,当需要接收特定范围的报文时,会使用 filter maskfilter code 进行配置。举例来说,如果需要接收报文 ID 范围为 0x500 – 0x57F 的标准帧报文(标准帧的报文 ID 为 11 位,前 3 位后 8 位),可以将 filter mask 设置为 0xFF8,将 filter code 设置为 0x500,并将 filter codefilter mask 进行与运算后与报文 ID 进行与运算,以确定是否接收该报文。 因此,filter maskfilter code 的关系是通过与运算来匹配报文 ID 的指定位,以确定是否接收该报文。配置 filter maskfilter code 的情况通常发生在需要接收特定范围的报文时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [CAN 接收邮箱 掩码设置](https://blog.csdn.net/ddzlq/article/details/107051544)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [AUTOSAT-Can-FilterMask 为什么用FilterMask,什么时候用,为什么用](https://blog.csdn.net/xiandang8023/article/details/128830782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老灰╮(╯-╰)╭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值