关于NXP的S32K,K3系列关于CAN接收过滤的掩码设置

2023-11-21 06:59

本文主要是介绍关于NXP的S32K,K3系列关于CAN接收过滤的掩码设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        恩智浦芯片目前CAN这块干了两种项目,关于CAN接收这一块,上一个项目都是用MB0接收所有的CAN帧,不做物理过滤设置;接手第二种项目,是每一个MB(message buffer),对应一个掩码过滤,导致新增加的报文接收不到,先不说第一种项目会不会有丢帧(目前在手册中没有找到相关的描述,如果所有的最多32个MB都被不过滤的任意的报文占满,会不会出现RMB丢帧的情况,或者去覆盖最低优先级的MB)或硬件资源浪费(中断受各种报文的响应)的情况,第二种面临的问题就是需要把目前这个CAN接收的过滤区放大来增加可以接收到的报文。现在对S32K,K3系列的CAN 接收过滤这一块做一个总结,主要参考资料就是芯片手册(Datesheet)。 

1.关于手册过滤功能中有这样一句话,这句话对设置掩码过滤非常重要:“对于邮箱接收,匹配算法可以仅将接收到的帧存储在ID字段中编程的具有相同ID 的MB中,掩码方案可以将MB上的编程的ID与接收到的CAN帧上的一系列ID相匹配。”,

2.手册中讲到很多FIFO,或者其他分类的情况,因为这个项目用到的是CANFD,不支持FIFO,所以以下描述都是基于MB接收的。

3.这段话第一个提到的是“匹配算法”,那么先介绍S32K,K3的MB的匹配算法。

这段话描述了,如果你为所有的邮箱设置了匹配算法,他的优先级是当RMB(一个通用的MB缓冲区)收到消息和ID时,在32个配置成接收邮箱的匹配顺序是从MB0到MB31。如果匹配不到则丢掉,当然还有一种特殊的情况,当不设置过滤掩码,或者过滤掩码设置的一样的话,会遵循下边这种情况。

如果有两个过滤相同的邮箱,则首先匹配索引号比较靠前的MB邮箱,(MB2)。然后匹配MB5。如果都放满的话,就覆盖后边的邮箱MB5。

关于邮箱的接收状态,文档有描述四种状态:会在下图的payload中有预留的(CODE段)

 上一段话中描述有提到,IRMQ这个MCR的寄存器的标志位,下来说一下这个主要用来设置选配相应的屏蔽过滤寄存器。

当选择为0时,单独掩码寄存器和队列被关闭;启用全局掩码寄存器(RX14,RX15,RXGLAB,这个后续的文档会描述,这里就不描述了)。在这里我们项目选择,1:打开使用单独掩码寄存器,即每个邮箱都可以设置单独的掩码过滤。

 即,每个邮箱都有一个单独的RXIMR(Rx Individual Mask Registers),根据相应的ID长度选配需要设置的过滤掩码。

0:表示不关心此位,此位0和1都会接收。 

1:表示关心此位,必须和编程ID缓冲段的字段相同。

比如本项目设置的是CAN2.0的标准帧,只有11位。具体的填充位置与接收缓存区的位置相同。如下图方框内所示:

 所以标准帧的掩码寄存器设置的位置为:28-19位;

好了,介绍完手册上的知识,让我们回到第一段话。现在设置掩码过滤需要配置的是两个地方(这里不考虑远程帧,本项目也没有用到),首先配置的是邮箱的ID段,如上图所示的0x04的位置的ID(Standard),因为本项目用的是标准帧。然后就是配置RXIMR的IM,也是配置的是28到19位。最后记住的是要将MCR的IRMQ配置为1,开启单独掩码寄存器。

举个例子:

IRMQ=1;

邮箱的ID段本项目是通过偏移量算出来ID段的位置,RXIMR0-RXIMR31都有相应的寄存器。

比如ID0=0x12D (11位标准帧);RXIMR0(28-19位)=7FF 则当前邮箱只能通过12D这个ID。

       ID0=0x12D(11位标准帧);   RXIMR0(28-19位)=700 ,则当前邮箱通过1xx的十一位报文。

       ID0=0x12D(11位标准帧);RXIMR0(28-19位)=00F,则当前邮箱通过xxD的十一位报文。

       ID0=0x12D(11位标准帧);RXIMR0(28-19位)=000,则当前邮箱通过任意报文,此时邮箱ID段填写的ID将无意义。

这篇关于关于NXP的S32K,K3系列关于CAN接收过滤的掩码设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400629

相关文章

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

如何设置windows计划任务

如何设置windows计划任务 前言:在工作过程中写了一个python脚本,用于调用jira接口查询bug单数量,想要在本地定时任务执行,每天发送到钉钉群提醒,写下操作步骤用于记录。 1. 准备 Python 脚本 确保你的 Python 脚本已经保存到一个文件,比如 jira_reminder.py。 2. 创建批处理文件 为了方便任务计划程序运行 Python 脚本,创建一个批处理文

FastAdmin/bootstrapTable 表格中生成的按钮设置成文字

公司有个系统后台框架用的是FastAdmin,后台表格的操作栏按钮只有图标,想要设置成文字。 查资料后发现其实很简单,主需要新增“text”属性即可,如下 buttons: [{name: 'acceptcompany',title: '复核企业',text:'复核企业',classname: 'btn btn-xs btn-primary btn-dialog',icon: 'fa fa-pe

众所周知,配置即代码≠基础设置即代码

​前段时间翻到几条留言,问: “配置即代码和基础设施即代码一样吗?” “配置即代码是什么?怎么都是基础设施即代码?” 我们都是知道,DevOp的快速发展,让服务器管理与配置的时间大大减少,配置即代码和基础设施即代码作为DevOps的重要实践,在其中起到了关键性作用。 不少人将二者看作是一件事,配置即大代码是关于管理特定的应用程序配置设置本身,而基础设施即代码更关注的是部署支持应用程序环境所需的

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

设置Nginx缓存策略

详细信息 Nginx服务器的缓存策略设置方法有两种:add_header或者expires。 1. add_header 1)语法:add_header name value。 2)默认值:none。 3)使用范围:http、server、location。 配置示例如下: add_header cache-control "max-age=86400";#设置缓存时间为1天。add

设置android返回键,保存和取得最高分

1.在.h中声明一些方法 virtual void keyBackClicked();           //Android返回键 bool isHaveSaveFile(); void getHighestHistoryScore(); 在.cpp中实现这个几个方法 void WelcomeLayer::keyBackClicked(

通知中心设置一个键盘的捕捉事件

//通知中心监听键盘的frame发生改变