| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 如何使用KEA128的CANID滤波功能 -> 正文阅读 |
|
[嵌入式]如何使用KEA128的CANID滤波功能 |
文章目录前端时间有做PTC的客户咨询KEA128的CAN ID滤波功能,当时由于太忙,只是帮助客户一起过了下参考手册相关章节,没有给出相关的示范例程,客户增加滤波功能的过程也有些磕磕绊绊。最近正好有空,详细描述下KEA128的CAN ID滤波功能以及注意点,同时提供下示范例程。 相比S32K1系列的FlexCAN模块,KEA128的MSCAN模块在功能上弱不少,但是对于CAN要求不高的产品,MSCAN模块还是能够胜任的。并且,KEA128相比同Flash大小的S32K116,在最近这段缺货的时间,供应更稳定些。 1.KEA128和S32K116的CAN模块对比如下是KEA128和S32K116的CAN模块的简单对比:
需要说明的是,如果S32K1使能了RX FIFO功能的话,滤波表ID可以是32bit,也可以是16bit或8bit,类似于KEA128。 在介绍两颗芯片的CAN ID滤波功能之前,先简单回顾下CAN报文的格式,了解这个,对CAN ID滤波的理解会更深入。 CAN报文格式CAN通信帧类型有5种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。这里只介绍下数据帧和远程帧。 1.1 数据帧数据帧的仲裁段以及控制段结构如下: 由上图可知,数据帧中和帧ID、SRR、RTR、IDE等相关的为仲裁段和控制段,其中:
1.2 远程帧远程帧相比数据帧,去掉了数据段,结构如下: 和数据帧的对比如下:
2.S32K116的CAN ID滤波功能介绍2.1 功能特性介绍S32K116不同于S32K144,只有一路CAN,且支持CAN FD,如果用作普通CAN的话,既数据段最多8个字节,那么有32个MB(MessageBuffer)可用,地址如下: 此时一个MB占用16个字节,结构如下: 同时,对于ID滤波的掩码,可以使用全局掩码寄存器 上面的描述适用于未使能RX FIFO的情况。如果使能了FIFO,CAN报文接收缓存使用FIFO结构,如下图所示:
2.2 匹配过程介绍当S32K116接收到一帧CAN报文时,该CAN报文会先存储在一个隐藏的辅助MB中,称为Rx SMB,其结构和正常MB一样。然后进行CRC校验,接着进行ID的匹配,如果没有检测到CAN错误,会将报文从SMB传输到ID匹配的FIFO或者MB中。 S32K1的SDK对于掩码配置有现成的API函数调用,如下所示,感兴趣的读者可以自行研究。后文就不介绍相应的示范例程了。 3.KEA128的CAN ID滤波功能介绍3.1接收缓冲区介绍KEA128只有1路CAN,符合Bosch CAN 2.0A/B标准,不支持CAN FD,内部有5个报文接收缓冲区(采用5级FIFO存储方式)被交替地映射入单个存储器区域,如下图所示: 每个接收缓冲区在存储器映像中分配15个字节(发送缓冲区会多一个 相应的,
3.2 ID滤波器介绍KEA128的ID滤波器类似于S32K1系列使能Rx FIFO之后的ID滤波表,不过数量很少,通过配置寄存器 3.2.1 32位ID滤波器当配置成2个32位ID滤波器时,每个ID滤波器都可以用来验收:
第一个滤波器组(CANIDAR0-CANIDAR3,CANIDMR0-CANIDMR3)的具体滤波方式如下图,第二个滤波器组(CANIDAR4-CANIDAR7,CANIDMR4-CANIDMR7)的滤波方式类似: 由上图可以看出,标识符验收寄存器 当后台接收缓冲区(RxBG)接收到一帧报文时,按如下方式进行逐位检查,
当标识符的所有位都满足要求且没有违反CAN协议的错误,MSCAN会将RxBG的内容移入FIFO,同时置位RXF(接收器完整标志)并生成接收中断给CPU,接着用户从RxFG读取接收的报文,同时复位RXF以应答中断和释放前台缓冲器。如果RxBG的报文不满足过滤器要求或者违反CAN协议,该报文不会移入FIFO,当下一帧报文过来时,会将其覆盖。
如果使用场合需要同时处理标准帧和扩展帧,且CAN ID不多,建议选择此种方式。 3.2.2 16位ID滤波器当配置成4个16位ID滤波器时,每个ID滤波器都可以用来验收:
前2个滤波器组(CANIDAR0-CANIDAR3,CANIDMR0-CANIDMR3)的具体滤波方式如下图,后2个滤波器组(CANIDAR4-CANIDAR7,CANIDMR4-CANIDMR7)的滤波方式类似: 如果使用的场合中需要接收的标准CAN ID比较多,且不需要处理扩展CAN ID,建议选择16位ID滤波器。 3.2.3 8位ID滤波器当配置成8个8位ID滤波器时,每个ID滤波器都可以用来验收:
前4个滤波器组(CANIDAR0-CANIDAR3,CANIDMR0-CANIDMR3)的具体滤波方式如下图,后4个滤波器组(CANIDAR4-CANIDAR7,CANIDMR4-CANIDMR7)的滤波方式类似: 笔者支持的客户中,没遇到过使用8位ID滤波器的方式,不推荐使用。 4.KEA128的CANID滤波功能测试一般使用KEA128的汽车电子产品,需要接收的CAN ID比较少,所以比较常见的过滤方式是分配成两个2个32位ID滤波器,一个用来接收标准ID,一个用来接收扩展ID。下面基于前文《如何使用S32DS for ARM 2.2正常运行KEA官方例程》提分享的KEA128的CAN例程进行修改,从而滤波器配置的相关测试。 4.1环境搭建
4.2软件配置首先打开自带的例程,重命名为mscan_id_filter_kea128,本身该CAN例程包含两个接收数据帧的函数,如下图所示:
下面,我们修改函数 4.2.1 完善接收流程原本例程中函数
4.2.2 滤波设置在msCANcfg.h文件中已经预设好相关的宏定义用来设置 本次例程计划实现的功能为:只接收ID为0x100的标准数据帧和接收ID为0x100的扩展远程帧,然后将接收到的数据段发送出去。 分析下该种要求,每个寄存器的值如下图: 按照上图,填写宏定义如下两张图: 至此,所有配置完成,下节将展示相关的测试数据。 4.3测试数据
增加滤波配置前: 增加滤波配置后: 5.参考资料6.例程分享本文所展示的例程分享如下: 链接:https://pan.baidu.com/s/1QZO8HjK4sl28Ok8P8bZ8Bw |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:26:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |