• 【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 结尾

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

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

  • 相关阅读:
    .net core Elasticsearch 更新文档,updatebyquery
    为什么寒冷容易诱发痛风?
    javascript: Sorting Algorithms
    springbooy求职招聘网站毕业设计-附源码301914
    mysql分区
    如何在ownCloud/NextCloud/丰盘ECM等免费企业网盘集成在线Office?
    如何从无法开机的手机中恢复数据?4个解决方案解决了
    json、jquery、ajax
    网络安全实战攻防演练应急处置预案
    【深度学习笔记】9_5 多尺度目标检测
  • 原文地址:https://blog.csdn.net/qfmzhu/article/details/126754519