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

    文章

    5281

    浏览量

    119746
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2690

    浏览量

    463053
  • 总线
    +关注

    关注

    10

    文章

    2856

    浏览量

    87878
  • 过滤器
    +关注

    关注

    1

    文章

    425

    浏览量

    19501
收藏 人收藏

    评论

    相关推荐

    CH32FV系列CAN设备过滤器配置

    简介CAN作为总线通信协议,在总线上可能会有大量的数据包同时传输,适当的过滤机制可以提升数据处理的效率,节省处理器的资源。通过配置CAN过滤器定义自己的数据
    的头像 发表于 10-11 08:03 164次阅读
    CH32FV<b class='flag-5'>系列</b><b class='flag-5'>CAN</b>设备<b class='flag-5'>过滤器</b>配置

    优化TPS62097 Output过滤器

    电子发烧友网站提供《优化TPS62097 Output过滤器.pdf》资料免费下载
    发表于 10-08 11:19 0次下载
    优化TPS62097 Output<b class='flag-5'>过滤器</b>

    PLC工业过滤器数据采集物联网解决方案

    换热器的铜管,降低换热率,影响整个冷却系统效果。 因此往往需要加装工业过滤器以去除原料或产品中的杂质,确保产品质量。对此,物通博联提供PLC工业过滤器数据采集系统,以实现过滤器的智能化监控与管理,及时发现
    的头像 发表于 09-23 10:37 183次阅读
    PLC工业<b class='flag-5'>过滤器</b>数据采集物联网解决方案

    康谋分享 | ADTF过滤器全面解析:构建、配置与数据处理应用

    在ADTF(AutomotiveDataandTime-TriggeredFramework)中,过滤器(Filter)扮演着数据处理的核心角色。过滤器是处理数据流的基本单元,它们接收、处理并发
    的头像 发表于 09-18 09:42 2394次阅读
    康谋分享 | ADTF<b class='flag-5'>过滤器</b>全面解析:构建、配置与数据处理应用

    STM32F105基于RT-Thread can过滤器怎么设置才能对扩展帧报文有效?

    STM32F105基于RT-Thread can过滤器怎么设置才能对扩展帧报文有效
    发表于 07-05 06:50

    TSMaster 中不同总线报文消息过滤的操作方式

    TSMaster软件平台支持对不同总线(CAN、LIN、FlexRay)报文和信号的过滤,包括全局接收过滤、数据流过滤、窗口过滤、字符串
    的头像 发表于 06-22 08:21 1313次阅读
    TSMaster 中不同总线报文消息<b class='flag-5'>过滤</b>的操作方式

    信号分析和过滤器的作用

    在通信、电子工程、计算机科学等多个领域,信号分析与过滤器扮演着举足轻重的角色。信号分析不仅涉及信号的获取、处理、分析和判断,更是从复杂的信号中提取有用信息,进行精确解读的关键过程。而过滤器,作为一种特定的信号处理技术,则在此过程中起到了不可或缺的作用。
    的头像 发表于 05-16 17:20 572次阅读

    RT-Thread驱动开发指南进阶篇-动手驱动未适配的外设LCD

    经过上一篇的《《RT-Thread设备驱动开发指南》基础篇--以bsp的hwtimer设备为例》阐述,可以大致了解到RT-thread设备驱动开发的方法步骤,开发指南中的进阶篇外设主要是比基础篇
    的头像 发表于 02-25 11:04 2165次阅读
    RT-Thread驱动开发指南进阶篇-动手驱动<b class='flag-5'>先</b><b class='flag-5'>楫</b>未适配的<b class='flag-5'>外设</b>LCD

    康谋技术| 揭秘汽车功能的核心——深度解读ADTF中的过滤器

    和可视化。而在ADTF软件中,过滤器图(如图1 Filter Graph所示)则是至关重要的,这也是我们理解和应用ADTF的关键所在。下面就让我们深入探索过滤器图的奥秘,揭示它在汽车功能开发中的核心作用
    的头像 发表于 02-04 11:18 498次阅读
    康谋技术| 揭秘汽车功能的核心——深度解读ADTF中的<b class='flag-5'>过滤器</b>图

    CAN模块RxBuffer接收异常要怎么处理呢?

    大的RxBuffer Idx中的CAN消息,如RxBuffer Idx = 0 的一直都能收到,RxBuffer Idx = 15的异常后就接收不到)CAN ID 过滤器的消息无法
    发表于 02-01 08:10

    AN-B-099:DA14535 减少净排放过滤器应用说明

    电子发烧友网站提供《AN-B-099:DA14535 减少净排放过滤器应用说明.pdf》资料免费下载
    发表于 01-31 10:12 0次下载
    AN-B-099:DA14535 减少净排放<b class='flag-5'>过滤器</b>应用说明

    请问如何在CAN通信中的每个CAN消息对象中添加过滤器

    如何在CAN通信中的每个CAN消息对象中添加过滤器
    发表于 01-18 07:59

    前置过滤器的使用寿命有多长?

    前置过滤器的使用寿命有多长? 前置过滤器的使用寿命有多长,这是一个相对而言的概念,因为它的使用寿命取决于多个因素。下面将详细介绍前置过滤器的使用寿命以及影响因素。 一、什么是前置过滤器
    的头像 发表于 12-11 11:38 1047次阅读

    springboot过滤器和拦截器哪个执行

    Spring Boot是一个用于构建Java应用程序的开发框架,它提供了许多功能和工具来简化开发和部署过程。其中两个重要的功能是过滤器和拦截器。本文将详细介绍Spring Boot过滤器和拦截器
    的头像 发表于 12-03 15:00 2340次阅读

    AD8605 4级过滤器无法工作怎么解决?

    你好,我根据ADI的在线设计精灵设计了一个4级过滤器,详情如下,但是,它发现第层是输出 0V。为什么?如何调整和测试? u1:ad8605; 单一电源4V; VREF = 2V; 第一阶段输出5mV正弦波, 折合10mV; 第
    发表于 11-17 06:09