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

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

3天内不再提示

CAN外设的接收过滤器设置

331062281 来源:先楫半导体HPMicro 2023-08-24 09:03 次阅读

一、背景

在实际应用中,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位等寄存器则照样可以实现所谓的列表和掩码方式。

eaa69efe-4212-11ee-a2ef-92fbcf53809c.png

二、实现流程

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

eaba7820-4212-11ee-a2ef-92fbcf53809c.png

(一)ID筛选

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

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

eacfca68-4212-11ee-a2ef-92fbcf53809c.png

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

eaf3dd0e-4212-11ee-a2ef-92fbcf53809c.png

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

需要注意的是:

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

eb16b54a-4212-11ee-a2ef-92fbcf53809c.png

eb32ce2e-4212-11ee-a2ef-92fbcf53809c.png

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

eb57466e-4212-11ee-a2ef-92fbcf53809c.png

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

eb71034c-4212-11ee-a2ef-92fbcf53809c.png

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

eb978bb6-4212-11ee-a2ef-92fbcf53809c.png

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

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

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

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

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

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

ebbdfe04-4212-11ee-a2ef-92fbcf53809c.png

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

ebea0daa-4212-11ee-a2ef-92fbcf53809c.png

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

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

ec1dda40-4212-11ee-a2ef-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

ec3e5ec8-4212-11ee-a2ef-92fbcf53809c.png

三、代码实现

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

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

ec4bc248-4212-11ee-a2ef-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比较匹配。

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

掩码模式:

ec753c40-4212-11ee-a2ef-92fbcf53809c.png

ecaa7e96-4212-11ee-a2ef-92fbcf53809c.png

log可以看到:

ecce965a-4212-11ee-a2ef-92fbcf53809c.png

列表模式:

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

ecf41876-4212-11ee-a2ef-92fbcf53809c.png

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

ed18b08c-4212-11ee-a2ef-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。

审核编辑:彭菁

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

    关注

    146

    文章

    16977

    浏览量

    350206
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2714

    浏览量

    463323
  • API
    API
    +关注

    关注

    2

    文章

    1483

    浏览量

    61797
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62409
  • 过滤器
    +关注

    关注

    1

    文章

    427

    浏览量

    19549
  • 先楫半导体
    +关注

    关注

    10

    文章

    214

    浏览量

    2066

原文标题:开发者分享:[玩转先楫CANFD外设系列之二]CAN外设的接收过滤器详解

文章出处:【微信号:HPMicro,微信公众号:先楫半导体HPMicro】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32之CAN ---CAN ID过滤器分析

    机制,首先大家需要了解几个概念。2 几个重要的概念2.1 过滤器组STM32总共提供14个过滤器组来处理CAN接收过滤问题,每个过滤器组包含
    发表于 03-16 14:14

    CAN过滤器的配置

    CAN过滤器的配置(f103 hal1.8 系列)can过滤器的配置是对can接收到的报文进行
    发表于 08-19 06:11

    CAN通信的过滤器配置的理解

    总结一些最近做项目对CAN通信的过滤器配置的理解;这里我使用STM32F105系列的芯片,有2路CAN,我使用的是CAN2,过滤器可以
    发表于 08-20 07:14

    STM32普通型芯片的CAN过滤器

    STM32普通型芯片的 CAN 有14组过滤器组(互联型有28组过滤器组) ,用以对接收到的帧进行过滤。每组
    发表于 08-20 08:27

    过滤组、过滤器编号介绍

    一、过滤组、过滤器编号介绍 在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个
    发表于 08-20 06:13

    STM32 CAN过滤组、过滤器编号介绍

    一、过滤组、过滤器编号介绍 在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个
    发表于 08-23 06:51

    有人知道CAN过滤器要怎么设置才有效吗

    有人知道can过滤器要怎么设置才有效,看了好久没看明白,这个驱动有没有问题,有谁调通过吗
    发表于 09-22 10:02

    CAN—关于CAN过滤器的一些设置方法

    CAN过滤器配置以及常见问题总结过滤器组在具有两个CAN的产品中,CAN1和CAN2分享28个
    发表于 03-08 10:23

    stm8s208的can过滤器怎么设置?

    stm8s208 的 can 过滤器怎么设置?
    发表于 10-26 08:13

    STM32_CAN发送和接收过滤原理

    STM32_CAN发送和接收过滤原理介绍。
    发表于 07-22 17:04 9次下载

    STM32单片机对CAN过滤器设置方法

    在使用STM32的CAN控制器进行数据收发,当用到位屏蔽模式的时候,就要设置过滤器了,这个关系到是否能够接收到想要的数据。下面针对几种不同情况对CA
    发表于 11-28 16:25 1.8w次阅读
    STM32单片机对<b class='flag-5'>CAN</b><b class='flag-5'>过滤器</b>的<b class='flag-5'>设置</b>方法

    过滤器的作用

    本视频主要详细介绍了过滤器的作用,分别是滤速高、过滤效果好;强度高、耐腐蚀;静电作用;过滤物质;拦截;其次介绍了水龙头过滤器的作用,最后介绍了活性炭
    的头像 发表于 12-12 16:23 4.4w次阅读

    STM32 CAN应用-过滤器设置

    在使用STM32的CAN控制器进行数据收发,当用到位屏蔽模式的时候,就要设置过滤器了,这个关系到是否能够接收到想要的数据。下面针对几种不同情况对CA
    发表于 02-10 10:00 3次下载
    STM32 <b class='flag-5'>CAN</b>应用-<b class='flag-5'>过滤器</b><b class='flag-5'>设置</b>

    杀菌过滤器 灭菌过滤器 除菌过滤器

    杀菌过滤器 灭菌过滤器 除菌过滤器
    的头像 发表于 03-03 14:03 2564次阅读
    杀菌<b class='flag-5'>过滤器</b> 灭菌<b class='flag-5'>过滤器</b> 除菌<b class='flag-5'>过滤器</b>

    CH32FV系列CAN设备过滤器配置

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