当前位置: 首页 > news >正文

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

点击返回「《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 结尾

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

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

相关文章:

  • 【零基础学QT】第七章 网络通信,TCP、UDP通信实验
  • 一次解释器模式的实际使用
  • C++入门·收尾
  • 25.CF992E Nastya and King-Shamans 转化+线段树二分
  • 快来带您了解中秋节的前世今生
  • 分布式锁之防止超卖 --mysql原子操作,乐观锁,redis事务,乐观锁
  • 【算法刷题】第一篇——哈希
  • 小脚本杂文shell脚本
  • 网络热的查询易语言代码
  • 医美健康这类在医疗行业的推广要怎么做?
  • uni-app开发,防止踩坑
  • mac M1 安装AndroidStudio打开真机调试
  • 备战数学建模40-遗传算法优化bp神经网络(攻坚站4)
  • 解决Java使用response下载文件报错,并总结可能出错的原因: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
  • C# .Net AOP 演进历史POP OOP 代码细节篇
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • HTML5新特性总结
  • js作用域和this的理解
  • LeetCode29.两数相除 JavaScript
  • orm2 中文文档 3.1 模型属性
  • Promise面试题2实现异步串行执行
  • Quartz初级教程
  • Redux 中间件分析
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 代理模式
  • 简单易用的leetcode开发测试工具(npm)
  • 前言-如何学习区块链
  • 区块链技术特点之去中心化特性
  • 使用SAX解析XML
  • 树莓派 - 使用须知
  • 王永庆:技术创新改变教育未来
  • 怎样选择前端框架
  • elasticsearch-head插件安装
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • !$boo在php中什么意思,php前戏
  • #{}和${}的区别?
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)fiber的基本认识
  • (七)Knockout 创建自定义绑定
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .md即markdown文件的基本常用编写语法
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net打印*三角形
  • [asp.net core]project.json(2)
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [C++] new和delete
  • [DAX] MAX函数 | MAXX函数
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [HDU5685]Problem A
  • [hive小技巧]同一份数据多种处理
  • [JavaEE]线程的状态与安全