CAN Hardware Object分析
原创2025/6/20大约 5 分钟
CAN Hardware Object分析
在 AUTOSAR 系统中,CAN 模块是实现嵌入式通信的核心组件之一。为了高效、可靠地进行通信,AUTOSAR 定义了 Hardware Object 和 Mailbox 两个重要概念。它们在硬件资源管理和报文缓冲区配置方面扮演着不同的角色。本文将深入分析这两个概念的定义、作用,以及它们之间的区别。
1. CAN Hardware Object 与 Mailbox:基础概念
Hardware Object
在 AUTOSAR 中,Hardware Object
是 硬件层的抽象,代表了 CAN 控制器 中的一个 资源单元。它用于配置和管理 CAN 控制器的硬件资源,诸如 报文 ID 过滤器、报文优先级、硬件邮箱数量 等。这些配置决定了如何将 CAN 帧从硬件层传递到软件层。
Hardware Object
的作用:
- 硬件资源配置:配置
CanHwObject
时,你实际上是在配置如何使用 CAN 控制器内部的硬件资源,如 ID 过滤器、报文优先级、发送/接收缓冲区等。 - 资源管理:每个
Hardware Object
代表一个硬件资源单元,可以用于接收报文(Rx)或发送报文(Tx)。
配置内容:
CanObjectId
:表示硬件对象的 ID。CanHandleType
:定义对象是接收(RECEIVE
)还是发送(TRANSMIT
)报文。CanHwObjectCount
:配置该硬件对象使用的硬件资源数量(邮箱数)。CanHwFilterCode
和CanHwFilterMask
:定义接收报文时使用的硬件过滤器,通过过滤器确定哪些 CAN ID 可以被接收。
示例配置(Hardware Object
):
<CanHardwareObject>
<CanObjectId>0</CanObjectId>
<CanHandleType>BASIC</CanHandleType>
<CanObjectType>RECEIVE</CanObjectType>
<CanHwObjectCount>3</CanHwObjectCount> <!-- 最大缓存 3 个报文 -->
<CanHwFilterCode>0x123</CanHwFilterCode>
<CanHwFilterMask>0x7FF</CanHwFilterMask>
</CanHardwareObject>
- 作用:该配置表示一个接收对象,该对象能处理最多 3 个报文,且仅接收 ID 为
0x123
的报文。
Mailbox
Mailbox(邮箱)是 软件层面的数据存储单元,它用于暂存待发送或待接收的 CAN 报文。每个 Mailbox 是一个 缓冲区,用于在硬件和上层应用之间传递报文数据。每个 Mailbox 通常与 一个报文的发送或接收操作 相关联,并作为数据存储区域与 CAN 控制器交换报文。
配置内容:
Mailbox
是软硬件接口,负责缓存 CAN 数据并将其传递到上层协议(如Com
模块、PduR
模块)。
示例配置(Mailbox
):
<CanHardwareObject>
<CanObjectId>1</CanObjectId>
<CanHandleType>FULL</CanHandleType>
<CanObjectType>TRANSMIT</CanObjectType>
<CanHwObjectCount>1</CanHwObjectCount>
</CanHardwareObject>
- 作用:该配置表示该
Mailbox
对象用于发送报文,并且为其分配了一个硬件邮箱,能够独立处理一个报文。
2. Hardware Object 与 Mailbox 的区别
特性 | Hardware Object | Mailbox |
---|---|---|
概念层次 | 硬件资源抽象层,用于配置硬件层资源(如 CAN 控制器) | 软件层次的数据存储单元,用于缓存报文 |
功能 | 配置和管理硬件层资源,如 ID 过滤、优先级、硬件邮箱数量 | 存储报文,提供软硬件交互的缓冲区 |
数量 | 通常配置一个或多个对象,决定硬件资源的数量 | 每个 Mailbox 对应一个报文的存储缓冲区 |
配置内容 | 配置 ID 过滤、报文优先级、硬件邮箱等 | 配置发送接收缓冲区大小、存储空间等 |
硬件/软件关系 | 直接与硬件寄存器和资源绑定 | 是软件层与硬件之间的接口,负责数据存取 |
适用层级 | 硬件层 | 软件层 |
2.1 Hardware Object
的作用
Hardware Object
是 AUTOSAR 中用于配置和管理硬件资源的关键模块。它与 CAN 控制器硬件直接关联,负责处理与 CAN 总线交互的底层配置,例如:
- 报文 ID 过滤器:
CanHwFilterCode
和CanHwFilterMask
配置硬件过滤规则,决定哪些报文被接收; - 报文优先级:通过配置不同
CanObjectId
来实现报文优先级的调度; - 硬件邮箱数量:
CanHwObjectCount
定义了每个Hardware Object
对应的硬件邮箱数量,影响缓存能力。
2.2 Mailbox
的作用
Mailbox
是软件层面用于存储报文的缓存区域。它将 接收到的报文 或 待发送的报文 保存在内存中,负责数据与 CAN 控制器的交互。Mailbox
是软硬件之间的桥梁,向上层应用提供可操作的数据。
3. BASIC 与 FULL 类型的 CanHwObjectCount
配置差异
配置项 | FULL 类型 | BASIC 类型 |
---|---|---|
CanHwObjectCount 含义 | 每个对象配置独立的硬件邮箱(每个邮箱独占) | 配置共享 FIFO 队列的深度,多个对象共享 FIFO |
硬件资源使用 | 每个对象独占硬件邮箱,资源消耗大 | 多个对象共享一个硬件资源,资源消耗较少 |
并发处理能力 | 支持并发处理多个报文,每个对象独立 | 不支持并发处理,FIFO 队列排队处理报文 |
适用场景 | 高优先级报文、诊断响应、多帧报文 | 适用于周期性报文、低优先级报文、大量数据接收 |
配置灵活性 | 每个对象配置独立的硬件资源,配置灵活 | 配置简单,适合批量处理多个报文 |
4. 总结
- Hardware Object 是 硬件层的抽象,负责配置和管理 CAN 控制器的底层资源,如报文 ID 过滤、报文优先级、硬件邮箱数量等;
- Mailbox 是 软件层的缓冲区,用于存储接收或待发送的 CAN 报文,并通过
CanIf
与硬件交互; - BASIC 类型 的
CanHwObjectCount
用于配置共享 FIFO 队列的深度,多个对象共享同一 FIFO; - FULL 类型 的
CanHwObjectCount
用于配置每个对象独占的硬件邮箱,每个报文可以独立处理。
通过合理配置 Hardware Object
和 Mailbox
,可以有效管理 CAN 总线的通信流量,确保系统的高效、稳定运行。