307 lines
7.7 KiB
Markdown
307 lines
7.7 KiB
Markdown
# 复杂驱动设计与集成指南
|
||
|
||
> **AUTOSAR CP Release 4.4.0**
|
||
>
|
||
> 原文:*Complex Driver design and integration guideline*(文档 ID 622)
|
||
>
|
||
> 翻译状态:**已完成 v1**
|
||
>
|
||
> 对应原文 PDF:`BSWGeneral/AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.pdf`
|
||
|
||
---
|
||
|
||
## 文档标识
|
||
|
||
| 字段 | 值 |
|
||
|------|-----|
|
||
| 文档标题 | 复杂驱动设计与集成指南(Complex Driver design and integration guideline) |
|
||
| 文档标识号 | 622 |
|
||
| 文档状态 | 正式版(Final) |
|
||
| 所属标准 | Classic Platform |
|
||
| 所属版本 | 4.4.0 |
|
||
|
||
---
|
||
|
||
## 文档变更历史(节选)
|
||
|
||
| 日期 | 版本 | 变更说明 |
|
||
|------|------|----------|
|
||
| 2018-10-31 | 4.4.0 | 移除 4.1 和 7.3.2 章节的 SWS_EcuMfixed |
|
||
| 2016-11-30 | 4.3.0 | 新增与 StbM 模块的接口章节;更新模块 ID |
|
||
| 2015-07-31 | 4.2.2 | 更新 Default Error Tracer;接口的可重入性 |
|
||
| 2014-10-31 | 4.2.1 | 更新 TcpIp |
|
||
| 2014-03-31 | 4.1.3 | 更新 CDD 代码文件章节;移除变更文档章节 |
|
||
| 2013-03-15 | 4.1.1 | 初始发布 |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. 文档范围
|
||
2. 缩略语与简称
|
||
3. 使用的约定
|
||
4. 相关文档
|
||
5. CDD 介绍
|
||
6. CDD 设计建议
|
||
7. 与其他模块的接口
|
||
8. CDD 集成
|
||
|
||
---
|
||
|
||
## 1 文档范围
|
||
|
||
**复杂驱动(CDD, Complex Device Driver)** 是 AUTOSAR 架构中**最灵活**的 BSW 模块类型,用于实现:
|
||
- 高度硬件相关的功能
|
||
- 专有算法(如自定义加密、信号处理)
|
||
- 标准 AUTOSAR 栈未覆盖的功能
|
||
- 高性能要求的代码
|
||
|
||
CDD **可以**访问**所有**AUTOSAR 层,包括直接访问微控制器硬件。本文档提供 CDD 设计与 AUTOSAR 集成的指南。
|
||
|
||
---
|
||
|
||
## 2 缩略语与简称
|
||
|
||
| 缩略语 | 描述 |
|
||
|--------|------|
|
||
| CDD | Complex Device Driver(复杂驱动) |
|
||
| MCAL | Microcontroller Abstraction Layer |
|
||
| RTE | Runtime Environment |
|
||
| SW-C | Software Component(软件组件) |
|
||
| StbM | Synchronized Time-Base Manager(同步时基管理器) |
|
||
| TcpIp | TCP/IP Stack |
|
||
| EcuM | ECU State Manager |
|
||
| BswM | BSW Mode Manager |
|
||
| ComM | Communication Manager |
|
||
| Dem | Diagnostic Event Manager |
|
||
| Det | Default Error Tracer |
|
||
|
||
---
|
||
|
||
## 3 使用的约定
|
||
|
||
- CDD 命名约定:`<Vendor>_<Function>` 或类似
|
||
- 文档使用 `shall` 表示强制要求
|
||
|
||
---
|
||
|
||
## 4 相关文档
|
||
|
||
| 编号 | 名称 | 文件 |
|
||
|------|------|------|
|
||
| [1] | Layered Software Architecture | `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf` |
|
||
| [2] | General Specification of Basic Software Modules | `AUTOSAR_SWS_BSWGeneral.pdf` |
|
||
| [3] | General Requirements on Basic Software Modules | `AUTOSAR_SRS_BSWGeneral.pdf` |
|
||
| [4] | Specification of ECU State Manager | `AUTOSAR_SWS_ECUStateManager.pdf` |
|
||
| [5] | Specification of BSW Mode Manager | `AUTOSAR_SWS_BSWModeManager.pdf` |
|
||
| [6] | Specification of Default Error Tracer | `AUTOSAR_SWS_DefaultErrorTracer.pdf` |
|
||
| [7] | Specification of Synchronized Time-Base Manager | `AUTOSAR_SWS_SynchronizedTimeBaseManager.pdf` |
|
||
| [8] | Specification of TCP/IP Stack | `AUTOSAR_SWS_TcpIp.pdf` |
|
||
|
||
---
|
||
|
||
## 5 CDD 介绍
|
||
|
||
### 5.1 CDD 在 AUTOSAR 架构中的位置
|
||
|
||
CDD 是 BSW 的一部分,位于**复杂驱动层(Complex Driver Layer)**。它**可以**直接调用:
|
||
- **微控制器硬件**(绕过 MCAL)
|
||
- **MCAL**(标准外设驱动)
|
||
- **ECU 抽象层**
|
||
- **服务层**(OS、EcuM、ComM 等)
|
||
- **RTE**(与 SW-C 通信)
|
||
- **复杂驱动库**
|
||
|
||
### 5.2 CDD 的特殊性
|
||
|
||
| 特性 | 标准 BSW 模块 | CDD |
|
||
|------|-------------|-----|
|
||
| 由 AUTOSAR 规范 | ✅ 详细规范 | ❌ 仅指南 |
|
||
| 标准化 | ✅ 所有 ECU 一致 | ❌ 实现特定 |
|
||
| 可调用硬件 | 通过 MCAL | **可直接** |
|
||
| 性能 | 通用优化 | **可高度优化** |
|
||
| 可移植性 | 高 | **低**(与具体 ECU 耦合) |
|
||
| 复杂度 | 中等 | 可高 |
|
||
|
||
### 5.3 CDD 的典型用例
|
||
|
||
- 专用加密算法(如 OEM 专有的认证协议)
|
||
- 复杂信号处理(如音频 DSP 接口)
|
||
- 专有通信协议(OEM 自定义)
|
||
- 高精度定时控制(如发动机控制)
|
||
- 特殊传感器接口
|
||
|
||
---
|
||
|
||
## 6 CDD 设计建议
|
||
|
||
### 6.1 文档
|
||
|
||
#### 6.1.1 用户手册
|
||
|
||
CDD 应提供**用户手册**,包括:
|
||
- 功能描述
|
||
- API 文档
|
||
- 配置参数说明
|
||
- 集成步骤
|
||
- 限制和已知问题
|
||
|
||
### 6.2 实现
|
||
|
||
CDD 实现应:
|
||
- 遵循 `AUTOSAR_SWS_BSWGeneral` 中的通用规范
|
||
- 遵循 MISRA C 2012
|
||
- 使用编译器抽象(`Compiler.h`)
|
||
- 使用内存映射(`MemMap.h`)
|
||
- 包含版本检查
|
||
|
||
### 6.3 CDD 文件
|
||
|
||
#### 6.3.1 代码文件
|
||
|
||
```
|
||
Cdd_<Vendor>_<Name>.c # 主实现
|
||
Cdd_<Vendor>_<Name>_Cfg.c # 配置数据
|
||
```
|
||
|
||
#### 6.3.2 头文件
|
||
|
||
```
|
||
Cdd_<Vendor>_<Name>.h # 公共 API
|
||
Cdd_<Vendor>_<Name>_Cfg.h # 配置类型
|
||
Cdd_<Vendor>_<Name>_MemMap.h # 内存映射
|
||
Cdd_<Vendor>_<Name>_Version.h # 版本信息
|
||
```
|
||
|
||
#### 6.3.3 推荐的文件结构
|
||
|
||
| 文件 | 内容 |
|
||
|------|------|
|
||
| `.c` | 实现 + 静态变量定义 |
|
||
| `.h` | API 函数声明、类型定义、宏 |
|
||
| `_Cfg.c` | 配置数据数组 |
|
||
| `_Cfg.h` | 配置类型结构体定义 |
|
||
| `_MemMap.h` | 内存段映射(自动生成) |
|
||
| `_Version.h` | 版本宏 |
|
||
| `_Bswmd.arxml` | BSW 模块描述(XML) |
|
||
|
||
#### 6.3.4 一致性检查
|
||
|
||
CDD 应包含**版本检查**和**编译时检查**:
|
||
```c
|
||
#if (CDD_VENDOR_ID != EXPECTED_VENDOR_ID)
|
||
#error "CDD vendor ID mismatch"
|
||
#endif
|
||
```
|
||
|
||
### 6.4 行为和接口描述
|
||
|
||
CDD 应在 BSWMD 中声明:
|
||
- 提供/需要的接口
|
||
- 触发的事件
|
||
- 依赖的其他模块
|
||
- 内存映射段
|
||
|
||
### 6.5 参数配置
|
||
|
||
CDD 配置参数应在 BSWMD 中以 XML 形式声明。工具可基于 BSWMD 生成配置器 UI。
|
||
|
||
---
|
||
|
||
## 7 与其他模块的接口
|
||
|
||
### 7.1 与 RTE 和 SW-C 的接口
|
||
|
||
CDD 可以:
|
||
- 通过 RTE 与 SW-C 通信(**推荐**)
|
||
- 使用 RTE 的 sender-receiver、client-server 接口
|
||
|
||
**示例**:
|
||
```c
|
||
/* SW-C 端调用 CDD */
|
||
* Rte_Call_<Port>_<Operation>(/* args */);
|
||
|
||
/* CDD 端实现 RTE 调用 */
|
||
Std_ReturnType Cdd_<Vendor>_<Name>(/* RTE 生成的参数 */) {
|
||
/* 实现 */
|
||
}
|
||
```
|
||
|
||
### 7.2 与库的接口
|
||
|
||
CDD 可调用**复杂驱动库**(如 OEM 专有算法库)。
|
||
|
||
### 7.3 与标准 BSW 模块的接口
|
||
|
||
#### 7.3.1 与 MCAL 模块的接口
|
||
|
||
CDD 可调用 MCAL 驱动(`Mcu`、`Port`、`Dio`、`Adc` 等)。这**比直接访问硬件更可移植**。
|
||
|
||
#### 7.3.2 与 EcuM 的接口
|
||
|
||
CDD 可调用 EcuM API(如 `EcuM_GetState`),实现状态相关的行为。
|
||
|
||
#### 7.3.3 与 BswM 的接口
|
||
|
||
CDD 可调用 BswM API,**不推荐**直接实现 BswM 逻辑。
|
||
|
||
#### 7.3.4 与 OS 的接口
|
||
|
||
CDD 可调用 OS API(任务、事件、资源、计数器)。
|
||
|
||
#### 7.3.5 与 ComM 的接口
|
||
|
||
CDD 可调用 ComM API 监控通信状态。
|
||
|
||
#### 7.3.6 与 Dem 的接口
|
||
|
||
CDD 可调用 `Dem_ReportErrorStatus` 报告事件给 DEM。
|
||
|
||
#### 7.3.7 与 Det 的接口
|
||
|
||
CDD 可调用 `Det_ReportError` 报告开发错误。
|
||
|
||
#### 7.3.8 与 StbM 的接口
|
||
|
||
CDD 可调用 StbM API 访问同步时基。
|
||
|
||
#### 7.3.9 与 TcpIp 的接口
|
||
|
||
CDD 可调用 TcpIp API 实现网络通信。
|
||
|
||
---
|
||
|
||
## 8 CDD 集成
|
||
|
||
### 8.1 集成步骤
|
||
|
||
1. **生成**:从 BSWMD 生成配置器
|
||
2. **配置**:使用工具配置 CDD
|
||
3. **编译**:将 CDD 加入编译
|
||
4. **链接**:链接到 RTE 和 BSW
|
||
5. **测试**:单元测试、集成测试
|
||
|
||
### 8.2 集成检查清单
|
||
|
||
- [ ] CDD 的 BSWMD 完整
|
||
- [ ] 内存映射正确
|
||
- [ ] 配置参数生成正确
|
||
- [ ] 初始化顺序正确
|
||
- [ ] 与 OS 任务/中断集成正确
|
||
- [ ] 开发错误处理集成(Det)
|
||
- [ ] 运行时错误处理集成(Dem)
|
||
- [ ] 模式管理集成(BswM/ComM/EcuM)
|
||
- [ ] 测试覆盖完整
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
- 本文档为**指南性文档(EXP)**,提供 CDD 设计与集成的最佳实践
|
||
- CDD 是 AUTOSAR 中**最灵活**的 BSW 类型,可绕过标准架构直接访问硬件
|
||
- 设计 CDD 时应权衡灵活性与可维护性
|
||
|
||
---
|
||
|
||
*翻译:opencode-translator / Step 3 P0 批量翻译*
|