S32k3系列开发学习(FlexCAN)

news2025/1/9 1:36:35

前言

由于之前没有接触过CAN总线模块,对这一块的知识仍比较陌生,于是乎想简单梳理一下CAN总线的工作流程,加深理解。

一、CAN是什么?

参考:https://zhuanlan.zhihu.com/p/346696648

二、CAN框架

在这里插入图片描述

各模块功能如下:
协议引擎Protocol Engine (PE)
PE用于管理CAN总线上的串行通讯: 请求RAM访问用于接收、发送消息帧;验证接收的消息; 运行错误处理; 探测CAN FD帧。
控制器主机接口Controller Host Interface (CHI)
CHI用于管理接收、发送的消息缓存( message buffer),负责仲裁和ID匹配。
总线接口单元Bus Interface Unit (BIU)
BIU用于控制访问内部总线,建立与CPU和其他模块的联系。包括时钟、寻址、数据总线、中断、DMA的访问都是通过BIU.

1.MBs结构

关于对消息邮箱的理解:消息邮箱属于CAN外设的硬件组成部分,其实际上是一种有着固定格式的数据存储区域(RAM)。
寄存器占128Bytes, 地址偏移从0x80 to 0x27F 分配给32个128位(4字)的MBs消息邮箱。
在这里插入图片描述

各字段含义:
EDL : 扩展数据长度,区分CAN和CAN FD格式帧。
BRS:Bit Rate Switch,使能CAN FD中的Bit Rate开关。
ESI :错误状态指示灯,指示传输节点是否处于错误状态。
CODE:总线状态
SRR:替代远程请求,固定隐性位,仅在扩展格式中使用。
IDE: ID扩展位,用于标识标准ID或扩展ID。
RTR:远程传输请求,影响远程帧,接收过滤器的一部分。
DLC:数据长度
PRIO:邮箱的优先级
TIME:时间戳,记录每一帧的时间

消息邮箱的数量取决于所设定的数据负载的大小,通常分配如下:

在这里插入图片描述

2.工作流程

在这里插入图片描述

发送过程
1、选择一个MB
2、写入ID
3、写入负载数据字节数
4、设置MB
5、激活MB发送CAN帧
当MB激活后,将参与仲裁过程,最终根据优先级发送出去。当发送成功后,相关的状态寄存器被更新。

仲裁过程
仲裁过程扫描MBs,从低编号到高编号,选择一个arbitration winner用于在下次发送。
当找到arbitration winner,其被拷贝到一个隐藏的辅助性的Tx Serial Message Buffer (Tx SMB),【move-out】。在第一个CAN BUS机会窗口,Tx SMB中内容根据CAN协议规范发送出去。

接收过程
1、邮箱失能
2、写出ID
3、将EMPTY代码(0b0100)写入code字段以激活邮箱。
在MB激活后,它能够根据滤波设计接收帧,在接收成功后,MB被【move-in】过程更新。
CPU应查询 IFLAG registers 而不是消息邮箱的CODE域。

搬运处理
Move_in
复制Rx SMB接收到的消息到Rx mailbox或者匹配的FIFO,若到Rx FIFO,消息的属性也复制到 CAN_RXFIR FIFO。每个Rx SMB有各自的move-in处理,但同一时刻只有一个是运行着的。
Move_out
当有消息可供传输时,复制Tx mailbox的内容到Tx SMB。

3.常用API

FlexCAN_Ip_Init(obj->pBase->flexCan, obj->pBase->sateType, obj->pBase->configType);
//主要是使能模块,初始化 ECC (FlexCAN_ClearRAM ),清空中断标志,关闭 IMASK 中所有中断,设置 CAN FD ,位时间, bus off 自动恢复,初始化状态结构体等等
FlexCAN_Ip_SetStartMode(obj->pBase->flexCan);
//将CAN总线状态设置为启动模式
FlexCAN_Ip_SetBitrate_Privileged(obj->pBase->flexCan, &obj->pBase->bitrate, FALSE);
//设置波特率
FlexCAN_Ip_ConfigRxMb(obj->pBase->flexCan, obj->pBase->rxMailbox[obj->pBase->rxMailboxLen-1].msgObjId, &canDataInfo, id);
//初始化接收报文缓存区即配置接收邮箱
FlexCAN_Ip_Send(obj->pBase->flexCan,  obj->pBase->txMailbox[txIdx].msgObjId, &canDataInfo, pMsg->id, sendData);   
//发送数据
FlexCAN_Ip_Receive(obj->pBase->flexCan, obj->pBase->rxMailbox[rxIdx].msgObjId, &rxData, TRUE);
//接收数据

总结

CAN模块所涉及到的知识点远不止于此,本篇只是对其工作流程作了一个简单的梳理,其内部细节仍需画大量的时间不断实践,方才能运用自如。其他内容可参考NXP所给出的应用案例,深入了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP基础:标注器Label Studio的入门使用

目录 一、环境准备 二、操作 文章来源: 简介: Label Studio是一个开源的数据标注工具,它可以用于各种机器学习和深度学习项目。它的主要目的是帮助数据科学家和机器学习工程师快速、高效地标注数据,以构建和训练准确的机器学…

Linux入门---开发的Linux命令手册

Linux 基础知识 基础 启动过程: 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 命令介绍 磁盘 #文件#a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用);f:为强制(force)进行&…

Ubuntu20.04使用多卡训练HyperNetwork模型和LoRA模型全流程及疑难问题解决方案

目录 一. LoRA模型多卡训练1.1 安装xformer等库1.2 设置路径1.3 多卡训练 二. LoRA模型多卡训练疑难报错解决方案多卡训练报错 软硬件配置: CPU: AMD 5800 8core 16Thread GPU: NVIDIA RTX 3090 *1 NVIDIA TITAN RTX *1 OS: Ubuntu20.04 一. LoRA模型多卡训练 1.1 …

JavaScript概述四(DOM文档对象模型)

