一、背景 在实际应用中,CAN总线上的数据,对于某些CAN节点来说
08月25日 17:49
一、背景
(相关资料图)
在实际应用中,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。
审核编辑:彭菁
关键词:
一、背景 在实际应用中,CAN总线上的数据,对于某些CAN节点来说
08月25日 17:49
自杀者被劝诱走向绝路,而怂恿他人自杀的幕后“黑手”也被绳之以法
08月25日 17:46
智通财经APP获悉,万事达卡公司(MA US)和Visa公司(V US)退出了与币安控
08月25日 17:59
8月24日河南地区萤石市场行情走势暂稳,目前97%萤石粉湿粉出厂含税价格
08月25日 17:52
不建议中考复读是因为复读需要花费一年的时间和精力,对于一些学生来说
08月25日 17:53
中关村在线消息,8月22日,明月湖·π全球创新大会在重庆市两江新区盛
08月25日 17:50
当地时间8月24日,俄罗斯总统普京在莫斯科向特维尔州坠机事故中遇难人
08月25日 17:43
【智车派新闻】近日,智车派注意到,特斯拉汽车的首席执行官马斯克在今
08月25日 17:42
每经AI快讯,国联证券08月24日发布研报称,给予三生国健(688336 SH,
08月25日 17:50
极目新闻记者王峻实习生杨可儿通讯员何振辉夏日是溺水事件的高发季节,
08月25日 17:55
FreeBSD是一种自由类Unix操作系统,是由经过BSD、386BSD和4 4BSD发展而
08月25日 17:50
我国对烟草专卖品的生产、销售、进出口依法实行专卖管理,没有办理《烟
08月25日 17:44
8月23日,2023RISC-V中国峰会在北京召开。平头哥凭借玄铁RISC-V高性能
08月25日 17:45
新华财经北京8月23日电北京市财政局23日发布通知称,为支持北京市地方
08月25日 17:46
8月22日,“‘Z世代’画像中国”网络互动活动来到四川三星堆博物馆,来
08月25日 17:43
2022年辽宁省再融资专项债券的占比明显较高,但自2019年以来该比例的降
08月25日 17:45
东航物流融资融券信息显示,2023年8月24日融资净买入万元;融资余额亿
08月25日 17:45
喜临门融资融券信息显示,2023年8月24日融资净偿还万元;融资余额亿元
08月25日 17:39
"贝克尔进一步指出,小兹维列夫今年没有伤病困扰,这是另一个可能使他
08月25日 17:47
北京日报客户端|记者褚英硕通讯员韩慧“从沙河高教园地铁站到基地有3 5
08月25日 17:44
邮报:富勒姆有意阿尔克马尔的日本后卫菅原由势,身价1000万镑,英超,拜
08月25日 17:39
挖贝网2023年8月24日,赢合科技(300457)近日发布2023年半年度报,报告
08月25日 17:49
智通财经APP获悉,8月24日,香港金管局发表《香港债券市场代币化》的报
08月25日 17:37
ST交投公告,公司作为联合体牵头人,与云南依科环境建设有限公司(公司
08月25日 17:47
北京再调整9月1日起二环主路全线取消公交专用道---央视网消息据北京市
08月25日 17:37
“进村不见房,闻声不见人。”地坑院是一种典型的下沉式乡土建筑,利用
08月25日 17:44
新华社北京8月23日电(记者魏梦佳、徐步云)“长大了想上什么大学?”
08月25日 17:42
中国人寿(601628):NBV表现亮眼业绩受权益投资拖累
08月25日 17:37
8月24日,麦澜德(688273)融资买入152 67万元,融资偿还246 63万元,
08月25日 17:41
纯损显着上升,主要由于在2023年中期,COVID-19的疫情终结,医疗及保健
08月25日 17:34