# 复杂驱动设计与集成指南 > **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 命名约定:`_` 或类似 - 文档使用 `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__.c # 主实现 Cdd___Cfg.c # 配置数据 ``` #### 6.3.2 头文件 ``` Cdd__.h # 公共 API Cdd___Cfg.h # 配置类型 Cdd___MemMap.h # 内存映射 Cdd___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__(/* args */); /* CDD 端实现 RTE 调用 */ Std_ReturnType Cdd__(/* 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 批量翻译*