关于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

相关文章

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

Redis如何实现刷票过滤

《Redis如何实现刷票过滤》:本文主要介绍Redis如何实现刷票过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言一、概述二、技术选型三、搭建开发环境四、使用Redis存储数据四、使用SpringBoot开发应用五、 实现同一IP每天刷票不得超过次数六

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触