1.DOM(Document Object Model) 会把网页里面的元素当成对象去操作,包含对象的属性,属性值,方便我们去 操作网页。 整个页面最终会形成一个对象 :document ,页面里面的所有的元素(如 标签 ) 最终都会转换成 js 里面的对象。 1.1 获取页面的元素(通过选择器&#xff0…

S32K3系列单片机学习

前言 定时器中断,每个平台的实现方式均有差异,从51单片机通过寄存器配置实现定时器周期计数,再到使用HAL库配置STM32的定时器,他们的实现原理都是大同小异的,只不过不同的平台使用的底层库不同,导致实现的…

公司25k招了一个测试员不会自动化,试用期没过就赶走了...

最近翻了一些网站的招聘信息,把一线大厂和大型互联网公司看了个遍,发现市场还是挺火热的,虽说铜三铁四,但是软件测试岗位并没有削减多少,建议大家有空还是多关注和多投简历,不要闭门造车,错过好…

手推FlinkML2.2(一)

Java 快速入门 # 本文档提供了一个关于如何使用Flink ML的快速入门。阅读本文档的用户将被指导提交一个简单的Flink作业,用于训练机器学习模型并提供预测服务。 求助,我卡住了!# 如果你遇到困难,请查看社区支持资源。特别是&…

第一个 Servlet 程序

1. 创建项目 使用 IDEA 创建一个 Maven 项目. 1.1、File -> New Project Name:javaservlet2 Location:选择要存放的路径 Language:Java Build system:Maven 点击Create按钮 1.2、Pom.xml引入依赖 依赖包来源&#xff1a; <dependencies> <!-- https…

【Hive实战】探索Hive 2.X以及更早版本的MetaStore

探索Hive 2.X以及更早版本的MetaStore 文章目录 探索Hive 2.X以及更早版本的MetaStore概述配置元数据服务和元数据存储库基础配置参数其他配置参数默认配置配置元服务数据库使用内嵌模式的Derby库使用远程数据存储库 配置元数据服务本地/内嵌服务配置远程服务配置 元数据服务配…

Java Collection源码分析(JDk corretto 11)

文章目录 Collection 系列源码分析 (JDK Amazon corretto 11)Collection接口Iterable接口 子接口 QueueQueue的子接口 Deque双端队列 子接口ListArrayList 实现类序列化与反序列化(后续解决)获取Calss对象的方式 主要有三种&#xff1a;Arrays工具类System类 LinkedList实现类t…

kotlin的let,with,run,apply,also,异同区别

kotlin的let&#xff0c;with&#xff0c;run&#xff0c;apply&#xff0c;also&#xff0c;异同区别 例如&#xff1a; class Person(var name: String, var age: Int) {fun eat() {println("吃饭")}fun work(hour: Int): Int {println("$name $age 工作 $ho…

【论文写作】如何写引言?应该思考什么问题?总体架构!!!

结构 大多数的科技论文都聚焦于简单地说明&#xff0c;做了什么&#xff0c;发现了什么&#xff1f;虽然这个可以帮助你写出一篇研究型论文当中的核心的东西&#xff08;方法论和结果&#xff09;&#xff0c;但是不能完全把引言的部分完成。在这篇文章当中&#xff0c;将展示…

【Python】Python学习笔记(三)条件语句

条件语句 Python中的条件语句与c/cpp基本无异。 if语句 基本结构见以下代码。 Python使用缩进控制if/else语句之间的嵌套关系。 #判断两数是否相等。a int(input(a:)) b int(input(b:))if a b:print(Same) else:print(No Same)elif 代替了cpp中“else if”的写法&#…

数据结构(顺序结构、链式结构、索引结构、散列结构)

文章目录 1.概述2.数据间逻辑关系3.数据的存储结构&#xff08;或物理结构&#xff09;3.1顺序结构3.2链式结构3.3索引结构3.4散列结构 4.运算结构 1.概述 数据结构&#xff0c;就是一种程序设计优化的方法论&#xff0c;研究数据的逻辑结构和物理结构以及它们之间相互关系&am…

STM32 DMA详解

1.DMA简介 DMA (Direct Memory Access) 直接存储器存取 DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源( 比如想把Flash里的一批数据转运到SRAM里&#xff0c;需要软件触发&#xff0c;使用软件触发之后&a…

NAT网络地址转换技术入门到详解

本文目录 1、NAT简介1.1、SNAT 和IP伪装(Masquerade)1.2、DNAT1.3、Full NAT (也称为Full Cone NAT)1.4、PAT (也称为NAPT) 2、如何通过iptables将一台多网卡的主机配置成NAT路由器3、汇总 本文会从NAT的简介入手&#xff0c;详解NAT技术本身&#xff0c;通过本文&#xff0c;你…

巧用千寻位置GNSS软件| 电力线勘测如何实现?

正如大家所知&#xff0c;电力线勘测是在做电力线路设计之前对设计线路沿途自然环境进行勘察测量&#xff0c;最后把手簿测量数据在电脑端经过转换输出为电力软件专用格式数据的专用功能。 那么在千寻位置GNSS软件中该如何操作完成电力线的勘察测量呢&#xff1f; 点击【测量】…

市场岗位都在通缩,Framework开发就业环境怎么样?

随着 Android 设备的普及和应用领域的不断扩大&#xff0c;Android Framework 开发需求量将会持续增长&#xff0c;并且会越来越多地向行业、企业级应用和系统优化等方向发展。以下是一些 Android Framework 开发相关的应用场景&#xff1a; 特定垂直领域的智能设备&#xff1…

写最好的Nacos Server稳定版(nacos-server-2.1.1)在Centos、Docker和Windows上安装部署(单机、集群)教程

写最好的Nacos Server稳定版&#xff08;nacos-server-2.1.1&#xff09;在Centos、Docker和Windows上安装部署&#xff08;单机、集群&#xff09;教程 一、前言二、Nacos Server在 Centos7 安装部署&#xff08;单机模式&#xff09;2.1 下载 nacos-server-2.1.1 安装包2.1.1…

Matplotlib绘图库的高级使用

Matplotlib绘图库的高级使用 Matplotlib的三层结构容器层辅助显示层图像层 Matplotlib的绘图配置设置画布属性绘图保存自定义x与y刻度解决中文显示异常网格显示多次plot绘图标记显示图例多个坐标系显示 Matplotlib的三层结构 Matplotlib从层次结构上分&#xff0c;可以分为三层…