加入收藏

CAN外设的接收过滤器设置

2023-08-25 17:49:32 来源:先楫半导体HPMicro

一、背景


(相关资料图)

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

二、实现流程

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

(一)ID筛选

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

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

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

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

需要注意的是:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

从上面的配置可知道:

列表模式:

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

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

掩码模式:

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

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

三、代码实现

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

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

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比较匹配。

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

掩码模式:

log可以看到:

列表模式:

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

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

四、总结

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。

审核编辑:彭菁

关键词:

相关新闻

资讯

国联证券给予三生国健买入评级,业绩符合预期,生物药增长强劲
国联证券给予三生国健买入评级,业绩符合预期,生物药增长强劲

每经AI快讯,国联证券08月24日发布研报称,给予三生国......更多>

汽车知识解答福特仪表盘雪花指示灯亮是什么意思?
汽车知识解答福特仪表盘雪花指示灯亮是什么意思?

随着生活水平的提高,在出行的选择上大家也都是选择了......更多>

1个冠军+2个第三+5个最佳!
1个冠军+2个第三+5个最佳!

8月22日,由上海市金山区教育局、上海市金山区体育局......更多>

昊天塔图片(昊天塔)
昊天塔图片(昊天塔)

来为大家解答以上问题,昊天塔图片,昊天塔很多人还不......更多>

金贵银业(002716)6月30日股东户数6.92万户,较上期减少6.31%
金贵银业(002716)6月30日股东户数6.92万户,较上期减少6.31%

来源:证券之星近日金贵银业披露,截至2023年6月30日......更多>

南方基金新债基发售 李璇名下3只基金今年来同类排名优秀
南方基金新债基发售 李璇名下3只基金今年来同类排名优秀

解读新商业的财经新媒体,报道资本市场,解读上市公司,......更多>

humphreys humphrey是什么意思英语
humphreys humphrey是什么意思英语

【声势浩大!18艘舰艇,9国联合巡航,8个阶段演练!】......更多>

人民币卢布汇率今日价格 8月24日卢布汇率多少?
人民币卢布汇率今日价格 8月24日卢布汇率多少?

人民币卢布汇率今日价格8月24日卢布汇率多少?,最新人......更多>

阿维塔11用上鸿蒙座舱!阿维塔CEO:余承东付出很多
阿维塔11用上鸿蒙座舱!阿维塔CEO:余承东付出很多

阿维塔11用上鸿蒙座舱!阿维塔CEO:余承东付出很多...更多>

价格战残酷洗牌 智能车产业链深水区业绩承压
价格战残酷洗牌 智能车产业链深水区业绩承压

从“国6B”标准实施,燃油车去库存,到新能源车竞争扩......更多>

关注

“Z世代”外国青年参观三星堆博物馆新馆 感受古蜀文明
“Z世代”外国青年参观三星堆博物馆新馆 感受古蜀文明
8月22日,“‘Z世代’画像中国”网络互动活动来到四川... 更多>
“Z世代”外国青年参观三星堆博物馆新馆 感受古蜀文明
8月22日,“‘Z世代’画像中国”网络互动活动来到四川... 更多>
元气骑士礼包码有哪些_最新可用礼包码大分享[多图]
元气骑士是一款精彩的地牢冒险游戏,玩家可以在游戏中... 更多>
西兰花和鸡蛋能一起炒吗
关于西兰花和鸡蛋能一起炒吗的内容,包含西兰花炒鸡蛋... 更多>
雷佳音电视剧全部(雷佳音电视剧)
雷佳音电视剧全部,雷佳音电视剧这个很多人还不知道,... 更多>
雷克沙展示 DDR5-8400 超高频内存,预计第四季度上市
IT之家8月24日消息,在科隆国际游戏展Gamescom2023上... 更多>
亚马逊广告发布最新出海趋势和营销洞察
近日,亚马逊广告专为中国出海企业打造的年度品牌盛会... 更多>
连续16年! 东莞高埗横滘头村“叔公”捐资助学逾646万元
东莞市高埗镇横滘头村有一位企业家,他被横滘头村民尊... 更多>
永安期货(600927.SH):浙经建投拟将9.48%股份无偿划转至浙江省交投
格隆汇8月23日丨永安期货(600927 SH)公布,公司收到... 更多>
魅族线下门店加速扩张!长沙、成都、东莞三城授权体验店即将开业
进入2023年,魅族线下门店的开张速度正在加快。近期,... 更多>
知乎今年二季度营收10.44亿元
8月23日,知乎发布截至2023年6月30日未经审计的季度财... 更多>
中小学生迎来好消息,学生的安全终于有保障了,已有地区开始实行
中小学生迎来好消息,学生的安全终于有保障了,已有地... 更多>
工信部:1-7月有色金属行业工业增加值同比增长5.9%
工信部:1-7月有色金属行业工业增加值同比增长5 9%--... 更多>