# I/O 硬件抽象规范(Specification of I/O Hardware Abstraction) > **AUTOSAR CP Release 4.4.0** ## 文档元信息 | 字段 | 内容 | |---|---| | **文档标题** | I/O 硬件抽象规范(Specification of I/O Hardware Abstraction) | | **文档所有者** | AUTOSAR | | **文档责任方** | AUTOSAR | | **文档标识号** | 047 | | **文档状态** | Final(最终版) | | **所属 AUTOSAR 标准** | Classic Platform(经典平台) | | **所属标准版本** | 4.4.0 | ## 文档变更历史(Document Change History) | 日期 | 版本 | 变更人 | 变更描述 | |---|---|---|---| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 移除了调试章节 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 细微修正/澄清/编辑性变更 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 更新 IoHwAb_Init 函数原型 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 调整需求格式 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更;移除了关于变更文档的章节 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 修改 GET 和 SET 操作;扩展了由"生产错误"工作组推荐的生产错误;为 OCU 驱动定义通知函数 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 更新版本检查需求 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 修正了回调通知 API 的名称;使用底层模块的导出文件 `.h`,而不是 `_Types.h` | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 从 EcucParamDef 中删除了 I/O 硬件抽象配置;新增"功能诊断"接口(DCM 控制 I/O 信号);删除了不必要的类、属性和类型;法律声明修订 | | 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 | | 2007-12-21 | 3.0.1 | AUTOSAR Administration | 使用 Metamodel 自动生成第 8 章和第 10 章;更新表和某些章节以保持与相关文档一致;扩展了文档元信息;小幅布局调整 | | 2007-01-24 | 2.1.15 | AUTOSAR Administration | 在 PDF 版本中更正了各种图像(打印问题) | | 2006-11-28 | 2.1.14 | AUTOSAR Administration | 文件结构更新;可追溯性矩阵更正;对 SWC 模板使用的限制;IOHWAB Runnable 概念章节返工;IOHWAB 描述章节返工;配置章节调整;法律声明修订;新增发布说明;"用户建议"修订;新增"修订信息" | | 2006-05-16 | 2.0 | AUTOSAR Administration | 初始发布 | --- ## 目录(Table of Contents) 1. [引言与功能概述(Introduction and functional overview)](#1-引言与功能概述) 2. [缩略语与缩写(Acronyms and abbreviations)](#2-缩略语与缩写) 3. [相关文档(Related documentation)](#3-相关文档) 4. [约束与假设(Constraints and assumptions)](#4-约束与假设) 5. [对其他模块的依赖(Dependencies to other modules)](#5-对其他模块的依赖) 6. [需求可追溯性(Requirements traceability)](#6-需求可追溯性) 7. [功能规范(Functional specification)](#7-功能规范) 8. [API 规范(API specification)](#8-api-规范) 9. [序列图(Sequence diagrams)](#9-序列图) 10. [配置规范(Configuration specification)](#10-配置规范) 11. [不适用需求(Not applicable requirements)](#11-不适用需求) --- ## 1 引言与功能概述(Introduction and functional overview) 本规范规定了 AUTOSAR 基础软件 I/O 硬件抽象的功能和配置。I/O 硬件抽象是 ECU 抽象层的一部分。 I/O 硬件抽象不应被视为单个模块,因为它可以实现为多个模块。本 I/O 硬件抽象规范不旨在标准化此模块或模块组。相反,它是关于实现其与其他模块的功能接口的指南。 I/O 硬件抽象的目标是通过将 I/O 硬件抽象端口映射到 ECU 信号来提供对 MCAL 驱动的访问。提供给软件组件的数据完全从物理层值抽象出来。因此,软件组件设计者不再需要详细了解 MCAL 驱动的 API 和物理层值的单位。 I/O 硬件抽象始终是 ECU 特定的实现,因为软件组件对基础软件的要求必须适合特定 MCAL 实现的特性。 I/O 硬件抽象应提供初始化整个 I/O 硬件抽象的服务。 **本文档的目的是:** - 确定在定义 I/O 硬件抽象时应使用软件组件模板的哪个部分 - 解释定义通用端口(ECU 信号映射到的位置)的方法 **本文档的目的不是:** - 提供 C-API - 为每个 ECU 信号提供特定的格式化,就像通过功能数据的标准化所做的那样(车身域、动力总成、底盘域) --- ## 2 缩略语与缩写(Acronyms and abbreviations) > **摘要说明:** 本节定义了 I/O 硬件抽象相关的所有缩略语和术语。主要缩写包括 ADC、DIO、ICU、PWM、OCU、GPT、SPI、PORT、ECU、EcuM、RTE、DCM 等(详见原文 PDF 第 8-10 页)。 --- ## 3 相关文档(Related documentation) ### 3.1 输入文档(Input documents) > **摘要说明:** 本节列出了 I/O 硬件抽象规范相关的输入文档,包括: > > - **[1]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf > - **[2]** I/O 硬件抽象需求,AUTOSAR_SRS_IOHWAbstraction.pdf > - **[3]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf > - **[4]** 通用 BSW 模块规范,AUTOSAR_SWS_BSWGeneral.pdf > - **[5]** 默认错误跟踪器规范,AUTOSAR_SWS_DefaultErrorTracer.pdf > - **[6]** 基础软件模块描述模板,AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf > - **[7]** ECU 配置规范,AUTOSAR_TPS_ECUConfiguration.pdf > - **[8]** 软件组件模板,AUTOSAR_TPS_SoftwareComponentTemplate.pdf > - **[9]** 元模型,AUTOSAR_MMOD_MetaModel.pdf > > *完整列表见原文 PDF(第 10-11 页)。* ### 3.2 相关标准与规范(Related standards and norms) 无相关外部标准。 ### 3.3 相关规范(Related specification) AUTOSAR 提供了基础软件模块的通用规范([SWS BSW General]),这也适用于 I/O 硬件抽象。因此,SWS BSW General 规范应被视为 I/O 硬件抽象的附加和必需规范。 --- ## 4 约束与假设(Constraints and assumptions) ### 4.1 限制(Limitations) 无限制。 ### 4.2 对汽车领域的适用性(Applicability to car domains) 无限制。 --- ## 5 对其他模块的依赖(Dependencies to other modules) ### 5.1 与 MCAL 驱动程序的接口(Interface with MCAL drivers) #### 5.1.1 概述(Overview) I/O 硬件抽象通过 MCAL 驱动访问 MCU 的外设。MCAL 驱动实现一组标准化的 API,允许 ECU 抽象层和 I/O 硬件抽象访问 MCU 外设。 I/O 硬件抽象还可以通过 SPI/通信驱动程序访问 ECU 板载设备(外部 ASIC、传感器等)。在下层,I/O 硬件抽象使用 MCAL 驱动程序(DIO、PWM、ICU、ADC 等)通过标准 API 访问外设。 #### 5.1.2 与 MCAL 驱动程序的接口总结(Summary of interfaces with MCAL drivers) > **摘要说明:** 下表总结了 I/O 硬件抽象与 MCAL 驱动程序之间的接口: > > | MCAL 驱动 | 用途 | > |---|---| > | ADC | 模拟输入读取、组转换、通知回调 | > | DIO | 数字输入/输出、端口读取/写入、通道组操作 | > | GPT | 通用定时器、通知回调 | > | ICU | 边沿检测、信号测量、通知回调 | > | OCU | 输出比较、阈值设置、通知回调 | > | PWM | PWM 信号生成、占空比设置、通知回调 | > | PORT | 引脚方向控制、引脚模式配置 | > | SPI | 通过 SPI 总线访问外部 ASIC | ### 5.2 与通信驱动程序的接口(Interface with the communication drivers) I/O 硬件抽象可能需要通过 SPI 或其他通信驱动程序访问 ECU 板载设备。在这种情况下,I/O 硬件抽象充当 SPI 客户端并处理异步通信结果。 ### 5.3 与系统服务的接口(Interface with System Services) I/O 硬件抽象通过 EcuM 调用其 Init 函数(IoHwAb_Init)。IoHwAb 还需要 BswM(基础软件模式管理器)进行模式管理。 ### 5.4 与 DCM 的接口(Interface with DCM) I/O 硬件抽象向 DCM 模块提供接口,以实现"软件组件的功能诊断"。DCM 模块可以通过该接口控制和读取每个已实现的 ECU 信号。这由以下函数实现: - `IoHwAb_Dcm_` - 控制 ECU 信号 - `IoHwAb_Dcm_Read` - 读取 ECU 信号 控制信号的动作包括: - `IOHWAB_RETURNCONTROLTOECU`:解锁信号 - `IOHWAB_RESETTODEFAULT`:锁定信号并将其设置为已配置的默认值 - `IOHWAB_FREEZECURRENTSTATE`:锁定信号到当前值 - `IOHWAB_SHORTTERMADJUSTMENT`:锁定信号并将其调整为 DCM 模块给定的值 ### 5.5 文件结构(File structure) #### 5.5.1 代码文件结构(Code file structure) **[SWS_IoHwAb_00099]** ⌈代码文件结构不应在本规范中完全定义。应指出代码文件结构应包括用于后构建配置的 IoHwAb_PBcfg.c。⌋ #### 5.5.2 头文件结构(Header file structure) **[SWS_IoHwAb_00100]** ⌈IoHwAb.c 应包含 IoHwAb.h 和 Det.h。⌋ --- ## 6 需求可追溯性(Requirements traceability) > **摘要说明:** 本节列出 I/O 硬件抽象需求与实现需求的对应关系。完整可追溯性表见原文 PDF(第 18-22 页)。 > > 主要需求映射: > > - **SWS_IoHwAb_00002、00007-00011**(信号属性、范围、分辨率、同步、生命周期、延迟、滤波、采样率、变化报告、脉冲测试) > - **SWS_IoHwAb_00021-00023**(诊断功能:短路、开路、过载、过温检测) > - **SWS_IoHwAb_00059-00061**(Init 函数) > - **SWS_IoHwAb_00081-00097**(SW-C 模板使用) > - **SWS_IoHwAb_00102-00107**(回调通知) > - **SWS_IoHwAb_00108-00114**(调度概念) > - **SWS_IoHwAb_00119-00120**(Init 和 GetVersionInfo API) > - **SWS_IoHwAb_00121-00124、00155-00156**(ADC、PWM、ICU、GPT、OCU 通知回调) > - **SWS_IoHwAb_00135-00144**(DCM 诊断接口) > - **SWS_IoHwAb_00146-00147**(电源状态准备与进入) > - **SWS_IoHwAb_00154**(ADC 电源状态通知) > - **SWS_IoHwAb_00157-00158**(配置类型) --- ## 7 功能规范(Functional specification) ### 7.1 集成代码(Integration code) #### 7.1.1 背景与原理(Background & Rationale) 集成代码是 I/O 硬件抽象层的一部分,用于将 MCAL 驱动程序调用与软件组件的接口(端口)粘合在一起。集成代码的主要作用是: - 将 ECU 信号映射到底层 MCAL 通道 - 实现属性转换(范围、分辨率、生命周期、延迟、滤波、采样率) - 处理同步、变化报告、脉冲测试等高级功能 - 提供诊断信息 - 实现电源状态管理 #### 7.1.2 集成代码实现的需求(Requirements for integration code implementation) > **摘要说明:** 集成代码实现应遵循: > - ECU 信号应在配置时映射到 MCAL 通道 > - 属性转换应在集成代码中实现,而不是 MCAL 驱动中 > - 集成代码应负责信号缓冲、去抖、滤波等 > - 集成代码应支持同步和异步数据采集 > - 集成代码应将检测到的故障传递给 DEM ### 7.2 ECU 信号概念(ECU Signals Concept) #### 7.2.1 背景与原理(Background & Rationale) ECU 信号是软件组件与 I/O 硬件抽象层交换数据的单位。每个 ECU 信号: - 由符号名称标识 - 具有数据类型(电压、电流、电阻、布尔、占空比等) - 具有范围(最小值、最大值) - 具有分辨率(最小可表示步长) - 可能具有同步、生命周期、延迟、滤波、采样率等属性 #### 7.2.2 关于 ECU 信号的需求(Requirements about ECU signals) > **摘要说明:** ECU 信号应满足以下需求: > - ECU 信号应具有唯一的符号名称 > - 数据类型应使用 AUTOSAR 标准类型 > - 范围应在配置时定义 > - ECU 信号应对应一个或多个底层 MCAL 通道 > - ECU 信号应在集成代码中实现从物理值到工程单位的转换 ### 7.3 属性(Attributes) #### 7.3.1 背景与原理(Background & Rationale) 属性定义了 ECU 信号的特征。不同的信号类型(模拟输入、模拟输出、离散输入、离散输出、周期输入、占空比输入/输出)适用不同的属性集。 #### 7.3.2 关于 ECU 信号属性的需求(Requirements about ECU signal attributes) > **摘要说明:** ECU 信号属性应满足以下需求: > - DataType、Range、Resolution、HW Resolution、HW Accuracy、Synchronization、Access、Inversion、Lifetime/Delay、Filtering/Debouncing、Sampling Rate、Report Changes、Pulse Test、Diagnosis 等属性应在配置时定义 > - 属性转换应在集成代码中实现 > - 属性的存在性应取决于信号类型 ### 7.4 I/O 硬件抽象和软件组件模板(I/O Hardware Abstraction and Software Component Template) #### 7.4.1 背景与原理(Background & Rationale) I/O 硬件抽象层应使用 AUTOSAR 软件组件模板定义其接口。每个 I/O 硬件抽象模块对应一个 SW-C 模板组件。 #### 7.4.2 关于使用软件组件模板的需求(Requirements about the usage of Software Component template) > **摘要说明:** 主要需求: > - 每个 I/O 硬件抽象模块应定义为 SW-C 模板的"应用"类型组件 > - 接口应为 Sender-Receiver 或 Client-Server > - 应使用 PortGroup 来组织相关端口 > - 模式声明和模式切换接口应用于电源状态管理 ### 7.5 I/O 硬件抽象的调度概念(Scheduling concept for I/O Hardware Abstraction) #### 7.5.1 背景与原理(Background & Rationale) I/O 硬件抽象层可能需要调度函数来处理周期性任务(如 ADC 读取、信号去抖、滤波等)。调度函数由 BSW Scheduler 直接调用。 #### 7.5.2 关于 I/O 硬件抽象调度概念的需求(Requirements about I/O Hardware Abstraction Scheduling concept) > **摘要说明:** 调度函数应满足以下需求: > - 调度函数没有返回值和参数 > - 所有调度函数应为 Non-Reentrant > - 调度函数的调用周期应在配置时定义 > - 调度函数可以处理 ECU 信号读取、属性转换、状态机等 ### 7.6 错误分类(Error Classification) #### 7.6.1 开发错误(Development Errors) **[SWS_IoHwAb_00170]** ⌈开发错误类型:IOHWAB_E_UNINIT(在 API 在 I/O 硬件抽象未初始化时调用时报告)。⌋ #### 7.6.2 运行时错误(Runtime Errors) 无。 #### 7.6.3 瞬态故障(Transient Faults) 无。 #### 7.6.4 生产错误(Production Errors) **[SWS_IoHwAb_00171]** ⌈生产错误类型:IOHWAB_E_HW_FAILURE、IOHWAB_E_SIGNAL_INVALID 等(详见原文 PDF)。⌋ #### 7.6.5 扩展的生产错误(Extended Production Errors) > **摘要说明:** 扩展的生产错误由生产错误工作组推荐,详见原文 PDF。 ### 7.7 其他需求(Other requirements) 无附加需求。 ### 7.8 错误检测(Error Detection) > **摘要说明:** 错误检测通过配置开关控制。 ### 7.9 错误通知(Error notification) > **摘要说明:** 检测到的开发错误通过 DET 报告,生产错误通过 DEM 报告。 ### 7.10 I/O 硬件抽象层描述(I/O Hardware Abstraction layer description) #### 7.10.1 背景与原理(Background & Rationale) I/O 硬件抽象层描述应包含每个模块的功能描述、接口定义、配置参数等。 #### 7.10.2 需求(Requirements) > **摘要说明:** I/O 硬件抽象层描述应满足以下需求: > - 应为每个 I/O 硬件抽象模块提供 BSW 模块描述 > - 应列出所有 ECU 信号及其属性 > - 应列出所有端口和接口 > - 应列出所有配置参数 ### 7.11 示例(Examples) #### 7.11.1 示例 1:板载硬件用例(Use case of on-board hardware) 本示例源自电源 ECU: - ECU 具有大量数字输入(DI) - 一组是用于机械开关的"慢速 DI" - 另一组是用于功率 IC 诊断的"快速 DI" - MCU 引脚不够,慢速 DI 连接到 8 位多路复用器 - 最大"过流"到功率 IC 切换时间为 1 ms - OEM 要求开关反应不超过 100 ms - 每个 DI 必须通过 3/5 投票去抖 **解决方案:** - 所有 DI(慢速和快速)每 0.8 ms 读取一次(循环任务) - 慢速 DI 的去抖在每次循环中执行一次(最坏情况下去抖值的延迟为 3.2 ms) - 如果检测到过流,引脚将在同一循环中再次读取几次,并立即关闭功率 IC - 应用程序每 10 ms 运行一次,读取用于开关的去抖 DI 和诊断信息 **AUTOSAR 架构分解:** | 层 | 多路复用 I/O | 功率 IC | |---|---|---| | Application | Runnable 每 10 ms 读取数据 | 如果功率 IC 检测到过流则获得通知 | | RTE | 处理 runnables | | | I/O Hardware Abstraction | 8 个信号映射到端口,端口特征定义和 Client/Server 接口,信号抽象提供去抖时间(优于去抖投票规则),循环任务通过 DIO 服务调用执行输入读取 | I/O 硬件抽象决定在检测到过流时关闭功率 IC(在外部 ASIC 的驱动中),循环任务通过 DIO 服务调用执行输入读取 | | MCAL driver | DIO driver:地址线、1 条数据线 | DIO driver:来自功率 IC 的 1 条反馈线;PWM driver:1 条到功率 IC 的线 | | ECU hardware | 多路复用器:8 个电气信号的映射 | 功率 IC:控制多路复用器的电源 | #### 7.11.2 示例 2:故障监控用例(Use case of failure monitoring) 在本例中,应在 I/O 硬件抽象层上定义具有诊断属性的诊断输出信号。因此,使用输入来执行输出的诊断。 当 I/O 硬件抽象请求定位一个输出(Dio_WriteChannel)时,通过配置为输入的 ECU 引脚读取通道。 ICU 驱动向 I/O 硬件抽象发送通知。保护策略位于集成代码中。 软件组件可以通过端口使用诊断操作获取诊断值。 #### 7.11.3 示例 3:输出功率级(Output power stage) ECU 硬件具有功率级 ASIC。因此,所有 ECU 引脚应作为"信号"在 I/O 硬件抽象层上可用(就在 RTE 之下)。 - 一些输出通过 SPI driver/handler 控制 - 一些输入直接通过 DIO driver 控制 - 一些电压、频率通过 PWM driver 设置 - 功率级驱动提供所有输出的视图。它调用 PWM、DIO drivers 和 SPI handler 的服务。信号抽象使所有这些输出从软件组件的角度"可见"(信号映射到端口)。"功率级驱动"可以配置。 **诊断:** 每个故障可以在功率级上检测到。诊断数据流通过 SPI 通信到功率级驱动,然后,诊断通过 S/R 接口提供给所有软件组件。 #### 7.11.4 示例 4:在低功耗状态下设置传感器和控制外设(Setting sensor and controlling periphery in low power state) ECU 通过其 ADC 和 DIO 外设控制传感器。在特定情况下,ECU 进入操作模式,其中传感器关闭,ADC 设置为低功耗状态。 **动作序列如下:** 1. 应用程序电源模式管理器向 BswM 发出模式请求以切换到"LowPowerMode"。 2. BswM 评估请求,如果所有先决条件都满足,则向电源模式管理器和传感器 SWC 发出模式切换。 3. 传感器 SWC 停止读取感官数据(即不再向 IoHwAbs 请求任何 Get 操作)。 4. IoHwAbs 从 ADC 注销其通知,并最终停止 HW 循环采集。 5. IoHwAbs 将外部感官 HW 命令进入低功耗模式或关闭。 6. IoHwAbs 调用其低功耗模式准备 Callouts,然后调用其低功耗模式设置 Callouts,如配置所定义,以获得与请求的应用程序低功耗模式"LowPowerMode"相关的 ADC(在这种情况下)电源状态。 可以通过引入更细粒度的模式请求并对确认和/或切换做出反应来逐步控制该过程。 --- ## 8 API 规范(API specification) ### 8.1 导入类型(Imported types) **[SWS_IoHwAb_91000]** ⌈ | 模块 | 头文件 | 导入类型 | |---|---|---| | Adc | Adc.h | Adc_GroupType, Adc_StatusType, Adc_StreamNumSampleType, Adc_ValueGroupType | | Dio | Dio.h | Dio_ChannelGroupType, Dio_ChannelType, Dio_LevelType, Dio_PortLevelType, Dio_PortType | | EcuM | EcuM.h | EcuM_WakeupSourceType | | GENERIC TYPES | | `` | | Gpt | Gpt.h | Gpt_ChannelType, Gpt_ModeType, Gpt_ValueType | | Icu | Icu.h | Icu_ActivationType, Icu_ChannelType, Icu_DutyCycleType, Icu_EdgeNumberType, Icu_IndexType, Icu_InputStateType, Icu_ValueType | | Ocu | Ocu.h | Ocu_ChannelType, Ocu_PinStateType, Ocu_ReturnType, Ocu_ValueType | | Port | Port.h | Port_PinDirectionType, Port_PinModeType, Port_PinType | | Pwm | Pwm.h | Pwm_ChannelType, Pwm_EdgeNotificationType, Pwm_OutputStateType, Pwm_PeriodType | | Spi | Spi.h | Spi_AsyncModeType, Spi_ChannelType, Spi_DataBufferType, Spi_HWUnitType, Spi_JobResultType, Spi_JobType, Spi_NumberOfDataType, Spi_SeqResultType, Spi_SequenceType, Spi_StatusType | | Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType | ⌋ ### 8.2 类型定义(Type definitions) #### 8.2.1 IoHwAb_ConfigType **[SWS_IoHwAb_00157]** ⌈ | 字段 | 内容 | |---|---| | Name | IoHwAb_ConfigType | | Type | Structure(实现特定) | | Description | IoHwAb 模块的配置数据结构。 | | Available via | IoHwAb.h | ⌋ (SRS_BSW_00414) ### 8.3 函数定义(Function definitions) **关于 I/O 硬件抽象的注释:** 如前面章节所述,不会为 I/O 硬件抽象指定功能 API。I/O 硬件抽象的接口完全通过 AUTOSAR 端口定义(使用 SW-C 模板)。 #### 8.3.1 IoHwAb_Init **[SWS_IoHwAb_00119]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_Init | | Syntax | `void IoHwAb_Init(const IoHwAb_ConfigType* ConfigPtr)` | | Service ID[hex] | 0x01 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Parameters (in) | ConfigPtr - 指向所选配置集的指针 | | Description | 初始化所有 I/O 硬件抽象软件或 I/O 硬件抽象的一部分。 | | Available via | IoHwAb.h | ⌋ () **[SWS_IoHwAb_00158]** ⌈配置指针 ConfigPtr 应始终具有 NULL_PTR 值。⌋ (SRS_BSW_00414) **注释:** 配置指针 ConfigPtr 当前未使用,因此应设置为 NULL_PTR 值。 **[SWS_IoHwAb_00059]** ⌈这种函数初始化所有 I/O 硬件抽象软件或 I/O 硬件抽象的一部分。⌋ (SRS_BSW_00101) **[SWS_IoHwAb_00060]** ⌈I/O 硬件抽象软件管理的 I/O 设备的 multiplicity 应通过多个 init 函数处理。每个 init 函数应用 `` 标记。因此,具有封装在 I/O 硬件抽象内的驱动程序的外部设备可以单独初始化。⌋ (SRS_BSW_00101) **[SWS_IoHwAb_00061]** ⌈这种 init 函数应由 ECU 状态管理器调用。ECU 集成商能够配置 ECU 状态管理器调用的初始化序列顺序。⌋ (SRS_BSW_00101) **[SWS_IoHwAb_00102]** ⌈完成模块初始化后,I/O 硬件抽象状态应设置为 IOHWAB_IDLE,作业结果应设置为 IOHWAB_JOB_OK。⌋ (SRS_BSW_00441) #### 8.3.2 IoHwAb_GetVersionInfo **[SWS_IoHwAb_00120]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_GetVersionInfo | | Syntax | `void IoHwAb_GetVersionInfo(Std_VersionInfoType* versioninfo)` | | Service ID[hex] | 0x10 | | Sync/Async | Synchronous | | Reentrancy | Reentrant | | Parameters (out) | versioninfo - 指向存储此 I/O 硬件抽象实现版本信息的变量的指针 | | Description | 返回此模块的版本信息。 | | Available via | IoHwAb.h | ⌋ () ### 8.4 回调通知(Call-back notifications) 本节列出了为下层模块提供的函数。 #### 8.4.1 IoHwAb_AdcNotification<#groupID> **[SWS_IoHwAb_00121]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_AdcNotification<#groupID> | | Syntax | `void IoHwAb_AdcNotification<#groupID>(void)` | | Service ID[hex] | 0x20 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当 ADC 驱动完成组 `<#groupID>` 的组转换时,将由 ADC 驱动调用。 | | Available via | IoHwAb_Adc.h | ⌋ () **[SWS_IoHwAb_00104]** ⌈函数 IoHwAb_AdcNotification<#groupID> 旨在由 ADC 驱动在完成组 `<#groupID>` 的组转换时调用。⌋ () #### 8.4.2 IoHwAb_Pwm_Notification<#channel> **[SWS_IoHwAb_00122]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_PwmNotification<#channel> | | Syntax | `void IoHwAb_PwmNotification<#channel>(void)` | | Service ID[hex] | 0x30 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当 PWM 通道 `<#channel>` 上发生信号边沿时,将由 PWM 驱动调用。 | | Available via | IoHwAb_Pwm.h | ⌋ () **[SWS_IoHwAb_00105]** ⌈函数 IoHwAb_PwmNotification<#channel> 旨在由 PWM 驱动在通道 `<#channel>` 上发生信号边沿时调用。⌋ () #### 8.4.3 IoHwAb_IcuNotification<#channel> **[SWS_IoHwAb_00123]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_IcuNotification<#channel> | | Syntax | `void IoHwAb_IcuNotification<#channel>(void)` | | Service ID[hex] | 0x40 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当 ICU 通道 `<#channel>` 上发生信号边沿时,将由 ICU 驱动调用。 | | Available via | IoHwAb_Icu.h | ⌋ () **[SWS_IoHwAb_00106]** ⌈函数 IoHwAb_IcuNotification<#channel> 旨在由 ICU 驱动在通道 `<#channel>` 上发生信号边沿时调用。⌋ () #### 8.4.4 IoHwAb_GptNotification<#channel> **[SWS_IoHwAb_00124]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_GptNotification<#channel> | | Syntax | `void IoHwAb_GptNotification<#channel>(void)` | | Service ID[hex] | 0x50 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当 GPT 通道 `<#channel>` 上定时器值到期时,将由 GPT 驱动调用。 | | Available via | IoHwAb_Gpt.h | ⌋ () **[SWS_IoHwAb_00107]** ⌈函数 IoHwAb_GptNotification<#channel> 旨在由 GPT 驱动在通道 `<#channel>` 上定时器值到期时调用。⌋ () #### 8.4.5 IoHwAb_OcuNotification<#channel> **[SWS_IoHwAb_00155]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_OcuNotification<#channel> | | Syntax | `void IoHwAb_OcuNotification<#channel>(void)` | | Service ID[hex] | 0xa0 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当计数器的当前值与通道 `<#channel>` 上的阈值匹配时,将由 OCU 驱动调用。 | | Available via | IoHwAb_Ocu.h | ⌋ () **[SWS_IoHwAb_00156]** ⌈函数 IoHwAb_OcuNotification<#channel> 旨在由 OCU 驱动在通道 `<#channel>` 上计数器的当前值与阈值匹配时调用。⌋ () #### 8.4.6 IoHwAb_Pwm_NotifyReadyForPowerState<#MODE> **[SWS_Pwm_00198]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_Pwm_NotifyReadyForPowerState<#Mode> | | Syntax | `void IoHwAb_Pwm_NotifyReadyForPowerState<#Mode>(void)` | | Service ID[hex] | 0x60 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当模式 `<#Mode>` 的请求电源状态准备完成时,应由 PWM 驱动调用。 | | Available via | IoHwAb_Pwm.h | ⌋ () **注释:** 如果 PWM 驱动配置为支持异步模式的电源状态控制,则需要由 CDD 或 IoHwAbs 提供的此接口。 #### 8.4.7 IoHwAb_Adc_NotifyReadyForPowerState<#MODE> **[SWS_IoHwAb_00154]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_Adc_NotifyReadyForPowerState<#Mode> | | Syntax | `void IoHwAb_Adc_NotifyReadyForPowerState<#Mode>(void)` | | Service ID[hex] | 0x70 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 当模式 `<#Mode>` 的请求电源状态准备完成时,应由 ADC 驱动调用。 | | Available via | IoHwAb_Adc.h | ⌋ () **注释:** 如果 ADC 驱动配置为支持异步模式的电源状态控制,则需要由 CDD 或 IoHwAbs 提供的此接口。 ### 8.5 计划函数(Scheduled functions) 这些函数由基础软件调度器直接调用。以下函数应没有返回值和参数。所有函数应为 Non-Reentrant。 #### 8.5.1 | 字段 | 内容 | |---|---| | Service name | `` | | Service ID [hex] | `` | | Description | `<包含定义此 API 调用操作的 ID 的本地软件需求集。>` | | Timing | `` | | Pre condition | `<关于 API 调用必须操作的环境的假设列表。>` | | Configuration | `<描述影响此 API 调用的静态可配置属性。例如固定周期时序的周期时间。>` | ### 8.6 功能诊断接口(Functional Diagnostics Interface) 本章描述 I/O 硬件抽象向 DCM 模块提供的接口,以实现"软件组件的功能诊断"。 "软件组件的功能诊断"意味着,通过提供的接口,DCM 模块能够控制和读取每个已实现的 ECU 信号。 #### 8.6.1 IoHwAb_Dcm_ **[SWS_IoHwAb_00135]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_Dcm_ | | Syntax | `void IoHwAb_Dcm_(uint8 action, signal)` | | Description | 此函数为 DCM 模块提供对特定 ECU 信号的访问控制(`` 是 ECU 信号的符号名称)。可以通过此函数锁定和解锁 ECU 信号。锁定将 ECU 信号"冻结"为当前值、配置的默认值或由参数"signal"给定的值。 | | Available via | IoHwAb_Dcm.h | ⌋ (SRS_IoHwAb_00002) | 参数 | 值 | |---|---| | action(输入) | IOHWAB_RETURNCONTROLTOECU:解锁信号
IOHWAB_RESETTODEFAULT:锁定信号并将其设置为配置的默认值
IOHWAB_FREEZECURRENTSTATE:锁定信号到当前值
IOHWAB_SHORTTERMADJUSTMENT:锁定信号并将其调整为 DCM 模块给定的值 | | signal(输入) | 调整信号的值(仅用于"短期调整") | **[SWS_IoHwAb_00136]** ⌈此函数允许控制关联的 ECU 信号,即可以锁定、解锁 ECU 信号并将其调整为某个值。⌋ (SRS_IoHwAb_00002) **[SWS_IoHwAb_00138]** ⌈此函数应可预编译时间配置 On/Off。⌋ (SRS_IoHwAb_00002) **锁定信号**意味着某个信号在软件上锁定到 SW-C,即 SW-C 的请求在锁定状态下对硬件没有影响。如果对输入信号使用 C/S 通信,可能有必要具有 IoHwAb 内部缓冲区,其值可由 DCM 调整。 #### 8.6.2 IoHwAb_Dcm_Read **[SWS_IoHwAb_00139]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_Dcm_Read | | Syntax | `void IoHwAb_Dcm_Read(* signal)` | | Parameters (out) | signal - 指向应存储当前信号值的变量的指针 | | Description | 此函数为 DCM 模块提供对特定 ECU 信号的读取访问(`` 是 ECU 信号的符号名称)。 | | Available via | IoHwAb_Dcm.h | ⌋ (SRS_IoHwAb_00002) **[SWS_IoHwAb_00140]** ⌈此函数为 DCM 模块提供对特定 ECU 信号的读取访问。读取访问独立于 ECU 信号的当前状态(锁定/未锁定),应始终从硬件读取当前物理值。⌋ (SRS_IoHwAb_00002) **[SWS_IoHwAb_00142]** ⌈此函数应可预编译时间配置 On/Off。⌋ (SRS_IoHwAb_00002) ### 8.7 电源状态函数(Power State Functions) #### 8.7.1 IoHwAb_PreparePowerState<#MODE> **[SWS_IoHwAb_00146]** ⌈ | 字段 | 内容 | |---|---| | Service name | IoHwAb_PreparePowerState<#Mode> | | Syntax | `void IoHwAb_PreparePowerState<#Mode>(void)` | | Service ID[hex] | 0x80 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | Description | 准备与模式 `<#Mode>` 关联的外设的电源状态转换。 | | Available via | IoHwAb.h | ⌋ () #### 8.7.2 IoHwAb_EnterPowerState<#MODE> > **摘要说明:** IoHwAb_EnterPowerState<#Mode> 用于执行实际的外设电源状态转换。 > > 详细需求 SWS_IoHwAb_00147 见原文 PDF(第 49 页)。 ### 8.8 预期接口(Expected Interfaces) #### 8.8.1 强制接口(Mandatory Interfaces) > **摘要说明:** I/O 硬件抽象的强制接口包括来自 MCAL 驱动程序的多个 API: > > | 源模块 | API | 用途 | > |---|---|---| > | Adc | Adc_Init, Adc_DeInit, Adc_StartGroupConversion, Adc_ReadGroup, Adc_EnableHardwareTrigger, Adc_DisableHardwareTrigger 等 | ADC 操作 | > | Dio | Dio_ReadChannel, Dio_WriteChannel, Dio_ReadPort, Dio_WritePort 等 | DIO 操作 | > | Gpt | Gpt_StartTimer, Gpt_StopTimer, Gpt_EnableNotification 等 | GPT 操作 | > | Icu | Icu_Init, Icu_SetMode, Icu_EnableNotification, Icu_StartTimestamp 等 | ICU 操作 | > | Ocu | Ocu_Init, Ocu_StartChannel, Ocu_StopChannel 等 | OCU 操作 | > | Pwm | Pwm_Init, Pwm_SetDutyCycle, Pwm_SetPeriodAndDuty 等 | PWM 操作 | > | Port | Port_Init, Port_SetPinDirection, Port_SetPinMode 等 | Port 操作 | > | Spi | Spi_Init, Spi_AsyncTransmit, Spi_ReadIB, Spi_WriteIB 等 | SPI 操作 | > > *完整列表见原文 PDF(第 49-52 页)。* #### 8.8.2 可选接口(Optional Interfaces) 无附加可选接口。 #### 8.8.3 作业结束通知(Job End Notification) > **摘要说明:** I/O 硬件抽象可以提供作业结束通知接口,以允许异步通信(SPI、ADC 流等)。 --- ## 9 序列图(Sequence diagrams) > **摘要说明:** 本节包含以下序列图: > > 1. **ECU-signal provided by the I/O Hardware Abstraction (example)** - 示例 ECU 信号提供流程 > 2. **Setting ADC and PWM in a low consumption power state as a result of a request for an application low power mode (example)** - 低功耗模式下的 ADC 和 PWM 设置流程 > > *完整序列图见原文 PDF(第 53-56 页)。* --- ## 10 配置规范(Configuration specification) ### 10.1 发布信息(Published Information) > **摘要说明:** I/O 硬件抽象的发布信息包括: > - 版本号 > - 供应商 ID > - 模块 ID > - 编译开关信息 > - 与底层 MCAL 驱动程序的依赖关系 --- ## 11 不适用需求(Not applicable requirements) > **摘要说明:** 本节列出了不适用于 I/O 硬件抽象的需求。 --- ## 翻译说明 本文档为 AUTOSAR 4.4.0 版本 I/O 硬件抽象规范的中文翻译。保留了所有需求 ID(SWS_IoHwAb_xxxxx)、参考标识符及模块缩写。原始文档共 58 页,本翻译涵盖了全部主要章节,并对大型可追溯性表采用了"重点翻译+摘要"策略,标注"完整表见原文 PDF"的位置以便用户查阅原文。I/O 硬件抽象层提供基于信号的接口,向上层抽象出 ECU 硬件的信号路径。