AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析
AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析
前言
首先,请问大家几个小小问题,你清楚:
- AUTOSAR框架下的CAN驱动关键词定义吗?是不是有些总是傻傻分不清楚呢?
- CAN驱动Mailbox配置过程中有哪些关键配置参数值得我们注意,防止出现低级错误?
- CAN驱动Mailbox的三种类型Tx Buffer,Tx FIFO,Tx Queue的区别吗?
今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:

正文
CAN驱动作为一个在日常开发项目中经常接触到的重要驱动模块,AUTOSAR组织对CAN Driver有着十分全面而准确的实现要求与相关关键词参数的定义。
经常发现大家在开发过程中总是会忽略或者混淆这些模块的关键词的定义,导致最终双方在沟通过程中存在很多的误解,在开发过程中也会存在诸多不必要的失误与bug的产生,因此本文小T将带领大家一起来了解AUTOSAR框架的CAN Driver一些十分重要的关键词解释以及难以理解的基本概念,助力我们日常工作中的CAN驱动开发。
小T未来会继续更新该AUTOSAR词典专栏,该词典将会讲解有关AUTOSAR框架下难以理解或者容易混淆的基本概念与相关重要知识点,像“百科词典”一样帮助大家查漏补缺,助力大家高效完成基于AUTOSAR的软件开发,欢迎大家多多关注与转发该专栏。
CAN 驱动关键词定义
小T通过学习AUTOSAR CAN Driver标准文档,并结合自身实战经验,将CAN Driver模块的关键词定义整理如下表所示:

CAN 驱动Mailbox关键配置参数
在底层MCAL CAN Driver配置过程中总是会存在许多容易混淆的关键配置参数,该类参数如果配置有误,有些时候就会出现让人费解的问题与bug,因此为了能够减小这类问题的出现,小T结合自身实战经验一起来学习下CAN驱动中关键配置参数的定义与相关注意事项。
Hardware Object
如上述表格中所述, 一个Hardware Object就是一个CAN L-PDU的buffer,用来存储仅一个CAN ID Message,你将可以将其理解为就是我们常说的Mailbox,该Mailbox就是CAN 控制器硬件上的一个物理buffer空间,用来存储用于发送或者接收的一个CAN ID Message,该CAN ID Message自然就是包含CAN ID,DLC, Data三个部分。
HOH,HTH,HRH三者区别与联系
为了更好的理解HOH,HTH,HRH三者的区别,小T将三者的区别与联系整理如下表所示:

CanHwObjectCount
该参数按照AUTOSAR官方文档中的定义,表示的就是Hardware Object中的数目,不过需要注意的是该参数面向的对象是HOH,即HRH或者HTH,该参数表示是否为该HOH配置了FIFO机制,如果数目为1,则并没有FIFO进行缓存数据,如果大于1,那么就是为该HOH配置了FIFO的数据缓存机制,这种缓存机制对于防止CAN接收或者发送的重要报文丢失至关重要。
如下图所示便展示了CanHwObjectCount在HOH中的配置:


- 如上图1所示,可以知道该HOH为发送类型的HOH,因此就直接可以理解为HTH,那么该HTH中定义了参数CanHwObjectCount的值为1,表示不存在FIFO机制,仅是一个唯一的buffer,如果数据发送或者接收比较频繁,意味着新数据可能来不及发送;
- 如上图2所示,可以知道该HOH为接收类型的HOH,因此就直接可以理解为HRH,那么该HRH中定义了参数CanHwObjectCount的值为2,表示存在深度为2的FIFO机制,如果数据发送或者接收比较频繁,至少存在深度为2的FIFO缓存空间来防止重要数据的丢失。
Full CAN与Basic CAN
在MCAL CAN Driver中的Full CAN与Basic CAN是用来修饰HOH的类型参数,该参数可以通过CanObejctType进行定义。
Full CAN:一般表示仅存在1个的Hardware Object与之对应,且该Full CAN类型的Hardware Object与特定的CAN ID Message绑定;
Basic CAN:一般表示存在1个或者多个的Hardware Object与之对应,且该Basic CAN类型的Hardware Object与非特定的CAN ID Message或者一定范围内的CAN ID Message绑定;
注意事项:
- 对于Basic Can类型的HOH 一般建议通过配置硬件过滤器来实现底层无关CAN Message的数据接收或者特定范围内的报文接收,减少不必要的硬件中断,也就从某种程度上降低了CPU负载;
- 当硬件资源较为充足且无需过多考虑新数据可能覆盖老数据的场景,一般推荐将HOH配置称FULL CAN类型。
- 在HOH的配置过程中,一般情况下均需要先将FULL CAN类型的HOH统一配置在前,Basic CAN类型的HOH配置在后,否则容易造成生成的代码中Maibox使用错乱的情况。
推荐配置方案
小T结合实战经验,将软件开发过程中常见的四类报文类型:应用报文,网络管理报文,诊断报文,Xcp报文的发送与接收的mailbox配置方案总结如下表所示:

