CAN过滤器配置以及常见问题总结

过滤器组
在具有两个CAN的产品中,CAN1和CAN2分享28个过滤器组,只有一个CAN的系列产品中有14个过滤器组,用以对接收到的帧进行过滤。
• 设置为掩码模式主要是为了过滤出一组(多个)符合要求的ID;
• 设置为列表模式主要是为了过滤出一个或多个符合要求的ID;
• 设置16位过滤器只能用来过滤标准帧ID;
• 设置32位过滤器一般用来过滤扩展帧ID(当然也可以过滤标准帧);

一个过滤器组是由两个32位寄存器组成,可以将其配置为:
• 四个16位列表模式的过滤器,可以过滤出来四个ID号的信息;
• 两个16位掩码模式过滤器
• 一个32位掩码模式过滤器

下面介绍下掩码模式:
当我们设置为掩码模式时:一般我们称CAN_FxR1寄存器为ID寄存器(或者验证码寄存器),CAN_FxR2为掩码寄存器。

具体代码体现为:(315,316,317,7ff,均是需要左移五位填入相应寄存器的。标准ID16位掩码模式

 掩码模式的过滤器计算逻辑为:其实就是掩码位与ID位对应,掩码位为1的通过,掩码位为0的随意。可参考如下示例:假设ID和掩码分别为
ID码: 11 0001 0110 //0x316
掩码: 11 0001 0111//0x317
那么计算结果就为:
1 1 x x x 1 x 1 1 0 ,(x可为0,可为1)这些数据均可通过过滤器。
如此可自行计算上面可通过的ID是什么?

下面介绍下列表模式

可过滤出一个标识。此时CAN_FxR0和CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。注意:CAN_FilterIdHigh是指高16位CAN_FilterIdLow是低16位应该将需要得到的帧的和过滤器的设置值左对齐。
所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。
按工作模式和宽度,一个过滤器组可以变成以下几中形式之一:
(1) 1个32位的屏蔽位模式的过滤器。
(2) 2个32位的列表模式的过滤器。
(3) 2个16位的屏蔽位模式的过滤器。
(4) 4个16位的列表模式的过滤器。
如下面(4个16位的列表模式)配置,四个16位ID(0x314,0x315,0x316,0x317)都可通过

那么32ID该怎么配置呢,此时不是简单像上述16位模式左移五位实现,具体参考如下(我们以32位列表为例,下面配置则通过的ID为0x12345678)(超过3个字符为扩展ID--共29位),至于为什么这样移位,具体可看下寄存器手册

红圈第一行是位31:19的二进制BCD码对应1234,第二行是位18:3的二进制BCD码对应5678

总结:我们发现ID是通过移位来实现的,具体原因参考手册中此寄存器

常见CAN配置问题:
1.怎么配置多个过滤器?

像上面那种配置则表示过滤器组0,1与fifo0绑定,每个过滤器独立,可随意配置,如过滤器0可绑定fifo0,也可绑定fifo1。

2.CAN最多可配置几个过滤器组?

如果设备只有一个CAN,则最多14个(0-13),若有两个CAN,则最多27个(程序若不进行配置则默认CAN1可用0-13,CAN2可用14-27),可配置CAN2过滤器开始组,需注意CAN2使用的过滤器组好默认为开始组以后。
具体参考代码如下:如果这里填9,那么CAN1能使用的过滤器组为0-8,CAN2为9-27。

3.例程改为CAN2不能使用?

可参考上面的问题,需注意CAN2使用的过滤器组好默认为开始组以后,如果不进行配置则按照默认值分配。相关寄存器如下,可看到默认值为01110,则CAN2默认开始组为14。

ID和掩码配置:

对于扩展的ID号码它有29位,但是程序中设计的过滤器位32位,所以:
如果假设扩展id为0x12345678(0001,0010,0011,0100,0101,0110,0111,1000

如果要过滤器让它只接收0x12xxxxxx的标识符号;
这时候要根据它实际在identifier中的位置去修改idmask ; 前八个比特,对应的就是黄色和绿色的部分,
所以其他的颜色,可以都填0表示不需要关心,则这里填入:1 1 1 1 ,1 xx x,我们这里填入0xF8 ;
即:
CAN_FilterID1=0x91;
CAN_FilterID2=0x00;
CAN_FilterID3=0x00;
CAN_FilterID4=0x00;
CAN_FilterIDMask1=0xF8; //0
CAN_FilterIDMask2=0x00; //0
CAN_FilterIDMask3=0x00; //0x0
CAN_FilterIDMask4=0x00; //

F8(1111 1000)的意义是只关心前5位.而91(1001 0001)只取前5位BCD码对应就是12,后三位忽略
屏蔽位改为掩码位

同理,对于下面的配置是只接收标准id=0x321(0011,0010,0001)的ID(也是32位过滤器),
因为也是数据帧,所以RTR = 0,标准的id,所以IDE= 0 ;所以填入到:

CAN_FilterID1=0x64;
CAN_FilterID2=0x20;
CAN_FilterID3=0x00;
CAN_FilterID4=0x00;
CAN_FilterIDMask1=0xFF; //0
CAN_FilterIDMask2=0xE0; //0
CAN_FilterIDMask3=0x0; //0x0
CAN_FilterIDMask4=0x0; //


链接补充

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: s32ds flexcan是一款常见的车联网控制器芯片,其最大的特点是支持CAN总线通信协议。在实际应用中,一些场景需要更高的数据传输速率和可靠性,此时可以使用CAN FD(Flexiable Data)协议。 为使s32ds flexcan支持CANFD,需要进行如下配置: 1. 修改波特率配置 CANFD通信需要更高的波特率。在s32ds flexcan的配置中,需要将传输速率提高,以支持CANFD通信。具体的波特率配置需要根据应用场景进行调整。 2. 配置FD控制器 s32ds flexcan芯片集成了FD控制器,可以支持CANFD通信。需要在芯片配置中将FD控制器打开,并设置通信模式等参数。 3. 配置数据位定时器 CANFD通信采用了不同于CAN的数据位定时器。s32ds flexcan需要配置数据位定时器来支持CANFD通信。 4. 配置错误处理 由于CANFD通信的复杂性,可能会出现数据丢失、数据错误等问题。因此,s32ds flexcan需要设置合适的错误处理机制,以兼容CANFD通信。 以上就是s32ds flexcan配置CANFD的具体步骤,需要根据具体应用来进行调整。它可以实现更高的数据传输速率和可靠性,可以在车联网等应用中发挥重要作用。 ### 回答2: S32DS FlexCAN是专门用于汽车电子应用的MCU软件工具,而CANFD(CAN Flexible Data Rate)是CAN协议的升级版本,其最大的特点是可以支持更高的数据传输速率。因此,在使用S32DS FlexCAN时,需要配置CANFD以适应更高的数据传输速率。 首先,需要修改CANFD的波特率预分频器寄存器(CANFD_CCCR)和波特率分频器寄存器(CANFD_BTR)。通过设置CANFD_CCCR的CLKDIV和CANFD_BTR的BRP、SJW、TSEG1和TSEG2来调整CANFD的数据传输速率,以满足不同应用的需求。此外,还需要在配置CANFD时选择合适的中断模式、错误处理模式和工作模式等。其中,工作模式包括常规模式、测试模式和静默模式,可以根据不同的应用场景自由选择。 在完成CANFD的配置后,还需要进行数据的发送和接收操作。可以使用S32DS FlexCAN提供的API函数来实现数据的发送和接收。在数据发送时,需要先将数据写入CANFD的数据缓冲区中,然后通过发送请求命令将数据发送出去。在数据接收时,需要先设置接收缓冲区和相应的过滤器,然后通过接收缓冲区来获取接收到的数据。 总之,通过S32DS FlexCAN和CANFD的配合使用,可以实现高效、可靠、高速的数据传输,为汽车电子应用提供了重要的支持。 ### 回答3: s32ds flexcan是一款面向汽车领域的开发工具,可以帮助开发人员快速开发和调试车载电子控制系统。配置canfd是s32ds flexcan的重要功能之一,可以帮助实现更高的数据传输速率和更靠近实时的数据传输。 在s32ds flexcan中,配置canfd需要进行以下步骤: 1. 配置CAN时钟:可以选择外部时钟或内部时钟。内部时钟需要设置时钟分频比例。 2. 配置canfd时钟:canfd时钟需要使用PLL时钟,需要先配置PLL时钟。可以选择内部PLL时钟或外部时钟。 3. 配置canfd模式:可以选择classic CAN或canfd模式。如果选用canfd模式,需要设置canfd时钟分频系数。 4. 配置canfd数据速率:可以选择8M、5M、4M、2M、1M、500K或250K数据速率。同时需要设置canfd数据段长度、canfd时间段长度和canfd同步点数量。 5. 启动canfd:启动canfd后,可以开始进行数据传输。可以使用s32ds flexcan中提供的调试工具来检查数据传输质量。 总之,s32ds flexcan配置canfd需要进行多项设置和调试工作,需要有一定的开发经验和技术能力。通过理解和掌握上述配置步骤,可以实现高效可靠的canfd数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值