0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

玩转先楫CANFD外设系列之二:CAN外设的接收过滤器详解

先楫半导体HPMicro 2023-08-24 08:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、背景

在实际应用中,CAN总线上的数据,对于某些CAN节点来说,可能需要的数据并不多,希望收到的数据是自己关心的即可,不必要的数据过滤同时也可以减少中断的次数,减轻CPU负荷,也可以节省数据记录设备中的存储空间。

从上篇文章《[玩转先楫CANFD外设系列之一]轻松搞起CANFD》中可知道,先楫的CANFD包括了CAN和MCAN。其中HPM6700/HPM6400/HPM6300系列产品用的是CAN,而HPM6200系列使用的是MCAN。本文统称HPM6700/HPM6400/HPM6300系列产品的CANFD为CAN。

本文阐述CAN外设,MCAN外设不在本文阐述范围内。

CAN有16组独立的筛选器,并没有所谓的列表和掩码模式的过滤器组。每个筛选器都是独立,只要任意一组的筛滤器器满足条件则能被接收。配置也极其简单,只需要配置ID CODE和对应的匹配MASK位等寄存器则照样可以实现所谓的列表和掩码方式。

f57f33ee-4213-11ee-8e12-92fbcf53809c.png

二、实现流程

对于筛选器来说,CAN可操作的寄存器很少,只需要三个寄存器即可实现筛选ID的效果。分别对应的名称是ACF_XXX后缀。

f5994a72-4213-11ee-8e12-92fbcf53809c.png


(一)ID筛选

寄存器上主要操作ACFCTRL和ACF的CODE_MASK位(一共有29位,满足标准帧和扩展帧)。

接收匹配MASK的位基于IDCODE来进行匹配。选择哪个筛选器通过ACFCTRL寄存器的ACFADR配置,一共4bit,也就是16个筛选器。

f5ada724-4213-11ee-8e12-92fbcf53809c.png


在can_set_filter这个API中,对于筛选器的选择,可以这么参考。


f5c6fa9e-4213-11ee-8e12-92fbcf53809c.png


由于IDCODE和MASK共用一个寄存器也就是ACF的CODE_MASK,在配置的时候需要选择的是IDCODE还是MASK。这里需要用到ACFCTRL的SELMASK位。然后依次进行对CODE_MASK赋值。

需要注意的是:

在CAN外设当中,当MASK对应的位为0的时候,必须于IDCODE对应的位进行匹配比较,当为1的时候则忽视。

f5d96594-4213-11ee-8e12-92fbcf53809c.png

f60272b8-4213-11ee-8e12-92fbcf53809c.png

同样在can_set_filter这个API也是这么操作。

f631b2bc-4213-11ee-8e12-92fbcf53809c.png

需要注意的是:IDCODE和MASK的时候,必须是在CAN复位模式下才能设置。

f66368ac-4213-11ee-8e12-92fbcf53809c.png

在can的sample当中,注释也特别提醒。

f68c1c0c-4213-11ee-8e12-92fbcf53809c.png


(二)标准帧和扩展帧筛选

每个筛选器还可以对标准帧和扩展帧进行筛选,主要是通过ACF寄存器的AIDEE和AIDE位进行配置。

这里描述的大概可以这样理解:

AIDEE=0AIDE=x(不关心)接收标准帧和扩展帧

AIDEE=1 AIDE=0 只接收标准帧

AIDEE=1 AIDE=1 只接收扩展帧

f6bc208c-4213-11ee-8e12-92fbcf53809c.png

在can_set_filter这个API中,也是通过判断can_filter_id_mode_t枚举进行判断筛选。

f6ebafa0-4213-11ee-8e12-92fbcf53809c.png


(三)筛选器组的启用和禁用

在手册中,每个筛选器都可以单独启用和禁用。主要通过ACF_EN配置。

f70189d8-4213-11ee-8e12-92fbcf53809c.png


(四)实现列表和掩码模式效果

从上面的配置可知道:

列表模式:

IDCODE配置为需要接收的ID号,MASK配置为0,那么该筛选器就可以实现只接收一个ID的列表方式,比如:

标准帧下,IDCODE=0x21,MASK=0(全部比较)。那么该筛选器只能筛选ID为0x21这个ID。


掩码模式:

DCODE配置为需要接收的ID号,MASK配置需要比较的位,那么该筛选器就可以实现只接收一个ID的掩码方式,比如:

标准帧下,IDCODE=0x100,MASK=0x700。需要匹配的位是第十位到第八位,其他的位都不做关心,那么接收的ID范围就是0x100~0x1ff

f732d04c-4213-11ee-8e12-92fbcf53809c.png


三、代码实现

在hpm_sdk的can这个sample当中,有个测试项目就是筛选器测试,对应的是board_can_filter_test这个函数。这里使用的是内部环回模式,可以不用接外置PHY即可测试。

在函数的开头注释就说到两个注意点,开发者在开发的时候需要注意。

f74548f8-4213-11ee-8e12-92fbcf53809c.png

1、CAN的筛选器只能在CAN复位模式下配置,建议使用can_init这个API,通过传参代入筛选器参数,can_init这个API自动处理。否则需要需要调用can_set_filter这个API,则需要先调用can_reset进行复位。这时候也同样需要重新设置下波特率。


2、can_filter_config_t结构体的mask成员,1代表在IDCODE对应的位忽视,0代表该位将于IDCODE比较匹配。

这个测试同样实现了类似所谓掩码模式和列表模式。


掩码模式:

f7894602-4213-11ee-8e12-92fbcf53809c.png

f7ced1cc-4213-11ee-8e12-92fbcf53809c.png

log可以看到:

f80ab7e6-4213-11ee-8e12-92fbcf53809c.png

列表模式:

在sample当中,16个筛选器的mask都设置为0,也就是必须与idcode的所有位匹配才接收。

f81a1538-4213-11ee-8e12-92fbcf53809c.png

同样也是发送ID为0~2048的2048个消息帧,应该只能收到16个ID帧。分别是以下

f86a4bac-4213-11ee-8e12-92fbcf53809c.png


四、总结

1、HPM6700/HPM6400/HPM6300系列产品的CAN长达16个过滤组,如果需要更多的过滤组,可以选择HPM6200等是MCAN外设,比如hpm6200的MCAN,标准帧可以达到128个过滤组。


2、HPM6700/HPM6400/HPM6300系列产品的CAN过滤组设置相对简单易用。