推荐配置方案总结如下:
- 诊断报文由于属于重要报文,丢失与发送均不允许丢失且存在严格的时序关系,因此发送与接收均推荐Basic CAN+FIFO 来设置;
- Xcp报文发送与接收都是特定ID的报文,因此发送与接收均推荐Full CAN+Buffer来设置;
- 应用报文在mailbox硬件充足的前提下,发送与接收优先采用Full CAN+Buffer来设置,如果硬件资源不够的话,那么推荐采用Basic CAN+FIFO来配置;
- 网络管理报文接收一般是一定范围的报文,因此接收推荐采用Basic CAN+Buffer来配置,发送由于ID确定,因此推荐采用Full Can+Buffer来设置;
- 所有报文的发送与接收配置完成之后,一定要确保所有配置HOH中的CanHwObjectCount加起来的mailbox发送与接收数目分别不能超过芯片手册规定的发送mailbox与接收mailbox硬件资源总和;
CAN 驱动硬件Buffer类型
了解了上述CAN驱动推荐方案之后,我们接下来需要进一步探究下对于can controller硬件资源内部对于用于存储CAN L-PDU的buffer是如何定义的?
一般来讲,现在市面上主流的CAN Controller对于其硬件资源按照发送与接收可以分为如下几种类型Buffer:
- 发送硬件Buffer类型:Tx Buffer,Tx FIFO,Tx Queue;
- 接收硬件Buffer类型Rx Buffer,Rx FIFO;
接下来将针对每种硬件Buffer类型分别进行讲解:
Tx Buffer
Tx Buffer又名Dedicated Tx Buffer,该Buffer会与特定的CAN ID进行绑定,发送优先级是完全通过CAN ID越小,优先级越高,高优先级优先发送;
一般该Tx Buffer会配置HOH的CanObejctType类型为Full CAN模式。
Tx FIFO
上文中说的FIFO机制实际上在硬件底层可以分为两种,一种是Tx FIFO,另外一种就是Tx Queue,因为两种本身都是一种缓存空间。
Tx FIFO顾名思义就是按照“先进先出”的方式来进行发送,忽略CAN ID优先级,一般为了防止出现优先级反转现象,不建议使用FIFO模式。
Tx Queue
Tx Queue 作为FIFO机制的一种,与Tx FIFO本身有所不同的是放置新的Message发送请求时按照先后顺序来放置,但是发送时则与Tx Buffer机制一样,按照高优先级优先发送原则,即CAN ID越小,优先级越高,如果存在多个同样CAN ID的报文需要发送,那么数字小的Buffer ID号先发送。
除了上述单一的发送模式之外,绝大多数情况可能存在上述组合模式,组合模式下特别需要注意的是外发报文优先级的判定:
Tx Buffer + Tx FIFO模式

如上图可知,每次发送优先级按照如下方式进行判定:
- 取出Dedicated Tx Buffer中的最小CAN ID发送请求;
- 取出Tx FIFO中最老的CAN ID发送请求;
- 比较上述Tx Buffer与Tx FIFO分别取出的CAN ID发送请求,两者之间的CAN ID越小的发送请求优先发送。
Tx Buffer + Tx Queue模式

