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

相关文章

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab