【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系

article/2025/10/11 12:26:23

点击返回「《Autosar_MCAL高阶配置》总目录」

目录

1 关键字定义

2 Maibox与Hardware Object之间的关系

2.1 接收L-PDU

2.2 发送L-PDU

3 HOH,HRH,HTH,Hardware Object之间的关系

4 Message buffer(MB)结构

5 结尾


1 关键字定义

Mailbox邮箱

软件硬件之间传递(接收/发送Message)报文的接口。其包含了所有跟Message报文有关的信息:标识符、数据、控制、状态和时间戳信息。

Hardware Object / HW Object硬件对象

一个CAN Hardware Object被定义为CAN Hardware Unit / CAN controller的CAN RAM内的PDU buffer。Hardware Object被定义为CAN Hardware Unit的CAN RAM内的L-PDU buffer。一个Hardware Object包含若干个Message Buffer(MB);而Hareware ObjectHRH/HTH是一一对应。

HOHHardware Object Handle硬件对象句柄:

用于发送 (HTH) 和用于接收 (HRH) 的hardware object handle (HOH) 表示对CAN mailbox(Hardware Object)结构的抽象引用,其中包含CAN相关参数,例如CanId、DLC 和Data。

CanIf使用两种类型的HOH来对Can Driver的访问:hardware transmit handle (HTH) 和hardware receive handle (HRH)。

HRHHardware Receive Handle硬件接收句柄

HRH由CAN Driver定义和提供。每个HRH通常仅代表一个Hardware Object。HRH可用于优化software filter。HRH 应是一个引用CAN controller mailbox的一个logical Hardware Receive Object的Handle。

HTHHardware Transmit Handle硬件发送句柄:

HTH由CAN Driver定义和提供。每个HTH通常仅代表一个或多个配置为hardware transmit buffer pool的Hardware Object。HTH 应是一个引用CAN controller mailbox的一个logical Hardware Transmit Object的Handle。

Mailbox、Hardware Object、HOH、HRH、HTH之间的关系如下所示:

图 PDU Id和HOH之间的映射

注意:

Outlet range = 将通过的 Rx L-PDU 范围

Maibox = CAN RAM结构

HW Object = CAN RAM 结构,包含 (CanId,DLC,data)

HRH = 对 CAN RAM 结构的抽象引用

Transmit path为红色。

Receive path为绿色。

2 Maibox与Hardware Object之间的关系

Mailbox由一组message buffer(MB)组成,这些Buffer存储配置,以及接收/发送的control data、time stamp时间戳、message ID和data的信息。而一个Hardware Object包含若干个message buffer(MB)

有时也会Mailbox进行编号,通常和Hardware Object一一对应,当你在工具中配置Hardware Object时,其实就是在配置Mailbox

/Can/CanConfigSet/CanHardwareObjects/RX_HOH_FullCAN路径下的参数CanObjectId表示Mailbox Handle(也是HRHHTH的Handle ID,此参数的值在给定的CAN Driver中是唯一的,它应该从 0开始并继续没有任何间隙)。

2.1 接收L-PDU

在L-PDU接收时,CAN Driver模块将调用CanIf模块的RX指示回调函数CanIf_RxIndication,参数Mailbox中带有ID,Hoh(HRH/参数CanObjectId),ControllerId,参数PduInfoPtr中的Data Length和指向L-SDU buffer的指针。

void CanIf_RxIndication( const Can_HwType* Mailbox, const PduInfoType* PduInfoPtr)

Name:

Can_HwType

Type:

Structure

Element:

Can_IdType

CanId

CAN L-PDU的Standard/Extended CAN ID

Can_HwHandleType

Hoh

对应Hardware Object Range的ID

uint8

ControllerId

CanIf提供的ControllerId明确标识对应的controller

Description:

这种类型定义了一个数据结构,它清楚地提供了一个HOH,包括其相应的CAN controller,因此还有CanDrv以及特定的CanId。

Name:

Can_HwHandleType

Type:

uint8, uint16

Range:

Standard

--

0..0x0FF

Extended

--

0..0xFFFF

Description:

表示CAN Hardware Unit的HOH。对于具有超过255个Hardware Object的CAN Hardware Unit,使用扩展范围。

2.2 发送L-PDU

在L-PDU发送时,CanIf模块通过服务CanIf_Transmit()请求发送,调用CAN Driver模块的服务Can_Write(),将 TxPduId映射到对应的HTH(参数CanObjectId)。

Std_ReturnType Can_Write( Can_HwHandleType Hth, const Can_PduType* PduInfo)

3 HOH,HRH,HTH,Hardware Object之间的关系

CanIf模块不能直接访问硬件,独立于硬件,这允许从使用HOH实现上层(CanIf模块)与CAN controller进行透明且独立于硬件的访问。

用于发送 (HTH) 和用于接收 (HRH) 的hardware object handle (HOH) 表示CAN mailbox(Hardware Object)结构抽象引用Hareware ObjectHRH/HTH是一一对应,其中包含CAN相关参数,例如 CanId、DLC和Data。基于CAN hardware buffer abstraction,在CanIf中引用每个Hardware object,独立于CAN hardware buffer layout。HOH 在 Can Driver的接口服务调用中用作参数,由Can Driver的配置提供,并被Can Driver 用作 CAN mailbox(Hardware Object)的communication buffer的标识符。

 将HTH和HRH分配给Hardware Object的示例

 使用multiplexed transmission(多路复用发送)将HTH和HRH分配给Hardware Object的示例

 将相同的HRH分配给多个Hardware Object的示例

/CanIf/CanIfInitCfg/CanIfInitHohCfgs/CanIfInitHohCfg路径下的CanIfHrhCfgsCanIfHthCfgs中,分别通过参数CanIfHrhIdSymRefCanIfHthIdSymRef引用CanHardwareObjects中的Hardware Object。

注:在容器CanIfHthCfgCanIfHrhCfg中派生的所有HOH。

而Hardware Object中通过参数CanObjectType指定该HardwareObject是用作Transmit Object还是Receive Object。

4 Message buffer(MB)结构

S32K系列芯片为例。FlexCAN模块使用的Message Buffer(MB)结构如下图所示(下图64字节有效负载的示例)。CAN规范(2.0版B部分)中使用的扩展(29位标识符)和标准(11位标识符)帧均被表示。每个单独的MB16244072个字节组成,具体取决于为消息有效负载分配的数据字节数:分别为8163264个数据字节