如上图可知,每次发送优先级按照如下方式进行判定:
- 取出Dedicated Tx Buffer中的最小CAN ID发送请求;
- 取出Tx Queue中最小CAN ID发送请求;
- 比较上述Tx Buffer与Tx Queue分别取出的CAN ID发送请求,两者之间的CAN ID越小的发送请求优先发送。
Rx Buffer
Rx Buffer与Tx Buffer同理, 一般都是与特定的CAN ID进行绑定,一般该Rx Buffer均会配置HOH的CanObejctType类型为Full CAN模式,如果此时老的数据CPU还没有处理完,新的数据将不会得到处理。
Rx FIFO
Rx FIFO典型的就是按照“先进先出”的方式进行CAN报文的接收处理,一般而言,Rx FIFO都会存在两个,一个是Rx FIFO0,两外一个是Rx FIFO1,这个根据实际情况进行选择。
同时Rx FIFO如果存在Full的情况,那么有如下两种处理方式:
- Blocking Mode:表示如果FIFO已经满了,只有等到数据处理完成之后才可以放入新的数据,一般推荐使用该方式;
- Overwrite Mode:表示如果FIFO已经满了,新来的数据可以覆盖掉最老的数据,如果采用OverWrite方式,需要确保获取数据时与接收数据时不会存在数据一致性问题;
更多精彩内容,敬请关注公号“ADAS与ECU之吾见!”
相关文章:
AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析
AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析 前言 首先,请问大家几个小小问题,你清楚: AUTOSAR框架下的CAN驱动关键词定义吗?是不是有些总是傻傻分不清楚呢?CAN驱动Mailbox配置过程中有哪些关键配置参…...
C语言 coding style
头文件 The #define Guard #define的保护文件的唯一性,防止被多重包含 格式 : <PROJECT>_< FILE>_H_ PROJECT : XS FILE : MV_CTR 头文件的包含顺序 C System FilesOther LibrariesUser LibraryConditional include 作用域 局部变量 -变量定义时需要…...
Python办公自动化之PDF
Python操作PDF 1、Python操作PDF概述2、批量拆分3、批量合并4、提取内容(文字)5、提取内容(表格)6、提取图片7、PDF添加水印8、加密与解密1、Python操作PDF概述 Python操作PDF主要有两个库:PyPDF2和pdfplumber PyPDF2是一个用于处理PDF文件的Python第三方库 官网文档参考:…...
【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心
打家劫舍 IV【LC2560】 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额…...
JVM 参数详解
GC有两种类型:Scavenge GC 和Full GC 1、Scavenge GC 一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到…...
uni-app获取地理位置
在uni-app中,可以通过uni.getLocation()方法获取地理位置。具体步骤如下: 在uni-app项目中的manifest.json文件中,添加需要获取地理位置的权限: {"mp-weixin": {"appid": "...","permission…...
Learn Prompt-Prompt 高级技巧:思维链 Chain of Thought Prompting
Jason Wei等作者对思维链的定义是一系列的中间推理步骤( a series of intermediate reasoning steps )。目的是为了提高大型语言模型(LLM)进行复杂推理的能力。 思维链通常是伴随着算术,常识和符号推理等复杂推理任务出…...
Vim编辑器使用入门
目录 一、Vim 编辑器基础操作 二、Vim 编辑器进阶操作 三、Vim 编辑器高级操作 四、Vim 编辑器文件操作 五、Vim 编辑器文件管理 六、Vim 编辑器进阶技巧 七、Vim 编辑器增强功能 Vim的三种工作模式 一、Vim 编辑器基础操作 1.移动光标 - 光标的移动控制 移动光标有两…...
早餐与风景
来吧,我用流水账描述下这一天。 时维九月,北京的早上有点冷,因为今天有个市场活动要去支撑,按照会议时间的要求,我需要在早上7点半就赶到会场,所以昨天晚上我加班到凌晨处理完了今天要给出去的材料…...
常用python代码串
记录新疆出差期间的一些代码 打开yaml文件python中的专有名词ctrlc 打开yaml文件 with open(/home/cyun/文档/cotton_ws/src/control/scripts/ControlParameter.yaml, r) as file:yaml_data yaml.load(file, Loaderyaml.FullLoader)后面发现像这种打开文件的最好是try一下 p…...
电脑桌面透明便签软件是哪个?
在现代快节奏的工作环境中,许多上班族都希望能够在电脑桌面上方便地记录工作资料、重要事项、工作流程等内容。为了解决这个问题,一款优秀的电脑桌面便签软件是必不可少的。在选择桌面便签软件时,许多用户也希望便签软件能够与电脑桌面壁纸相…...
Git创建干净分支,本地操作不依赖任何分支
clone远程项目: git clone gittest.git查看分支: git branch -a创建新分支: git checkout --orphan test, 返回Switched to a new branch test删除当前项目文件夹下所有文件: git rm -rf .提交变更: git commit -m "new branch for test"查看分支: git branch -a, 发…...
sqlmap tamper脚本编写
文章目录 tamper脚本是什么?指定tamper脚本运行sqlmap安全狗绕过tamper脚本 tamper脚本是什么? SQLMap 是一款SQL注入神器,可以通过tamper 对注入payload 进行编码和变形,以达到绕过某些限制的目的。但是有些时候,SQLM…...
5.5V-65V Vin同步降压控制器,具有线路前馈SCT82630DHKR
描述: SCT82630是一款65V电压模式控制同步降压控制器,具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比,实现从48V输入到低压轨的直接降压转换,降低了系统复杂性和解决方案成本。如果需要,在低至6V的输…...
YOLOv5、YOLOv8改进:Decoupled Head解耦头
目录 1.Decoupled Head介绍 2.Yolov5加入Decoupled_Detect 2.1 DecoupledHead加入common.py中: 2.2 Decoupled_Detect加入yolo.py中: 2.3修改yolov5s_decoupled.yaml 1.Decoupled Head介绍 Decoupled Head是一种图像分割任务中常用的网络结构&#…...
Prometheus+Grafana可视化监控【Redis状态】
文章目录 一、安装Docker二、安装Redis数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装redis_exporter七、Grafana添加Redis监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docker,如果已…...
怒刷LeetCode的第6天(Java版)
目录 第一题 题目来源 题目内容 解决方法 方法一:哈希表 方法二:逐个判断字符 方法三:模拟减法 第二题 题目来源 题目内容 解决方法 方法一:水平扫描法 方法二:垂直扫描法 方法三:分治法 方…...
SSL双向认证-Nginx配置
SSL双向认证需要CA证书,开发过程可以利用自签CA证书进行调试验证。 自签CA证书生成过程:SSL双向认证-自签CA证书生成 Nginx配置适用于前端项目或前后端都通过Nginx转发的时候(此时可不配置后端启用双向认证) 1.Nginx配置&#…...
GO学习之 远程过程调用(RPC)
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...
八大排序(四)--------直接插入排序
本专栏内容为:八大排序汇总 通过本专栏的深入学习,你可以了解并掌握八大排序以及相关的排序算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:八大排序汇总 🚚代码仓库:小小unicorn的代码仓库…...
前端工程化:依赖管理最佳实践
前端工程化:依赖管理最佳实践 前言 依赖管理是前端工程化的基础!如果你的项目依赖管理混乱,那你的项目就像一个堆满杂物的仓库,难以维护。今天我就来给大家讲讲前端依赖管理的最佳实践。 为什么需要依赖管理 版本控制:…...
【领域驱动设计 开篇】零 来源及学习路径
DDD是什么 2003 年,Eric Evans 写了《领域驱动设计:软件核心复杂性应对之道》一书,正式提出了这种方法。领域驱动设计的英文是 Domain-Driven Design,简称 DDD。 按照作者自己的说法,“DDD 是一种开发复杂软件的方法”…...
蓝牙技术与FPGA实现:原理、优化与实践
1. 蓝牙技术基础与核心原理蓝牙技术自1994年由爱立信首次提出以来,已成为短距离无线通信领域的事实标准。这项技术之所以能在众多无线方案中脱颖而出,关键在于其独特的物理层设计和灵活的协议架构。1.1 2.4GHz ISM频段特性蓝牙工作在2.4GHz工业、科学和医…...
为什么电路中的阻抗需要引入复数?
1、方便计算说法▼无他,就是图个方便计算而已。请看下题,求如图所示电路中电流的大小。电流的频率与电压频率相同,无非就是求解幅值的变化和相位的变化。▼引用一下以前我的一个知乎回答,数学中的数先是从一维数轴开始。▼因电路的…...
机器学习在非洲公共卫生疾病预测中的实战应用与技术解析
1. 项目概述:当AI遇见非洲公共卫生在非洲大陆,公共卫生系统长期面临着资源不均、基础设施薄弱和疾病负担沉重的多重挑战。传统的疾病监测依赖于被动报告和人工数据分析,往往存在滞后性,当疫情警报拉响时,病毒可能已经悄…...
ARM Trace单元架构与TRCVICTLR寄存器详解
1. ARM Trace单元架构概述在嵌入式系统开发领域,调试能力往往决定了问题定位的效率和质量。ARM架构提供的Trace单元(Embedded Trace Macrocell, ETM)作为处理器指令执行流追踪的核心组件,已经成为现代SoC调试基础设施的重要组成部…...
SingleFile:一站式网页归档解决方案,让网页永久保存不再是难题
SingleFile:一站式网页归档解决方案,让网页永久保存不再是难题 【免费下载链接】SingleFile Web Extension for saving a faithful copy of a complete web page in a single HTML file 项目地址: https://gitcode.com/gh_mirrors/si/SingleFile …...
终极Zotero插件管理指南:如何一键安装数百个学术研究工具
终极Zotero插件管理指南:如何一键安装数百个学术研究工具 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons …...
AI浪潮下光纤需求爆发,康宁如何从玻璃厂变身光纤之王?
AI光纤需求爆发,英伟达加速布局根据CRU,AI数据中心的光纤需求一年增长75.9%,供需缺口从6%撕开到15%,光纤价格更是在数月间涨超3倍。产能跟不上了,这就是为什么英伟达要投资康宁并加速光纤产能扩张。两个月前࿰…...
Blender 3MF插件终极指南:如何实现3D打印工作流无缝对接
Blender 3MF插件终极指南:如何实现3D打印工作流无缝对接 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender 3MF插件是连接3D建模与3D打印制造的关键桥梁…...