3、HPM6700/HPM6400/HPM6300系列产品的CAN过滤组的IDCODE和MASK只能在CAN复位模式下配置。建议每次配置过滤组直接调用can_init这个API。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5588

    浏览量

    129057
  • CAN
    CAN
    +关注

    关注

    58

    文章

    3010

    浏览量

    471443
  • 总线
    +关注

    关注

    10

    文章

    3014

    浏览量

    91301
  • 过滤器
    +关注

    关注

    1

    文章

    442

    浏览量

    20835
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问rt_thread中如何使用CAN硬件过滤器

    目前我使用rt_thread版本为v4.1.1,目前使用了两路can,想要对两路can的数据进行硬件过滤处理,降低CPU负荷。 过滤的ID为: #define
    发表于 09-19 06:36

    rt-thread studio里面如何设置CAN过滤器

    这个是我配置的过滤器,想问下大家这个设置的为啥不起作用啊,我的环境是rt-thread studio,然后版本是5.1,板子是野火的STM32H743
    发表于 09-10 08:11

    ART-PI 使用CAN硬件过滤器打开后接收中断异常的原因?

    开启硬件过滤器后,出现如下断言异常,不开启硬件过滤器接收数据正常 (hdr < can->config.maxhdr && hdr
    发表于 09-10 07:10

    rt-thread studio里面如何设置CAN过滤器呢?

    这个是我配置的过滤器,想问下大家这个设置的为啥不起作用啊,我的环境是rt-thread studio,然后版本是5.1,板子是野火的STM32H743
    发表于 08-22 07:45

    宏集案例 | 时间继电器在真空过滤器上的应用

    近年来,随着国家对资源、能源有效利用率的要求越来越高,对环境保护和水处理的要求也越来越严格,因此有大量的固液分离问题需要解决。真空过滤器是是由负压形成真空过滤的固液分离机械。用过滤介质把容器分为上
    的头像 发表于 08-08 18:12 427次阅读
    宏集案例 | 时间继电器在真空<b class='flag-5'>过滤器</b>上的应用

    【中科昊芯Core_DSC280025C开发板试用体验】+4. CAN外设调试(含源码)

    的软件开发还是有一定的不习惯。 另外一个,本次的代码对CAN报文接收过滤,感觉还是没有完全弄明白。对配置为接收邮箱时,数据长度好像就是可有可无,设置1,并不是表示只接收一个字节的报文。
    发表于 08-05 20:46

    激光焊接技术在焊接过滤器的工艺应用

    过滤器作为工业设备、汽车及电子产品的关键部件,其制造质量直接影响系统性能和寿命。激光焊接技术凭借其精密、高效与可靠的特性,正逐步成为过滤器焊接工艺的核心解决方案,解决了传统焊接方法难以克服的挑战
    的头像 发表于 07-10 15:08 343次阅读
    激光焊接技术在焊接<b class='flag-5'>过滤器</b>的工艺应用

    最先进的过滤器监测@SENSIRION

    AndriesBosma(气体流动产品经理),ManuelEckstein(暖通空调大客户经理)在需要清洁空气的地方,空气过滤器通常就在不远处。在过去十年里,过滤行业在过滤技术方面取得了巨大进步
    的头像 发表于 07-08 12:05 356次阅读
    最先进的<b class='flag-5'>过滤器</b>监测@SENSIRION

    节并传感完成超千万元融资,加速高端过滤器国产化进程

    膜材研发迭代工作,助力破局高端过滤器”卡脖子”难题, 加速高精度膜过滤器国产替代进程。 节并传感(Gibeing)位于江苏省苏州市,成立于2022年,致力于微孔膜及生物过滤相关耗材的研发及销售。目前公司主要产品为生物制药
    的头像 发表于 05-16 18:17 818次阅读
    节并传感完成超千万元融资,加速高端<b class='flag-5'>过滤器</b>国产化进程

    STM32G0B1VE芯片的CAN过滤器分为掩码模式和列表模式,在列表模式下,可过滤多少个ID呢?

    STM32G0B1VE芯片的CAN过滤器分为掩码模式和列表模式,在列表模式下,可过滤多少个ID呢?芯片手册中未有详细说明
    发表于 03-12 07:16

    神经网络压缩框架 (NNCF) 中的过滤器修剪统计数据怎么查看?

    无法观察神经网络压缩框架 (NNCF) 中的过滤器修剪统计数据
    发表于 03-06 07:10

    解析ECAN-E02单过滤器CAN硬件过滤

    什么是CAN总线?CAN(ControllerAreaNetwork)总线是一种用于车辆电子设备之间通信的标准协议。CAN过滤器是用来过滤
    的头像 发表于 01-16 19:35 694次阅读
    解析ECAN-E02单<b class='flag-5'>过滤器</b><b class='flag-5'>CAN</b>硬件<b class='flag-5'>过滤</b>

    CAN协议的软件过滤和硬件过滤

    过滤器来只接收特定的消息。CAN过滤分为软件过滤和硬件过滤。往期推荐:《CH32FV
    的头像 发表于 12-26 19:33 1023次阅读
    <b class='flag-5'>CAN</b>协议的软件<b class='flag-5'>过滤</b>和硬件<b class='flag-5'>过滤</b>

    英迈仪器在线过滤器:精准过滤,守护精密分析仪器

    在精密分析仪器的使用过程中,任何微小的颗粒干扰都可能对实验结果产生重大影响,甚至导致设备损坏。为了确保分析的准确性和仪器的长期稳定运行,Instrumax(英迈仪器)精心研发了全新的在线过滤器,为
    的头像 发表于 12-26 14:03 1082次阅读

    USB音频过滤器驱动程序安装

    电子发烧友网站提供《USB音频过滤器驱动程序安装.pdf》资料免费下载
    发表于 12-19 14:28 0次下载
    USB音频<b class='flag-5'>过滤器</b>驱动程序安装