CAN总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的CAN信息帧才可以通过,其余的一概滤除。
在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控制器才允许将已接收信息存入RXFIFO。
验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器AMRn 定义,要接收的信息的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“不影响”,即可为任意值。
1、BasicCAN模式下SJA1000滤波器
在验收滤波器的帮助下CAN 控制器能够允许RXFIFO 只接收同识别码和验收滤波器中预设值相一致的信息,验收滤波器通过验收代码寄存器ACR和验收屏蔽寄存器AMR来定义。

<ignore_js_op>

复位请求位被置高,验收代码寄存器ACR可以访问(读/写)。
<ignore_js_op>
复位请求位被置高,验收屏蔽寄存器AMR可以访问(读/写)。验收屏蔽寄存器定义验收代码寄存器的相应位对验收滤波器是“相关的”或“无影响的”。
滤波的规则是:每一位验收屏蔽分别对应每一位验收代码,当该位验收屏蔽位为“1”的时候(即设为无关),接收的相应帧ID位无论是否和相应的验收代码位相同均会表示为接收;当验收屏蔽位为“0”的时候(即设为相关),只有相应的帧ID位和相应的验收代码位值相同的情况才会表示为接收。只有在所有的位都表示为接收的时候,CAN控制器才会接收该报文。
举例:如何设置滤波器,接收标识符为0000 1010的CAN帧?
在SJA1000复位模式下,设置寄存器CDR.7为“0”,即设置CAN控制器SJA1000工作于BasicCAN模式。
设置验收代码寄存器ACR0=0x0A;
根据滤波器信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR=0x00;
如此设置,SJA1000接收标识符ID.10~ID.3为0000 1010的CAN帧。
2、PeliCAN模式下SJA1000滤波器
有两种不同的过滤模式可在模式寄存器中选择MOD.3, AFM。
单滤波器模式:AFM 位是1;
双滤波器模式:AFM 位是0。
SJA1000验收滤波器由4个验收码寄存器ACR0、ACR1、ACR2、ACR3和4个验收屏蔽寄存器AMR0、AMR1、AMR2、AMR3组成。ACR的值是预设的验收代码值,AMR值用于表征相对应的ACR值是否用作验收滤波,这8个寄存器在SJA1000的复位模式下设置。
滤波的规则和BasicCAN模式下的滤波规则相同。滤波的方式有两种,由模式寄存器中的AFM( MOD.3 )位选择:单滤波器模式(AFM 位是1)、双滤波器模式(AFM 位是0)。
(1)、单滤波器的配置
这种滤波器配置定义了一个长滤波器(4字节、32位),由4个验收码寄存器和4个验收屏蔽寄存器组成的验收滤波器,滤波器字节和信息字节之间位的对应关系取决于当前接收帧格式。
接收CAN标准帧时单滤波器配置:
对于标准帧,11位标识符、RTR位、数据场前两个字节参与滤波;
对与参与滤波的数据,所有AMR为0的位所对应的ACR位和参与滤波数据的对应位必须相同才算验收通过;
如果由于置位RTR=1 位而没有数据字节,或因为设置相应的数据长度代码而没有或只有一个数据字节信息,报文也会被接收。对于一个成功接收的报文,所有单个位在滤波器中的比较结果都必须为“接受”;
注意AMR1 和ACR1 的低四位是不用的,为了和将来的产品兼容,这些位可通过设置AMR1.3、AMR1.2 、AMR1.4和AMR1.0 为1 而定为“不影响”。

<ignore_js_op>
举例:如何设置单滤波,接收标识符为0000 1010 010的CAN标准帧?
在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。
设置模式寄存器的验收滤波器模式位(AFM)为1,选择单滤波器模式;
设置验收代码寄存器ACR0=0x0A、ACR1=0x40、ACR2=ACR3=0x00;
根据单滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x0F、AMR2=AMR3=0XFF;
如此设置,SJA1000接收标识符ID.28~ID.18为0000 1010 010的CAN标准帧。
接收CAN扩展帧时单滤波器配置:
对于扩展帧,29位标识符和RTR位参与滤波;
对与参与滤波的数据,所有AMR为“0”的位所对应的ACR位和参与滤波数据的对应位必须相同才验收通过滤波;
必须注意的是AMR3和ACR3的最低两位是不用的。为了和将来的产品兼容,这些位应该通过置位AMR3.1和AMR3.0为“1”来定为“不影响”。
<ignore_js_op>
举例:如何设置单滤波,接收标识符ID.28~ID.0为0000 1010,0100 1010,0110 1011,1110 1的CAN扩展帧?
在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。
设置模式寄存器的验收滤波器模式位(AFM)为1,选择单滤波器模式;
设置验收代码寄存器ACR0=0x0A、ACR1=0x4A、ACR2=0x6B、ACR3=0XE8;
根据单滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x00、AMR2=0x00、AMR3=0X03;
(2)、双滤波器的配置
这种配置可以定义两个短滤波器,由4个ACR和4个AMR构成两个短滤波器。总线上的信息只要通过任意一个滤波器就被接收。
滤波器字节和信息字节之间位的对应关系取决于当前接收的帧格式。
接收CAN标准帧时双滤波器配置:
如果接收的是标准帧信息,被定义的两个滤波器是不一样的。
第一个滤波器由ACR0、ACR1、AMR0、AMR1以及ACR3、AMR3低4位组成,11位标识符、RTR位和数据场第1字节参与滤波;
第二个滤波器由ACR2、AMR2以及ACR3、AMR3高4位组成,11位标识符和RTR位参与滤波。
为了成功接收信息,在所有单个位的比较时,应至少有一个滤波器表示接受。RTR 位置位“1”或数据长度代码是“0”,表示没有数据字节存在;只要从开始到RTR 位的部分都被表示接收,信息就可以通过滤波器1。
如果没有数据字节向滤波器请求过滤,AMR1和AMR3的低4位必须被置为“1”,即“ 不影响”。此时,两个滤波器的识别工作都是验证包括RTR 位在内的整个标准识别码。
<ignore_js_op>
举例:如何设置双滤波,接收标识符ID.28~ID.18为0000 1010,010和ID.28~ID.18为01101011,111的两类CAN标准帧?
在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。
设置模式寄存器的验收滤波器模式位(AFM)为0,选择双滤波器模式;
设置验收代码寄存器ACR0=0x0A、ACR1=0x40、ACR2=0x6B、ACR3=0xE0;
根据双滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x0F、AMR2=0x00、AMR3=0X0F;
接收CAN扩展帧时双滤波器配置:
如果接收到扩展帧信息,定义的两个滤波器是相同的。
第一个滤波器由ACR0、ACR1和AMR0、 AMR1构成;
第二个滤波器由ACR2、ACR3和AMR2、 AMR3构成;
两个滤波器都只比较扩展识别码的前两个字节,即29位标识符中得高16位。
为了能成功接收信息,所有单个位的比较时至少有一个滤波器表示接收。
举例:如何设置双滤波,接收标识符ID.28~ID.13为0000 1010,0100 1010和ID.28~ID.13为0110 1011,1110 1001的两类CAN扩展帧?
在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。
设置模式寄存器的验收滤波器模式位(AFM)为0,选择双滤波器模式;
设置验收代码寄存器ACR0=0x0A、ACR1=0x4A、ACR2=0x6B、ACR3=0XE9;
根据双滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x00、AMR2=0x00、AMR3=0X00;
 
来源https://bbs.21ic.com/icview-837976-1-1.html