Mailbox使用从0x80到0x27F的内存区域(512个Byte)。启用CAN FD时,每个MB的确切地址取决于其有效负载的大小。(有关FlexCAN内存分区,参见“【MCAL_CANDriver】-1.1-收发Hardware Buffer数量的限制以及基本概念梳理https://blog.csdn.net/qfmzhu/article/details/126731168”博文的第2.2章节)。

FlexCAN模块是一个CAN protocol engine,具有非常灵活的Mailbox系统,用于发送和接收CAN帧。对于经典CAN帧,支持通过FIFOMailbox同时接收。对于CAN FD帧,仅支持通过Mailbox接收

5 结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注“汽车电子助手”,做您的好助手。


http://chatgpt.dhexx.cn/article/WQLhfVBx.shtml

相关文章

图解AUTOSAR(五)——微控制器抽象层(MCAL)

微控制器抽象层位于AUTOSAR分层模型中BSW最底层,包含内部驱动,可以直接访问微控制器和片内外设。更进一步地,MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块…

MCAL架构

MCAL位于AUTOSAR软件架构中基本软件(BSW)的底层,是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件(如ECU抽象层、系统服务层等)独立于MCU硬件平台,保证上层软件的标准化和通用性。…

AutoSar之微控制器抽象层MCAL

微控制器抽象层位于AUTOSAR BSW的最底层,包含内部驱动,可直接访问微控制器和外设芯片。从具体应用来看,MCAL主要包括微控制器驱动、存储器驱动、通信驱动和输入输出驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组…

MCAL介绍及Module Plugin开发流程总结

Mcal–微控制器抽象层位于AUTOSAR分层模型中BSW最底层,包含内部驱动,可以直接访问微控制器和片内外设。 MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组成。如图所示…

Autosar MCAL软件架构基本概念

MCAL架构介绍 Autosar整体架构图如下所示: MCAL是MicroController Abstraction Layer(微控制器抽象层)的缩写。如下图所示,MCAL位于AUTOSAR软件架构中基本软件(Basic Software,BSW)的底层&…

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT&…

Object数据转map类型

最近 因为调用接口 返回数据 原本项目中是用List<Map<String, Object>> a 接收的 等于说我只能获取到 Map m1 a.get(0); 到第一层的数据 m1.get(“HttpCode”)的数据 然后就是objcet的数据了 无法直接获取到 之前在网上找了好多 什么直接转成jsonObject因为格式的…

Javascript Object和Map之间的转换

简单的区分Map和Object Map是ES6退出的一个类型&#xff0c;特点&#xff1a;任何值都可作为属性名 Object特点&#xff1a;属性名只能是字符串(一开始我也不信&#xff0c;测试后才发现的) 代码图片 创建一个map类型 new Map([[key, value],[key1, value1] ])简单的介绍下面…

Object 转Map,Map转Object方式总结

商品业务对象定义&#xff1a;Product Product product new Product(); product.setId(1L); product.setName("爱他美") product.setProductDt("2022-03-16") 第一种&#xff1a;通过Alibaba Fastjson实现&#xff1a; pom.xml 文件依赖 <dependen…

使用PyQt打包命令pyinstall的几个问题

**问题1&#xff1a;**打包后无demo.spec文件 在windows下使用cmd界面打包时&#xff0c;可以将路径设置到目标文件目录&#xff0c;这样会生成demo.spec文件&#xff0c;方便后期改正软件。 问题2&#xff1a;打包好后提示如下错误&#xff1a; 解决办法&#xff1a;在demo.…

PyCharm打包失败及Pyinstall无法安装问题的解决

问题描述 Python的工程很多情况下需要打包成EXE文件&#xff0c;通过pyinstaller的工具进行打包&#xff0c;首先需 要安装PyInstaller的工具&#xff0c;然后再通过命令行进行打包&#xff0c;安装 PyInstaller 模块与安装其他 Python 模块一样&#xff0c;使用 pip 命令安装…

pyinstall 打包python3.7.1的exe反编译

pyinstall 打包python3.7.1的exe反编译 由于 pyinstall打包的EXE文件&#xff0c;被360认为可能有木马病毒&#xff0c;首先怀疑计算数机系统有毒。用360杀毒&#xff0c;病毒倒是查处了十几个&#xff0c;对于一个对计算机不是十分精通的人来说&#xff0c;只能按360的提示去做…

pyinstall打包多个.py文件成应用程序

Pyinstall打包多个.py文件成应用程序的方法&#xff1a; 这里成功打包了两个.py文件&#xff0c;一张图片&#xff0c;一个.h5文件 如图所示&#xff1a; 第一步&#xff1a;生成.spec文件 pyinstaller -c -D main.py -p image_handler.py这里main.py文件是主文件&#xff0…

解决python3.6中pyinstall打包失败的问题

环境&#xff1a;python 3.6 pyinstall 一开始用百度上的方法&#xff0c;直接执行python目录下的pyinstall.exe文件&#xff0c;很好用。 C:\WINDOWS\System32>C:\Users\hasee\AppData\Local\Programs\Python\Python36\Scripts\pyinstaller.exe F:\python_code_test\ren…

pyqt5 +pyinstall打造属于自己的桌面版程序(学习阶段)

网上关于pyqt5的教程特别少,终于东拼西凑,做出一点东西出来,很简单的小应用,便于上手学习。 pyqt5的主文件代码如下,代码特别多,也没怎么细分。大家可以参考下。github地址 pyinstall打包的一点小技巧送给大家。 取消生成程序doc窗口使用命令pyinstaller -F -i 图标路径 …

tkinter - 使用Pyinstall进行打包封装

1 需要安装 PyInstaller C:\Users\30818> pip install pyinstaller 2 将模块py文件打包成pyd 防止反编译暴露源代码 pyd是一个模块插件 可以通过 Import 来引入pyd文件 直接编译会提示二进制读取错误 2-1 安装cython pip install cython 2-2 在当前目录创建一个 set…

【踩坑日记(一)】: Pyinstall 打包.py文件 生成exe可执行文件

文章目录 Pyinstall 打包.py文件 生成exe可执行文件如何入坑&出坑Analysis 实例其他实例常用参数参考文档&#xff1a;Pyinstall 官方手册 Pyinstall 打包.py文件 生成exe可执行文件 原本认为很轻松的事情&#xff0c;结果花了近2个小时才搞定&#xff0c;值得记录下踩的坑…

Ubuntu 16.04 安装 Pyinstall

Ubuntu 16.04 安装 Pyinstall 预装环境 python3 version&#xff1a;3.5pip version&#xff1a;8.1 报错如下&#xff1a; 首先直接安装 pyinstall 报错&#xff0c;pip 版本过低&#xff0c;要升级版本使用 提供的命令升级 pip&#xff0c;但是开始套娃&#xff0c;一直循…

pyinstall 打包报错

关于使用pyinstaller 打包报错 我的python安装位置为 安装位置/usr/local/python3 关于我的报错环境属于linux 我的pyinstaller 是使用pip 安装的 pip install pyinstaller 在使用pycharm 打包的时候,报错 打包就告诉我缺少什么 关于python的 iso包 我当时有全磁盘搜索该文…

pyinstall exe打包详解

在学习和工作之中&#xff0c;想制作一些小工具&#xff0c;用python秃了一个晚上&#xff0c;拿到公司&#xff0c;发现要安装python才能用&#xff0c;看别人的博客看不懂&#xff0c;别急&#xff0c;一篇搞定。 一、pyinstaller安装 pyinstaller 是一个python库&#xff0…