CAN总线系列讲座第六讲——SJA1000的滤波器设置的更多相关文章

  1. CAN总线系列讲座第五讲——CAN总线硬件电路设计

    CAN总线系列讲座第五讲--CAN总线硬件电路设计一  实战学习背景 CAN总线节点的硬件构成方案有两种,其中的方案:(1).MCU控制器+独立CAN控制器+CAN收发器.独立CAN控制器如SJA10 ...

  2. 【ArcGIS Server 开发系列】Flyingis六大系列讲座精品PDF奉献

    转自:http://www.cnblogs.com/gispeng/archive/2008/07/24/1250116.html [ArcGIS Server 开发系列]Flyingis六大系列讲座 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章  继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章 ...

  4. Maven提高篇系列之(六)——编写自己的Plugin(本系列完)

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  5. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Stanford机器学习---第六讲. 怎样选择机器学习方法、系统

    原文:http://blog.csdn.net/abcjennifer/article/details/7797502 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  7. 机器学习基石的泛化理论及VC维部分整理(第六讲)

    第六讲 第五讲主要讲了机器学习可能性,两个问题,(1)\(E_{in} 要和 E_{out}\) 有很接近,(2)\(E_{in}\)要足够小. 对于第一个假设,根据Hoefding's Inequa ...

  8. 《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现

    原文:<ArcGIS Engine+C#实例开发教程>第六讲 右键菜单添加与实现 摘要:在这一讲中,大家将实现TOCControl控件和主地图控件的右键菜单.在AE开发中,右键菜单有两种实 ...

  9. unity3D实际的原始视频游戏开发系列讲座10它《战斗:外来入侵》在第一季度游戏开发

    解说文件夹 <保卫战:异形入侵>游戏开发 第一讲   游戏演示和资源的介绍 第二讲  "异形"怪物的实现 第三讲  "异形"怪物生命值的体现 第四讲 ...

随机推荐

  1. C# HttpRequest 请求

    public static string Post(string Url, string postDataStr, string cookies) { HttpWebRequest request = ...

  2. (四)目标检测算法之Fast R-CNN

    系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...

  3. Linux网络命名空间

        命名空间(Linux namespace)是linux内核针对实现虚拟化引入的一个特性.创建的每个进程都有自己的命名空间,运行在其中的进程都像是在独立的操作系统中运行一样,命名空间保证了进程之 ...

  4. 研发管理平台DevOps使用流程

    研发管理平台DevOps使用流程:一.注册开发者账号二.登录平台三.点击:我的项目-内部项目三.点击"发布内部项目",创建项目五.进入项目六.研发管理平台研发管理平台的功能包括:可 ...

  5. MySQL 中如何归档数据

    归档,在 MySQL 中,是一个相对高频的操作. 它通常涉及以下两个动作: 迁移.将数据从业务实例迁移到归档实例. 删除.从业务实例中删除已迁移的数据. 在处理类似需求时,都是开发童鞋提单给 DBA, ...

  6. laravel7 权限菜单设置简易升缩

    1:数据库填写数据,pid=0为顶级菜单,pid=对应的id为顶级菜单的子菜单 2:laravel7 创建模型并链接对应的表名 <?php namespace App\models; use I ...

  7. 保姆级SpringBoot+Vue图片上传到阿里云OSS教程

    小二是新来的实习生,作为技术 leader,我给他安排了一个非常简单的练手任务,把前端 markdown 编辑器里上传的图片保存到服务器端,结果他真的就把图片直接保存到了服务器上,这下可把我气坏了,就 ...

  8. NaviCat连接提示驱动程序IM004错误

    今天一打开NaviCat提示驱动程序IM004错误,百度了好几种方法都不起作用,多次尝试后总结出一套方法: 一.到控制面板--卸载程序--卸载NaviCat Clien 注意可能有多个版本的,2008 ...

  9. 12.11 Exception

    12.11exception 1.类别 检查性异常:用户错误或者问题引起的异常,此类异常程序员无法预见.例如:打开一个不存在的文件,用户输入错误(在只能输数字的地方输入汉字)...... 运行时异常: ...

  10. a{...}和 .box a{...}的渲染性能高低

    a{...}和 .box a{...}的渲染性能高低 .box a { ... } a{ ... } 因为对于CSS浏览器的渲染机制是选择器从右向左查询 .box a {...} 的渲染逻辑是:先找所 ...