# Specification of DIO Driver(DIO 驱动规范) > **AUTOSAR CP Release 4.4.0** ## 文档元信息 | 项目 | 内容 | |------|------| | Document Title(文档标题) | Specification of DIO Driver(DIO 驱动规范) | | Document Owner(文档所有者) | AUTOSAR | | Document Responsibility(文档责任方) | AUTOSAR | | Document Identification No(文档标识号) | 020 | | Document Status(文档状态) | Final(最终版) | | Part of AUTOSAR Standard(所属 AUTOSAR 标准) | Classic Platform(经典平台) | | Part of Standard Release(所属标准发布版本) | 4.4.0 | ## 文档变更历史(Document Change History) | Date(日期) | Release(版本) | Changed by(修改人) | Change Description(变更描述) | |---|---|---|---| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 引入 MaskedWritePort API | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 移除未使用的构件;编辑性变更 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除 SWS_Dio_00065;将"7.6.2 运行时错误"的内容替换为"无运行时错误";将"7.6.3 瞬态故障"的内容替换为"无瞬态故障";移除 10.1.1 中"配置变体"的定义;更改图 2:包含文件结构 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | DET 重命名和扩展合并;更改 DioChannelId、DioPortId 预编译配置 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | DIO:ReadChannelGroup/WriteChannelGroup 指针参数,仅提供链接时支持;由 postBuildChangeable 容器聚合的链接时参数的生成可能不可行,移除对 SWS_BSW_00380 的引用 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 服务接口形式化;服务接口的返回值修订;编辑性变更;移除关于变更文档的章节 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 更新第 10 章以了解"Scope"值;将 "MemMap.h" 更改为 "Dio_MemMap.h";新增 3.x 子章;需求 ID 更改为新格式 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 从 SWS_Dio_00171 中移除 Dem.h 并添加新需求 SWS_Dio_00194 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 添加新 API "Dio_LevelType Dio_FlipChannel(Dio_ChannelType ChannelId)" 以翻转(从 1 变为 0 或从 0 变为 1)通道的电平并在翻转后返回通道的电平;移除需求 DIO174 并重新措辞 SWS_Dio_00106;添加需求 SWS_DIO_00188 和 SWS_Dio_00189,从 Dio_GetVersionInfo() 报告 DET 错误 DIO_E_PARAM_POINTER | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 澄清 SWS_Dio_00014;将 DioVersionInfoApi 添加到 DIO071;清理配置参数和头文件包含结构;修订法律免责声明 | | 2008-08-13 | 3.1.1 | AUTOSAR Administration | 修订法律免责声明 | | 2007-12-21 | 3.0.1 | AUTOSAR Administration | 与 MCAL 模块协调初始化;可选包含 DEM 头文件;添加关于 DIO_PORT_MASK 和 DIO_PORT_OFFSET 之间依赖关系的说明;扩展文档元信息;进行小的布局调整 | | 2007-01-24 | 2.1.15 | AUTOSAR Administration | 文件结构更新;移除 BSW00324;在允许预编译和链接时的配置中,预编译的变体现在始终为"PC"而非"所有变体";添加第 8.6 章;引用符号命名的更改;更新关于 SRS_BSW_00435 和 SRS_BSW_00436 的可追溯性矩阵;修订法律免责声明;修订"Advice for users";添加"Revision Information" | | 2006-05-16 | 2.0 | AUTOSAR Administration | 第 10 章(配置规范)的重大变更;文档结构部分更改;将回读支持移至 PORT 驱动 | | 2005-05-31 | 1.0 | AUTOSAR Administration | 初始发布 | --- ## 免责声明(Disclaimer) 本文档(规范和/或软件实现)及其包含的材料由 AUTOSAR 发布,仅用于信息目的。AUTOSAR 和为其做出贡献的公司不对作品的任何使用承担责任。 本作品中包含的材料受版权和其他类型知识产权的保护。商业利用本作品中包含的材料需要此类知识产权的许可。 本作品可在不进行任何修改的情况下、以任何形式或任何方式用于信息目的。对于任何其他目的,未经出版商的书面许可,作品的任何部分不得以任何形式或任何方式被利用或复制。 本作品专为汽车应用而开发。它既未开发也未针对非汽车应用进行测试。 AUTOSAR 字样和 AUTOSAR 徽标是注册商标。 --- ## 目录(Table of Contents) - [1 引言与功能概述(Introduction and functional overview)](#1-引言与功能概述) - [2 缩略语与缩写(Acronyms and abbreviations)](#2-缩略语与缩写) - [3 相关文档(Related documentation)](#3-相关文档) - 3.1 AUTOSAR 交付物 - 3.2 相关规范 - [4 约束与假设(Constraints and assumptions)](#4-约束与假设) - 4.1 限制 - 4.2 对汽车领域的适用性 - [5 对其他模块的依赖(Dependencies to other modules)](#5-对其他模块的依赖) - [6 需求可追溯性(Requirements traceability)](#6-需求可追溯性) - [7 功能规范(Functional specification)](#7-功能规范) - 7.1 通用行为 - 7.1.1 背景与原理 - 7.1.2 需求 - 7.2 初始化 - 7.2.1 背景与原理 - 7.2.2 需求 - 7.3 运行时重新配置 - 7.3.1 背景与原理 - 7.3.2 需求 - 7.4 DIO 写服务 - 7.4.1 背景与原理 - 7.4.2 需求 - 7.5 DIO 读服务 - 7.5.1 背景与原理 - 7.5.2 需求 - 7.6 错误分类 - 7.6.1 开发错误 - 7.6.2 运行时错误 - 7.6.3 瞬态故障 - 7.6.4 生产错误 - 7.7 错误检测 - 7.7.1 API 参数检查 - [8 API 规范(API specification)](#8-api-规范) - 8.1 导入的类型 - 8.2 类型定义 - 8.2.1 Dio_ChannelType - 8.2.2 Dio_PortType - 8.2.3 Dio_ChannelGroupType - 8.2.4 Dio_LevelType - 8.2.5 Dio_PortLevelType - 8.3 函数定义 - 8.3.1 Dio_ReadChannel - 8.3.2 Dio_WriteChannel - 8.3.3 Dio_ReadPort - 8.3.4 Dio_WritePort - 8.3.5 Dio_ReadChannelGroup - 8.3.6 Dio_WriteChannelGroup - 8.3.7 Dio_GetVersionInfo - 8.3.8 Dio_FlipChannel - 8.3.9 Dio_MaskedWritePort - 8.4 回调通知 - 8.5 调度函数 - 8.6 预期接口 - 8.6.1 强制接口 - 8.6.2 可选接口 - [9 时序图(Sequence diagrams)](#9-时序图) - 9.1 从数字 I/O 读取值 - 1 - 9.2 从数字 I/O 读取值 - 2 - 9.3 将值写入数字 I/O - 1 - 9.4 将值写入数字 I/O - 2 - [10 配置规范(Configuration specification)](#10-配置规范) - 10.1 容器和配置参数 - 10.1.1 变体 - 10.1.2 Dio - 10.1.3 DioGeneral - 10.1.4 DioPort - 10.1.5 DioChannel - 10.1.6 DioChannelGroup - 10.1.7 DioConfig - 10.2 发布信息 - [11 不适用的需求(Not applicable requirements)](#11-不适用的需求) --- ## 1 引言与功能概述 本规范规定了 AUTOSAR 基本软件模块 DIO 驱动的功能、API 和配置。 本规范仅适用于片上 DIO 引脚和端口的驱动。 DIO 驱动提供以下读/写服务: - DIO Channels(通道,引脚) - DIO Ports(端口) - DIO Channel Groups(通道组) 这些服务的行为是同步的。 本模块作用于由 PORT 驱动为此目的配置的引脚和端口。因此,在 DIO 驱动中没有此端口结构的配置和初始化。 下图标识了 DIO 驱动函数,以及 PORT 驱动和 DIO 驱动在 MCAL 软件层中的结构。 ``` IO HW Abstraction I/O HW Abstraction Software Driver Functions ─────────────────────────────────── │ Inside this dotted line is DIO │ Driver specific │ MCAL Software ─────────────── │ DIO_WriteChannel PORT_Init │ │ DIO_ReadPort PORT Driver ─────────────► PORT_Config │ │ DIO_WriteGroup Other PORT Driver │ Functions │ Other DIO Driver Functions │ ──────────────────────────────────────────────── Port Function Port Data Read On-Chip Registers ───────────────── Port Data Write On-Chip Hardware ────────────────── PIN0 PIN1 PIN2 PIN3 PIN... PINn PORT ``` **图 1:DIO 驱动结构与集成** ## 2 缩略语与缩写 具有局部范围的缩略语和缩写不包含在 AUTOSAR 词汇表中。这些必须出现在本地词汇表中。 | 缩写 / 缩略语 | 描述 | |---|---| | DIO channel(DIO 通道) | 表示单个通用数字输入/输出引脚。 | | DIO port(DIO 端口) | 表示由硬件分组的几个 DIO 通道(通常由一个硬件寄存器控制)。示例:Freescale HC08 的 Port A(8 位) | | DIO channel group(DIO 通道组) | 表示由逻辑组表示的几个相邻 DIO 通道。DIO 通道组应属于一个 DIO 端口。示例:8 位端口的端口引脚 2..6(寻址多路复用器) | | Physical Level (Input)(物理电平-输入) | 两种可能状态:LOW/HIGH。位值 '0' 表示 LOW,位值 '1' 表示 HIGH。 | | Physical Level (Output)(物理电平-输出) | 两种可能状态:LOW/HIGH。位值 '0' 表示 LOW,位值 '1' 表示 HIGH。 | | LSB | Least Significant Bit(最低有效位) | | MSB | Most Significant Bit(最高有效位) | | DIO | Digital Input Output(数字输入输出) | | ID | Identifier(标识符) | | ADC | Analog to Digital Converter(模数转换器) | | SPI | Serial Peripheral Interface(串行外设接口) | | PWM | Pulse Width Modulation(脉宽调制) | | ICU | Input Capture Unit(输入捕获单元) | | DET | Default Error Tracer(默认错误跟踪器) | | DEM | Diagnostic Event Manager(诊断事件管理器) | ## 3 相关文档 ### 3.1 AUTOSAR 交付物 - [1] Layered Software Architecture, AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf - [2] List of Basic Software Modules, AUTOSAR_TR_BSWModuleList.pdf - [3] General Requirements on SPAL, AUTOSAR_SRS_SPALGeneral.pdf - [4] General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral.pdf - [5] Specification of ECU Configuration, AUTOSAR_TPS_ECUConfiguration.pdf - [5] Specification of PORT Driver, AUTOSAR_SWS_PortDriver.pdf - [6] Specification of Standard Types, AUTOSAR_SWS_StandardTypes.pdf - [6] AUTOSAR Basic Software Module Description Template, AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf - [7] General Specification of Basic Software Modules, AUTOSAR_SWS_BSWGeneral.pdf ### 3.2 相关规范 AUTOSAR 提供了关于基本软件模块的通用规范 [7](SWS BSW General),该规范对 DIO 驱动同样有效。 因此,规范 SWS BSW General 应被视为 DIO 驱动的附加且必需的规范。 ## 4 约束与假设 ### 4.1 限制 无限制。 ### 4.2 对汽车领域的适用性 无限制。 ## 5 对其他模块的依赖 **Port Driver Module(Port 驱动模块)** 许多端口和端口引脚由 PORT 驱动模块分配给各种功能,例如: - 通用 I/O - ADC - SPI - PWM **[SWS_Dio_00061]** ⌈Dio 模块不应提供用于 Dio 模块中使用的端口结构的整体配置和初始化的 API。这些操作由 PORT 驱动模块完成。⌋ () **[SWS_Dio_00063]** ⌈Dio 模块应使其配置和使用适应微控制器和 ECU。⌋ () **[SWS_Dio_00102]** ⌈Dio 模块的用户只能在 Port 驱动初始化之后使用 Dio 函数。否则 Dio 模块将表现出未定义的行为。⌋ () **[SWS_Dio_00194]** ⌈如果启用了开发错误(DET)的检测,则 Dio.c 应包含 Det.h。⌋ () ## 6 需求可追溯性 本章引用 SRS 文档(软件需求规范)中适用于本软件模块的输入需求。 下表列出了满足输入需求的 DIO 驱动 SWS 文档规范项的链接。仅引用功能需求。 **说明**:本表较大,此处保留前 10 行作为示例。完整表见原文 PDF(AUTOSAR_SWS_DIODriver.pdf 第 13-18 页)。 | 需求 | 描述 | 由以下满足 | |---|---|---| | SRS_BSW_00005 | µC 抽象层(MCAL)的模块不得具有硬编码的水平接口 | SWS_Dio_00195 | | SRS_BSW_00006 | µC 抽象层(MCAL)以上的软件模块源代码不得依赖于处理器和编译器 | SWS_Dio_00195 | | SRS_BSW_00007 | 用 C 语言编写的所有基本软件模块应符合 MISRA C 2012 标准 | SWS_Dio_00195 | | SRS_BSW_00009 | 所有基本软件模块应根据通用标准进行文档化 | SWS_Dio_00195 | | SRS_BSW_00010 | 所有基本软件模块的内存消耗应为所有支持的平台的定义配置记录 | SWS_Dio_00195 | | SRS_BSW_00101 | 基本软件模块应能在单独的初始化函数中初始化变量和硬件 | SWS_Dio_00195 | | SRS_BSW_00160 | AUTOSAR 基本软件模块的配置文件应对人类可读 | SWS_Dio_00195 | | SRS_BSW_00161 | AUTOSAR 基本软件应提供微控制器抽象层,为更高的软件层提供标准化接口 | SWS_Dio_00195 | | SRS_BSW_00162 | AUTOSAR 基本软件应提供硬件抽象层 | SWS_Dio_00195 | | SRS_BSW_00164 | 中断服务程序的实现应由操作系统、复杂驱动程序或模块完成 | SWS_Dio_00195 | | SRS_Dio_12003 | DIO 驱动应提供服务,将数据字写入分配的 DIO 端口 | SWS_Dio_00004, SWS_Dio_00007, SWS_Dio_00034, SWS_Dio_00035, SWS_Dio_00051, SWS_Dio_00089, SWS_Dio_00200, SWS_Dio_00201, SWS_Dio_00202, SWS_Dio_00203 | | SRS_Dio_12004 | DIO 驱动应提供服务,将可选择数量的相邻位写入 DIO 端口的已分配部分 | SWS_Dio_00008, SWS_Dio_00039, SWS_Dio_00040, SWS_Dio_00051, SWS_Dio_00056, SWS_Dio_00089, SWS_Dio_00090, SWS_Dio_00091 | | SRS_Dio_12005 | DIO 驱动应提供服务以对单个 DIO 通道进行写访问 | SWS_Dio_00006, SWS_Dio_00028, SWS_Dio_00029, SWS_Dio_00051, SWS_Dio_00079, SWS_Dio_00089, SWS_Dio_00127, SWS_Dio_00128 | | SRS_Dio_12006 | DIO 驱动应提供服务以从分配的 DIO 端口读取数据字 | SWS_Dio_00013, SWS_Dio_00031, SWS_Dio_00051, SWS_Dio_00089 | | SRS_Dio_12352 | DIO 驱动应允许读/写 DIO 端口、通道组和通道 | SWS_Dio_00012, SWS_Dio_00064, SWS_Dio_00070, SWS_Dio_00083, SWS_Dio_00084 | | SRS_Dio_12424 | 提供 DIO 访问的原子性 | SWS_Dio_00005 | (完整表包含约 100 个 SRS_BSW、SRS_Dio 和 SRS_SPAL 需求项的映射。) ## 7 功能规范 ### 7.1 通用行为 #### 7.1.1 背景与原理 DIO 驱动抽象了对微控制器硬件引脚的访问。此外,它允许对这些引脚进行分组。 #### 7.1.2 需求 Dio SWS 应定义允许对内部通用 I/O 端口进行以下访问的函数: - Port-(基于端口) - Channel-(基于通道) - Channel-group-(基于通道组) 基于的读/写访问。 **[SWS_Dio_00051]** ⌈Dio 模块在提供读/写服务时不应缓冲数据。 Dio SWS 应定义同步读/写服务。⌋ (SRS_Dio_12003, SRS_Dio_12004, SRS_Dio_12005, SRS_Dio_12006, SRS_Dio_12007, SRS_Dio_12008) **[SWS_Dio_00005]** ⌈Dio 模块的读/写服务应确保所有服务的数据一致性(不允许可中断的读-改-写序列)。⌋ (SRS_Dio_12424) **[SWS_Dio_00089]** ⌈DIO 驱动用于通道软件电平的值是 STD_HIGH 或 STD_LOW。⌋ (SRS_Dio_12003, SRS_Dio_12004, SRS_Dio_12005, SRS_Dio_12006, SRS_Dio_12007, SRS_Dio_12008) **[SWS_Dio_00128]** ⌈通用数字 IO 引脚表示 DIO 通道。⌋ (SRS_Dio_12005, SRS_Dio_12008) **[SWS_Dio_00127]** ⌈Port 模块应将 DIO 通道配置为输入或输出 [SWS_Dio_00001 和 SWS_Dio_00002]。⌋ (SRS_Dio_12005, SRS_Dio_12008) **[SWS_Dio_00053]** ⌈在 DIO 驱动中,应可能通过硬件对几个 DIO 通道进行分组(通常由一个硬件寄存器控制)以表示 DIO 端口。⌋ () 注:DIO 端口内的单个 DIO 通道电平根据它们在端口内的位置表示 DIO 端口值中的一个位。 **[SWS_Dio_00056]** ⌈通道组是 DIO 端口内几个相邻 DIO 通道的形式逻辑组合。 ``` 通道组 ┌─────────────────────────────────────────────┐ │ │ │ MSB 7 6 5 4 3 2 1 0 LSB MSB 7 6 5 4 3 2 1 0 LSB │ │ 1 0 10 011 0 101 0 011 0 │ │ │ │ 8-bit Port │ │ (e.g. Port 5 Id = 5) │ │ │ │ 0 0 00 00 11 │ └─────────────────────────────────────────────────────┘ Dio_WriteChannelGroup(ChannelGroupIdPtr, Level) 其中: ChannelGroupIdPtr: port: 5dez offset: 1dez mask: 0x1E Level: 0x03 ``` **图 2:ChannelGroup 的示意性描述** DIO 驱动提供以下服务: - Dio SWS 应定义单独为输出通道、为端口或为通道组修改电平的函数。 - Dio SWS 应定义单独读取输入和输出(参见 SWS_Dio_00083)通道的电平、为端口或为通道组的函数。 ``` port read channel channel group DIO service port write channel channel group ``` **图 3:DIO 服务** ⌋ (SRS_Dio_12004, SRS_Dio_12007) **[SWS_Dio_00060]** ⌈Dio 模块的所有读/写函数都应是可重入的。 原因:DIO 驱动可由不同的上层处理程序或驱动访问。这些上层模块可能并发地访问驱动。⌋ () **[SWS_Dio_00026]** ⌈Dio 模块的配置过程应为每个已配置的 DIO 通道、端口和组提供符号名称。⌋ (SRS_Dio_12355) ### 7.2 初始化 #### 7.2.1 背景与原理 硬件的初始化由 PORT 驱动完成。 #### 7.2.2 需求 **[SWS_Dio_00001]** ⌈Dio 模块不应提供用于硬件初始化的接口。Port 驱动执行此操作。⌋ (SRS_BSW_00344, SRS_SPAL_12064, SRS_SPAL_12461, SRS_SPAL_12462, SRS_SPAL_12463) ### 7.3 运行时重新配置 #### 7.3.1 背景与原理 运行时重新配置由 PORT 驱动提供。 #### 7.3.2 需求 **[SWS_Dio_00002]** ⌈PORT 驱动应提供运行时端口引脚方向的重新配置。⌋ (SRS_BSW_00344, SRS_SPAL_12064, SRS_SPAL_12461, SRS_SPAL_12462, SRS_SPAL_12463) ### 7.4 DIO 写服务 #### 7.4.1 背景与原理 DIO 驱动提供服务以将数据传输到微控制器的引脚。 #### 7.4.2 需求 **[SWS_Dio_00064]** ⌈Dio 模块的写函数应适用于输入和输出通道。⌋ (SRS_Dio_12352) **[SWS_Dio_00070]** ⌈如果在输入通道上使用 Dio 写函数,则其应对物理输出电平没有影响。⌋ (SRS_Dio_12352) **[SWS_Dio_00109]** ⌈如果硬件支持,则当端口驱动将引脚配置为 DIO 输出引脚时,Dio 模块应设置/清除输入通道的输出数据锁存器,以便从引脚输出所需的电平。⌋ () **[SWS_Dio_00119]** ⌈如果启用了开发错误并发生错误,则 Dio 模块的写函数不应处理写命令。⌋ (SRS_SPAL_12448) ##### 7.4.2.1 DIO 通道写服务 **[SWS_Dio_00006]** ⌈Dio_WriteChannel 函数应将单个 DIO 通道的电平设置为 STD_HIGH 或 STD_LOW。⌋ (SRS_Dio_12005) ##### 7.4.2.2 DIO 端口写服务 **[SWS_Dio_00007]** ⌈Dio_WritePort 函数应同时设置所有输出通道的电平。位值 '0' 将相应的通道设置为物理 STD_LOW,位值 '1' 将相应的通道设置为物理 STD_HIGH。⌋ (SRS_Dio_12003) **[SWS_Dio_00004]** ⌈Dio_WritePort 函数应确保不影响该端口输入通道的功能。⌋ (SRS_Dio_12003) ##### 7.4.2.3 DIO 通道组写服务 **[SWS_Dio_00008]** ⌈Dio_WriteChannelGroup 函数应同时设置相邻 DIO 通道的子集(通道组)。位值 '0' 将相应的通道设置为物理 STD_LOW,位值 '1' 将相应的通道设置为物理 STD_HIGH。⌋ (SRS_Dio_12004) ##### 7.4.2.4 DIO 屏蔽端口写服务 **[SWS_Dio_00200]** ⌈Dio_MaskedWritePort 函数应同时设置所选输出通道的电平。 Mask 参数指定哪些位被选择:位值 '0' 表示相应的通道未被选择,位值 '1' 表示相应的通道被选择。 Level 参数指定物理电平:位值 '0' 将相应的通道设置为物理 STD_LOW,位值 '1' 将相应的通道设置为物理 STD_HIGH。⌋ (SRS_Dio_12003) **[SWS_Dio_00201]** ⌈Dio_MaskedWritePort 函数应确保不影响该端口输入通道的功能。⌋ (SRS_Dio_12003) ### 7.5 DIO 读服务 #### 7.5.1 背景与原理 DIO 驱动提供服务以从微控制器的引脚传输数据。 #### 7.5.2 需求 **[SWS_Dio_00012]** ⌈Dio 模块的读函数应适用于输入和输出通道。⌋ (SRS_Dio_12352) **[SWS_Dio_00118]** ⌈如果启用了开发错误并发生错误,则 Dio 模块的读函数应返回值 '0'。⌋ (SRS_SPAL_12448) ##### 7.5.2.1 DIO 通道读服务 **[SWS_Dio_00011]** ⌈Dio_ReadChannel 函数应读取单个 DIO 通道的电平。⌋ (SRS_Dio_12008) ##### 7.5.2.2 DIO 端口读服务 **[SWS_Dio_00013]** ⌈Dio_ReadPort 函数应读取一个端口的所有通道的电平。位值 '0' 表示相应的通道是物理 STD_LOW,位值 '1' 表示相应的通道是物理 STD_HIGH。⌋ (SRS_Dio_12006) ##### 7.5.2.3 DIO 通道组读服务 **[SWS_Dio_00014]** ⌈Dio_ReadChannelGroup 函数应读取 DIO 通道组的电平。位值 '0' 表示相应的通道是物理 STD_LOW,位值 '1' 表示相应的通道是物理 STD_HIGH。⌋ (SRS_Dio_12007) ##### 7.5.2.4 DIO 输出引脚的回读 **[SWS_Dio_00083]** ⌈如果微控制器支持直接回读引脚值,则当 Dio 模块的读函数用于配置为输出通道的通道时,它们应提供真实的引脚电平。⌋ (SRS_Dio_12352) **[SWS_Dio_00084]** ⌈如果微控制器不支持直接回读引脚值,则当 Dio 模块的读函数用于配置为输出通道的通道时,它们应提供输出寄存器的值。⌋ (SRS_Dio_12352) ### 7.6 错误分类 #### 7.6.1 开发错误 **[SWS_Dio_00175]** ⌈请求了无效的通道。 相关错误代码:DIO_E_PARAM_INVALID_CHANNEL_ID 值:[hex]:0x0A ⌋ () **[SWS_Dio_00177]** ⌈请求了无效的端口。 相关错误代码:DIO_E_PARAM_INVALID_PORT_ID 值:[hex]:0x14 ⌋ ( ) **[SWS_Dio_00178]** ⌈请求了无效的通道组。 相关错误代码:DIO_E_PARAM_INVALID_GROUP 值:[hex]:0x1F ⌋ () **[SWS_Dio_00188]** ⌈使用 NULL 指针调用 API 服务。 相关错误代码:DIO_E_PARAM_POINTER 值:[hex]:0x20 ⌋ () #### 7.6.2 运行时错误 无运行时错误。 #### 7.6.3 瞬态故障 无瞬态故障。 #### 7.6.4 生产错误 本模块未指定任何生产错误。 ### 7.7 错误检测 #### 7.7.1 API 参数检查 **[SWS_Dio_00074]** ⌈如果启用了开发错误检测,则 Dio_ReadChannel、Dio_WriteChannel 和 Dio_FlipChannel 服务应检查 "ChannelId" 参数在当前配置中是否有效。如果 "ChannelId" 参数无效,则函数应向 DET 报告错误代码 DIO_E_PARAM_INVALID_CHANNEL_ID。⌋ (SRS_BSW_00323, SRS_SPAL_12448) **[SWS_Dio_00075]** ⌈如果启用了开发错误检测,则 Dio_ReadPort、Dio_WritePort 和 Dio_MaskedWritePort 函数应检查 "PortId" 参数在当前配置中是否有效。如果 "PortId" 参数无效,则函数应向 DET 报告错误代码 DIO_E_PARAM_INVALID_PORT_ID。⌋ (SRS_BSW_00323, SRS_SPAL_12448) **[SWS_Dio_00114]** ⌈如果启用了开发错误检测,则 Dio_ReadChannelGroup 和 Dio_WriteChannelGroup 函数应检查 "ChannelGroupIdPtr" 参数在当前配置中是否有效。如果 "ChannelGroupIdPtr" 参数无效,则函数应向 DET 报告错误代码 DIO_E_PARAM_INVALID_GROUP。⌋ (SRS_BSW_00323, SRS_SPAL_12448) ## 8 API 规范 ### 8.1 导入的类型 本章列出了从以下模块包含的所有类型: **[SWS_Dio_00131]** ⌈ | 模块 | 头文件 | 导入的类型 | |---|---|---| | Std_Types | StandardTypes.h | Std_ReturnType | | | StandardTypes.h | Std_VersionInfoType | ⌋ () ### 8.2 类型定义 **[SWS_Dio_00103]** ⌈DIO 驱动定义的类型中端口宽度应是 DIO 驱动可能访问的 MCU 上最大端口的大小。⌋ () #### 8.2.1 Dio_ChannelType **[SWS_Dio_00182]** ⌈ | 项目 | 内容 | |---|---| | Name(名称) | Dio_ChannelType | | Type(类型) | uint | | Range(范围) | 这是实现特定的,但并非所有值在类型内可能都有效 — 应涵盖所有可用的 DIO 通道。 | | Description(描述) | DIO 通道的数字 ID。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00015]** ⌈类型为 Dio_ChannelType 的参数包含 DIO 通道的数字 ID。⌋ () **[SWS_Dio_00180]** ⌈ID 的映射是实现特定的但不可配置。⌋ () **[SWS_Dio_00017]** ⌈对于 Dio_ChannelType 类型的参数值,Dio 的用户应使用配置描述提供的符号名称。 此外,SWS_Dio_00103 适用于类型 Dio_ChannelType。⌋ (SRS_SPAL_12263, SRS_Dio_12355) #### 8.2.2 Dio_PortType **[SWS_Dio_00183]** ⌈ | 项目 | 内容 | |---|---| | Name(名称) | Dio_PortType | | Type(类型) | uint | | Range(范围) | 0..<端口数> — 应涵盖所有可用的 DIO 端口。 | | Description(描述) | DIO 端口的数字 ID。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00018]** ⌈类型为 Dio_PortType 的参数包含 DIO 端口的数字 ID。⌋ () **[SWS_Dio_00181]** ⌈ID 的映射是实现特定的但不可配置。⌋ () **[SWS_Dio_00020]** ⌈对于 Dio_PortType 类型的参数值,用户应使用配置描述提供的符号名称。 此外,SWS_Dio_00103 适用于类型 Dio_PortType。⌋ (SRS_SPAL_12263, SRS_Dio_12355) #### 8.2.3 Dio_ChannelGroupType **[SWS_Dio_00184]** ⌈ | 项目 | 内容 | | | |---|---|---|---| | Name(名称) | Dio_ChannelGroupType | | | | Type(类型) | Structure | | | | Element(元素) | uint8/16/32 | mask | 此元素屏蔽定义通道组的位置。 | | | uint8 | offset | 此元素应是从 LSB 算起的通道组在端口上的位置。 | | | Dio_PortType | port | 这应是定义通道组的端口。 | | Description(描述) | 通道组的类型定义,由端口内的几个相邻通道组成。 | | | | Available via(可用位置) | Dio.h | | | ⌋ () **[SWS_Dio_00021]** ⌈Dio_ChannelGroupType 是通道组的类型定义,由端口内的几个相邻通道组成。⌋ () **[SWS_Dio_00022]** ⌈对于 Dio_ChannelGroupType 类型的参数值,用户应使用配置描述提供的符号名称。 此外,SWS_Dio_00056 适用于类型 Dio_ChannelGroupType。⌋ (SRS_SPAL_12263, SRS_Dio_12355) #### 8.2.4 Dio_LevelType **[SWS_Dio_00185]** ⌈ | 项目 | 内容 | |---|---| | Name(名称) | Dio_LevelType | | Type(类型) | uint8 | | Range(范围) | STD_LOW — 0x00 — 物理状态 0V;STD_HIGH — 0x01 — 物理状态 5V 或 3.3V | | Description(描述) | 这些是 DIO 通道可能具有的电平(输入或输出) | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00023]** ⌈Dio_LevelType 是 DIO 通道可能具有的电平的类型(输入或输出)。⌋ () #### 8.2.5 Dio_PortLevelType **[SWS_Dio_00186]** ⌈ | 项目 | 内容 | |---|---| | Name(名称) | Dio_PortLevelType | | Type(类型) | uint | | Range(范围) | 0...xxx — 如果 µC 拥有不同端口宽度的端口(例如 4、8、16...Bit),则 Dio_PortLevelType 继承最大端口的大小 | | Description(描述) | 如果 µC 拥有不同端口宽度的端口(例如 4、8、16...Bit),则 Dio_PortLevelType 继承最大端口的大小。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00024]** ⌈Dio_PortLevelType 是 DIO 端口值的类型。 此外,SWS_Dio_00103 适用于类型 Dio_PortLevelType。⌋ () ### 8.3 函数定义 这是为上层模块提供的函数列表。 #### 8.3.1 Dio_ReadChannel **[SWS_Dio_00133]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_ReadChannel | | Syntax(语法) | Dio_LevelType Dio_ReadChannel(Dio_ChannelType ChannelId) | | Service ID[hex](服务 ID) | 0x00 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | ChannelId — DIO 通道的 ID | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | Dio_LevelType — STD_HIGH:相应引脚的物理电平为 STD_HIGH;STD_LOW:相应引脚的物理电平为 STD_LOW | | Description(描述) | 返回指定 DIO 通道的值。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00027]** ⌈Dio_ReadChannel 函数应返回指定 DIO 通道的值。 关于 Dio_ReadChannel 函数的返回值,需求 [SWS_Dio_00083] 和 [SWS_Dio_00084] 适用。 此外,需求 SWS_Dio_00005、SWS_Dio_00118 和 SWS_Dio_00026 适用于 Dio_ReadChannel 函数。⌋ (SRS_Dio_12008) #### 8.3.2 Dio_WriteChannel **[SWS_Dio_00134]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_WriteChannel | | Syntax(语法) | void Dio_WriteChannel(Dio_ChannelType ChannelId, Dio_LevelType Level) | | Service ID[hex](服务 ID) | 0x01 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | ChannelId — DIO 通道的 ID;Level — 要写入的值 | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | None(无) | | Description(描述) | 设置通道电平的服务。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00028]** ⌈如果指定的通道配置为输出通道,则 Dio_WriteChannel 函数应为指定的通道设置指定的 Level。⌋ (SRS_Dio_12005) **[SWS_Dio_00029]** ⌈如果指定的通道配置为输入通道,则 Dio_WriteChannel 函数应对物理输出没有影响。⌋ (SRS_Dio_12005) **[SWS_Dio_00079]** ⌈如果指定的通道配置为输入通道,则 Dio_WriteChannel 函数应对下一个读服务的结果没有影响。 此外,需求 SWS_Dio_00005、SWS_Dio_00119 和 SWS_Dio_00026 适用于 Dio_WriteChannel 函数。⌋ (SRS_Dio_12005) #### 8.3.3 Dio_ReadPort **[SWS_Dio_00135]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_ReadPort | | Syntax(语法) | Dio_PortLevelType Dio_ReadPort(Dio_PortType PortId) | | Service ID[hex](服务 ID) | 0x02 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | PortId — DIO 端口的 ID | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | Dio_PortLevelType — 该端口所有通道的电平 | | Description(描述) | 返回该端口所有通道的电平。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00031]** ⌈Dio_ReadPort 函数应返回该端口所有通道的电平。⌋ (SRS_Dio_12006) **[SWS_Dio_00104]** ⌈当使用 Dio_ReadPort 函数读取小于 Dio_PortLevelType 的端口时(参见 [SWS_Dio_00103]),函数应将对应于未定义端口引脚的位设置为 0。 此外,需求 SWS_Dio_00005、SWS_Dio_00118 和 SWS_Dio_00026 适用于 Dio_ReadPort 函数。⌋ () #### 8.3.4 Dio_WritePort **[SWS_Dio_00136]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_WritePort | | Syntax(语法) | void Dio_WritePort(Dio_PortType PortId, Dio_PortLevelType Level) | | Service ID[hex](服务 ID) | 0x03 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | PortId — DIO 端口的 ID;Level — 要写入的值 | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | None(无) | | Description(描述) | 设置端口值的服务。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00034]** ⌈Dio_WritePort 函数应为指定的端口设置指定的值。⌋ (SRS_Dio_12003) **[SWS_Dio_00035]** ⌈当调用 Dio_WritePort 函数时,配置为输入的 DIO 通道应保持不变。⌋ (SRS_Dio_12003) **[SWS_Dio_00105]** ⌈当使用 Dio_WritePort 函数写入小于 Dio_PortLevelType 的端口时(参见 [SWS_Dio_00103]),函数应忽略 MSB。⌋ () **[SWS_Dio_00108]** ⌈Dio_WritePort 函数对此端口内配置为输入通道的通道没有影响。 此外,需求 SWS_Dio_00005、SWS_Dio_00119 和 SWS_Dio_00026 适用于 Dio_WritePort 函数。⌋ () #### 8.3.5 Dio_ReadChannelGroup **[SWS_Dio_00137]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_ReadChannelGroup | | Syntax(语法) | Dio_PortLevelType Dio_ReadChannelGroup(const Dio_ChannelGroupType* ChannelGroupIdPtr) | | Service ID[hex](服务 ID) | 0x04 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | ChannelGroupIdPtr — 指向 ChannelGroup 的指针 | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | Dio_PortLevelType — 端口相邻位的子集的电平 | | Description(描述) | 此服务读取端口相邻位的子集。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00037]** ⌈Dio_ReadChannelGroup 函数应读取端口相邻位的子集(通道组)。⌋ (SRS_Dio_12007) **[SWS_Dio_00092]** ⌈Dio_ReadChannelGroup 函数应执行通道组的屏蔽。⌋ (SRS_Dio_12007) **[SWS_Dio_00093]** ⌈Dio_ReadChannelGroup 函数应执行移位,以便函数读取的值与 LSB 对齐。 此外,需求 SWS_Dio_00005、SWS_Dio_00056、SWS_Dio_00083、SWS_Dio_00084、SWS_Dio_00118 和 SWS_Dio_00026 适用于 Dio_ReadChannelGroup 函数。⌋ (SRS_Dio_12007) #### 8.3.6 Dio_WriteChannelGroup **[SWS_Dio_00138]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_WriteChannelGroup | | Syntax(语法) | void Dio_WriteChannelGroup(const Dio_ChannelGroupType* ChannelGroupIdPtr, Dio_PortLevelType Level) | | Service ID[hex](服务 ID) | 0x05 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | ChannelGroupIdPtr — 指向 ChannelGroup 的指针;Level — 要写入的值 | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | None(无) | | Description(描述) | 将端口相邻位的子集设置为指定电平的服务。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00039]** ⌈Dio_WriteChannelGroup 函数应将端口相邻位的子集(通道组)设置为指定的电平。⌋ (SRS_Dio_12004) **[SWS_Dio_00040]** ⌈Dio_WriteChannelGroup 不应更改端口的其余通道和配置为输入的通道。⌋ (SRS_Dio_12004) **[SWS_Dio_00090]** ⌈Dio_WriteChannelGroup 函数应执行通道组的屏蔽。⌋ (SRS_Dio_12004) **[SWS_Dio_00091]** ⌈Dio_WriteChannelGroup 函数应执行移位,以便函数写入的值与 LSB 对齐。 此外,需求 SWS_Dio_00005、SWS_Dio_00056、SWS_Dio_00119 和 SWS_Dio_00026 适用于 Dio_WriteChannelGroup 函数。⌋ (SRS_Dio_12004) #### 8.3.7 Dio_GetVersionInfo **[SWS_Dio_00139]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_GetVersionInfo | | Syntax(语法) | void Dio_GetVersionInfo(Std_VersionInfoType* VersionInfo) | | Service ID[hex](服务 ID) | 0x12 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | None(无) | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | VersionInfo — 用于存储此模块版本信息的指针 | | Return value(返回值) | None(无) | | Description(描述) | 获取此模块的版本信息的服务。 | | Available via(可用位置) | Dio.h | ⌋ (SRS_BSW_00411) **[SWS_Dio_00189]** ⌈如果为 DIO 驱动模块启用了 DET,则函数 Dio_GetVersionInfo 应在参数为 NULL 指针时引发 DIO_E_PARAM_POINTER 并在不执行任何操作的情况下返回。 另请参见第 10 章。⌋ () #### 8.3.8 Dio_FlipChannel **[SWS_Dio_00190]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_FlipChannel | | Syntax(语法) | Dio_LevelType Dio_FlipChannel(Dio_ChannelType ChannelId) | | Service ID[hex](服务 ID) | 0x11 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | ChannelId — DIO 通道的 ID | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | Dio_LevelType — STD_HIGH:相应引脚的物理电平为 STD_HIGH;STD_LOW:相应引脚的物理电平为 STD_LOW | | Description(描述) | 翻转(从 1 变为 0 或从 0 变为 1)通道电平并返回翻转后通道电平的服务。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00191]** ⌈如果指定的通道配置为输出通道,则 Dio_FlipChannel 函数应读取通道的电平(需求 [SWS_Dio_00083] 和 [SWS_Dio_00084] 适用)并将其反转,然后将反转后的电平写入通道。返回值应为指定通道的反转电平。⌋ () **[SWS_Dio_00192]** ⌈如果指定的通道配置为输入通道,则 Dio_FlipChannel 函数应对物理输出没有影响。返回值应为指定通道的电平。⌋ () **[SWS_Dio_00193]** ⌈如果指定的通道配置为输入通道,则 Dio_FlipChannel 函数应对下一个读服务的结果没有影响。 此外,需求 SWS_Dio_00005、SWS_Dio_00119 和 SWS_Dio_00026 适用于 Dio_FlipChannel 函数。 另请参见第 10 章。⌋ () #### 8.3.9 Dio_MaskedWritePort **[SWS_Dio_00300]** ⌈ | 项目 | 内容 | |---|---| | Service name(服务名称) | Dio_MaskedWritePort | | Syntax(语法) | void Dio_MaskedWritePort(Dio_PortType PortId, Dio_PortLevelType Level, Dio_PortLevelType Mask) | | Service ID[hex](服务 ID) | 0x13 | | Sync/Async(同步/异步) | Synchronous(同步) | | Reentrancy(可重入性) | Reentrant(可重入) | | Parameters (in)(输入参数) | PortId — DIO 端口的 ID;Level — 要写入的值;Mask — 端口中要屏蔽的通道 | | Parameters (inout)(输入输出参数) | None(无) | | Parameters (out)(输出参数) | None(无) | | Return value(返回值) | None(无) | | Description(描述) | 使用所需屏蔽设置给定端口值的服务。 | | Available via(可用位置) | Dio.h | ⌋ () **[SWS_Dio_00202]** ⌈Dio_MaskedWritePort 函数应如果 Mask 中相应的位为 '1',则为指定端口中的通道设置指定的值。⌋ (SRS_Dio_12003) **[SWS_Dio_00203]** ⌈当调用 Dio_MaskedWritePort 函数时,配置为输入的 DIO 通道应保持不变。⌋ (SRS_Dio_12003) **[SWS_Dio_00204]** ⌈当使用 Dio_MaskedWritePort 函数写入小于 Dio_PortLevelType 的端口时(参见 [SWS_Dio_00103]),函数应忽略 MSB。⌋ () ### 8.4 回调通知 本章列出了 Dio 模块向下层提供的所有函数。 Dio 模块不提供任何回调通知。与 Dio 模块功能相关的回调在另一个模块(ICU 驱动和/或复杂驱动)中实现。 ### 8.5 调度函数 本章列出了由基本软件模块调度器直接调用的所有函数。 Dio 模块没有调度函数。 ### 8.6 预期接口 本章列出了 Dio 模块需要从其他模块获取的所有函数。 #### 8.6.1 强制接口 无。 #### 8.6.2 可选接口 本章定义了满足模块可选功能所需的所有接口。 **[SWS_Dio_00140]** ⌈ | API 函数 | 头文件 | 描述 | |---|---|---| | Det_ReportError | Det.h | 用于报告开发错误的服务。 | ⌋ () ## 9 时序图 下图显示了调用 Dio_ReadChannel() 和 Dio_WriteChannel() 服务时的序列。它们显示正常操作模式和带错误条件的开发模式。对于没有错误的开发模式,正常操作模式的图有效。由于第 8.3 章中定义的所有其他服务都具有完全相同的同步行为,因此本文档中没有其他时序图。 ### 9.1 从数字 I/O 读取值 - 1 ``` User «module» «Peripheral» Dio Dio Hardware Dio_ReadChannel(Dio_LevelType, Dio_ChannelType) Request() Level() Dio_ReadChannel=STD_HIGH or STD_LOW() Status: proposed (as per SWS Dio 2.0.3) Description: Diagram valid for: - Normal Operation Mode / No Error - Normal Operation Mode / Error Occured - Development Error / No Error ``` **图 4:读服务时序图(正常操作模式)** ### 9.2 从数字 I/O 读取值 - 2 ``` «module» User «module» «Peripheral» Det Dio Dio Hardware Dio_ReadChannel(Dio_ChannelType): Dio_LevelType Det_ReportError(Std_ReturnType, uint16, uint8, uint8, uint8) Det_ReportError() Dio_ReadChannel=STD_LOW() Status: proposed (as per SWS Dio 2.0.3) Description: Diagram valid for: - Development Error / Error Occured ``` **图 5:读服务时序图(开发错误模式)** ### 9.3 将值写入数字 I/O - 1 ``` User «module» «Peripheral» Dio Dio Hardware Dio_WriteChannel(Dio_ChannelType, Dio_LevelType) Level() Dio_WriteChannel() Status: proposed (as per SWS Dio 2.0.3) Description: Diagram valid for: - Normal Operation Mode / No Error - Normal Operation Mode / Error Occured - Development Error / No Error ``` **图 6:写服务时序图(正常操作模式)** ### 9.4 将值写入数字 I/O - 2 ``` «module» User «module» «Peripheral» Det Dio Dio Hardware Dio_WriteChannel(Dio_ChannelType, Dio_LevelType) Det_ReportError(Std_ReturnType, uint16, uint8, uint8, uint8) Det_ReportError() Dio_WriteChannel() Status: proposed (as per SWS Dio 2.0.3) Description: Diagram valid for: - Development Error / Error Occured ``` **图 7:写服务时序图(开发错误模式)** ## 10 配置规范 本章定义配置参数及其到容器的聚类。 ### 10.1 容器和配置参数 以下章节总结了所有配置参数。参数的详细含义在第 7 章和第 8 章中描述。 **[SWS_Dio_00205] DRAFT** ⌈DIO 模块应拒绝实现不支持的分区映射的配置。⌋ () #### 10.1.1 变体 **[SWS_Dio_00129]** ⌈实现必须支持以下变体中的至少一个: - VARIANT-PRE-COMPILE - VARIANT-LINK-TIME⌋ () #### 10.1.2 Dio | SWS Item(项目) | ECUC_Dio_00154 | |---|---| | Module Name(模块名称) | Dio | | Module Description(模块描述) | Dio(数字 IO)模块的配置。 | | Post-Build Variant Support(后构建变体支持) | false | | Supported Config Variants(支持的配置变体) | VARIANT-LINK-TIME, VARIANT-PRE-COMPILE | **包含的容器(Included Containers)** | 容器名称 | 多个性 | 范围 / 依赖 | |---|---|---| | DioConfig | 1 | 此容器包含 AUTOSAR DIO 模块的配置参数和子容器。 | | DioGeneral | 1 | 通用 DIO 模块配置参数。 | #### 10.1.3 DioGeneral | SWS Item(项目) | ECUC_Dio_00141 | |---|---| | Container Name(容器名称) | DioGeneral | | Description(描述) | 通用 DIO 模块配置参数。 | **配置参数** | SWS Item(项目) | ECUC_Dio_00142 | |---|---| | Name(名称) | DioDevErrorDetect | | Parent Container(父容器) | DioGeneral | | Description(描述) | 打开或关闭开发错误检测和通知。true:启用检测和通知;false:禁用检测和通知。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucBooleanParamDef | | Default value(默认值) | false | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: local | | SWS Item(项目) | ECUC_Dio_00153 | |---|---| | Name(名称) | DioFlipChannelApi | | Parent Container(父容器) | DioGeneral | | Description(描述) | 从代码中添加/删除服务 Dio_FlipChannel()。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucBooleanParamDef | | Default value(默认值) | -- | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: local | | SWS Item(项目) | ECUC_Dio_00155 | |---|---| | Name(名称) | DioMaskedWritePortApi | | Parent Container(父容器) | DioGeneral | | Description(描述) | 从代码中添加/删除服务 Dio_MaskedWritePort()。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucBooleanParamDef | | Default value(默认值) | false | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: local | | SWS Item(项目) | ECUC_Dio_00143 | |---|---| | Name(名称) | DioVersionInfoApi | | Parent Container(父容器) | DioGeneral | | Description(描述) | 从代码中添加/删除服务 Dio_GetVersionInfo()。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucBooleanParamDef | | Default value(默认值) | false | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: local | | SWS Item(项目) | ECUC_Dio_00156 | |---|---| | Name(名称) | DioEcucPartitionRef | | Parent Container(父容器) | DioGeneral | | Description(描述) | 将 DIO 驱动映射到零个或多个 ECUC 分区,以使模块的 API 在该分区中可用。Tags: atp.Status=draft | | Multiplicity(多个性) | 0..* | | Type(类型) | Reference to [ EcucPartition ] | | Post-Build Variant Multiplicity(后构建变体多个性) | false | | Post-Build Variant Value(后构建变体值) | false | | Multiplicity Configuration Class(多个性配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | 无包含容器。 #### 10.1.4 DioPort | SWS Item(项目) | ECUC_Dio_00144 | |---|---| | Container Name(容器名称) | DioPort | | Description(描述) | 单个 DIO 端口的配置,由通道和可能的通道组组成。注意:此容器定义未明确定义符号名称参数。相反,容器的短名称将在 ECU 配置描述中用于指定端口的符号名称。 | **配置参数** | SWS Item(项目) | ECUC_Dio_00145 | |---|---| | Name(名称) | DioPortId | | Parent Container(父容器) | DioPort | | Description(描述) | DIO 端口的数字标识符。并非所有 MCU 端口都可用于 DIO,因此所有 ID 的列表中可能存在"间隙"。此值将分配给 DIO 端口符号名称(即 DioPort 容器的 SHORT-NAME)。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucIntegerParamDef (Symbolic Name generated for this parameter)(为此参数生成的符号名称) | | Range(范围) | 0 .. 4294967295 | | Default value(默认值) | -- | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | | SWS Item(项目) | ECUC_Dio_00157 | |---|---| | Name(名称) | DioPortEcucPartitionRef | | Parent Container(父容器) | DioPort | | Description(描述) | 将 DIO 端口映射到零个或多个 ECUC 分区。引用的 ECUC 分区是 DIO 驱动所映射到的 ECUC 分区的子集。Tags: atp.Status=draft | | Multiplicity(多个性) | 0..* | | Type(类型) | Reference to [ EcucPartition ] | | Post-Build Variant Multiplicity(后构建变体多个性) | false | | Post-Build Variant Value(后构建变体值) | false | | Multiplicity Configuration Class(多个性配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | **包含的容器(Included Containers)** | 容器名称 | 多个性 | 范围 / 依赖 | |---|---|---| | DioChannel | 0..* | 单个 DIO 通道的配置。 | | DioChannelGroup | 0..* | DIO 通道组的定义和配置。通道组表示由逻辑组表示的几个相邻 DIO 通道。注意:此容器定义未明确定义符号名称参数。相反,容器的短名称将在 ECU 配置描述中用于指定通道组的符号名称。 | **[SWS_Dio_00206] DRAFT** ⌈由 DioPortEcucPartitionRef 引用的 ECUC 分区应为 DioEcucPartitionRef 引用的 ECUC 分区的子集。⌋() #### 10.1.5 DioChannel | SWS Item(项目) | ECUC_Dio_00146 | |---|---| | Container Name(容器名称) | DioChannel | | Description(描述) | 单个 DIO 通道的配置。 | **配置参数** | SWS Item(项目) | ECUC_Dio_00147 | |---|---| | Name(名称) | DioChannelId | | Parent Container(父容器) | DioChannel | | Description(描述) | DIO 通道的通道 Id。此值将分配给符号名称。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucIntegerParamDef (Symbolic Name generated for this parameter)(为此参数生成的符号名称) | | Range(范围) | 0 .. 4294967295 | | Default value(默认值) | -- | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | | SWS Item(项目) | ECUC_Dio_00158 | |---|---| | Name(名称) | DioChannelEcucPartitionRef | | Parent Container(父容器) | DioChannel | | Description(描述) | 将 DIO 通道映射到零个或多个 ECUC 分区。引用的 ECUC 分区是相关 DIO 端口所映射到的 ECUC 分区的子集。Tags: atp.Status=draft | | Multiplicity(多个性) | 0..* | | Type(类型) | Reference to [ EcucPartition ] | | Post-Build Variant Multiplicity(后构建变体多个性) | false | | Post-Build Variant Value(后构建变体值) | false | | Multiplicity Configuration Class(多个性配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | 无包含容器。 **[SWS_Dio_00207] DRAFT** ⌈由 DioChannelEcucPartitionRef 引用的 ECUC 分区应为 DioPortEcucPartitionRef 引用的 ECUC 分区的子集。⌋() #### 10.1.6 DioChannelGroup | SWS Item(项目) | ECUC_Dio_00148 | |---|---| | Container Name(容器名称) | DioChannelGroup | | Description(描述) | DIO 通道组的定义和配置。通道组表示由逻辑组表示的几个相邻 DIO 通道。注意:此容器定义未明确定义符号名称参数。相反,容器的短名称将在 ECU 配置描述中用于指定通道组的符号名称。 | **配置参数** | SWS Item(项目) | ECUC_Dio_00149 | |---|---| | Name(名称) | DioChannelGroupIdentification | | Parent Container(父容器) | DioChannelGroup | | Description(描述) | DIO 通道组在 DIO API 中由指向数据结构(类型为 Dio_ChannelGroupType)的指针标识。该数据结构包含通道组信息。此参数包含必须插入到调用模块的 API 调用中的代码片段,以获取内存中保存通道组信息的变量的地址。示例值为 "&MyDioGroup1" 或 "&MyDioGroupArray[0]"。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucStringParamDef (Symbolic Name generated for this parameter)(为此参数生成的符号名称) | | Default value(默认值) | -- | | maxLength | -- | | minLength | -- | | regularExpression | -- | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | | SWS Item(项目) | ECUC_Dio_00150 | |---|---| | Name(名称) | DioPortMask | | Parent Container(父容器) | DioChannelGroup | | Description(描述) | 这应是定义通道组位置的屏蔽。通道应由同一端口中的相邻位组成。数据类型取决于端口宽度。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucIntegerParamDef | | Range(范围) | 0 .. 4294967295 | | Default value(默认值) | -- | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X VARIANT-PRE-COMPILE;Link time — X VARIANT-LINK-TIME;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: local | | SWS Item(项目) | ECUC_Dio_00151 | |---|---| | Name(名称) | DioPortOffset | | Parent Container(父容器) | DioChannelGroup | | Description(描述) | 通道组在端口上的位置,从 LSB 算起。此值可从 DioPortMask 派生。calculationFormula = DioPortMask 中设置为 '1' 的第一位的位置,从 LSB 算起。 | | Multiplicity(多个性) | 1 | | Type(类型) | EcucIntegerParamDef | | Range(范围) | 0 .. 31 | | Default value(默认值) | -- | | Post-Build Variant Value(后构建变体值) | false | | Value Configuration Class(值配置类) | Pre-compile time — X VARIANT-PRE-COMPILE;Link time — X VARIANT-LINK-TIME;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: local | | SWS Item(项目) | ECUC_Dio_00159 | |---|---| | Name(名称) | DioChannelGroupEcucPartitionRef | | Parent Container(父容器) | DioChannelGroup | | Description(描述) | 将 DIO 通道组映射到零个或多个 ECUC 分区。引用的 ECUC 分区是相关 DIO 端口所映射到的 ECUC 分区的子集。Tags: atp.Status=draft | | Multiplicity(多个性) | 0..* | | Type(类型) | Reference to [ EcucPartition ] | | Post-Build Variant Multiplicity(后构建变体多个性) | false | | Post-Build Variant Value(后构建变体值) | false | | Multiplicity Configuration Class(多个性配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Value Configuration Class(值配置类) | Pre-compile time — X All Variants;Link time — --;Post-build time — -- | | Scope / Dependency(范围/依赖) | scope: ECU | 无包含容器。 **[SWS_Dio_00208] DRAFT** ⌈由 DioChannelGroupEcucPartitionRef 引用的 ECUC 分区应为 DioPortEcucPartitionRef 引用的 ECUC 分区的子集。⌋ () #### 10.1.7 DioConfig | SWS Item(项目) | ECUC_Dio_00152 | |---|---| | Container Name(容器名称) | DioConfig | | Description(描述) | 此容器包含 AUTOSAR DIO 模块的配置参数和子容器。 | **包含的容器(Included Containers)** | 容器名称 | 多个性 | 范围 / 依赖 | |---|---|---| | DioPort | 1..* | 单个 DIO 端口的配置,由通道和可能的通道组组成。注意:此容器定义未明确定义符号名称参数。相反,容器的短名称将在 ECU 配置描述中用于指定端口的符号名称。 | ### 10.2 发布信息 有关详细信息,请参阅 SWS_BSWGeneral 中的章节 10.3"Published Information"。 ## 11 不适用的需求 **[SWS_Dio_00195]** ⌈这些需求不适用于本规范。⌋ (SRS_BSW_00101, SRS_BSW_00005, SRS_BSW_00006, SRS_BSW_00007, SRS_BSW_00009, SRS_BSW_00010, SRS_BSW_00160, SRS_BSW_00161, SRS_BSW_00162, SRS_BSW_00164, SRS_BSW_00167, SRS_BSW_00168, SRS_BSW_00170, SRS_BSW_00172, SRS_BSW_00304, SRS_BSW_00306, SRS_BSW_00307, SRS_BSW_00308, SRS_BSW_00309, SRS_BSW_00314, SRS_BSW_00321, SRS_BSW_00325, SRS_BSW_00328, SRS_BSW_00330, SRS_BSW_00331, SRS_BSW_00333, SRS_BSW_00334, SRS_BSW_00335, SRS_BSW_00336, SRS_BSW_00339, SRS_BSW_00341, SRS_BSW_00342, SRS_BSW_00343, SRS_BSW_00347, SRS_BSW_00357, SRS_BSW_00359, SRS_BSW_00360, SRS_BSW_00369, SRS_BSW_00371, SRS_BSW_00373, SRS_BSW_00375, SRS_BSW_00377, SRS_BSW_00378, SRS_BSW_00384, SRS_BSW_00399, SRS_BSW_00400, SRS_BSW_00404, SRS_BSW_00405, SRS_BSW_00406, SRS_BSW_00413, SRS_BSW_00416, SRS_BSW_00417, SRS_BSW_00422, SRS_BSW_00423, SRS_BSW_00424, SRS_BSW_00425, SRS_BSW_00426, SRS_BSW_00427, SRS_BSW_00428, SRS_BSW_00429, SRS_BSW_00432, SRS_BSW_00433, SRS_SPAL_00157, SRS_SPAL_12057, SRS_SPAL_12063, SRS_SPAL_12067, SRS_SPAL_12068, SRS_SPAL_12069, SRS_SPAL_12075, SRS_SPAL_12077, SRS_SPAL_12078, SRS_SPAL_12092, SRS_SPAL_12125, SRS_SPAL_12129, SRS_SPAL_12163, SRS_SPAL_12169, SRS_SPAL_12265, SRS_SPAL_12267) --- ## 翻译说明 1. **文档版本**:本文档翻译自 AUTOSAR Classic Platform Release 4.4.0 的 SWS_DIODriver。 2. **API 标识符**:所有 Dio API(Dio_ReadChannel、Dio_WriteChannel、Dio_ReadPort、Dio_WritePort、Dio_ReadChannelGroup、Dio_WriteChannelGroup、Dio_GetVersionInfo、Dio_FlipChannel、Dio_MaskedWritePort)和类型(Dio_ChannelType、Dio_PortType、Dio_ChannelGroupType、Dio_LevelType、Dio_PortLevelType)保持英文。 3. **需求 ID**:所有 SWS_Dio_xxxxx 和 SRS_Dio_xxxxx、SRS_BSW_xxxxx、SRS_SPAL_xxxxx 需求 ID 均保持原样。 4. **AUTOSAR 方框符**:所有 ⌈⌋ 符号已保留。 5. **配置项名称**:ECUC_Dio_xxxxx 配置项名称保持英文。 6. **完整参考表**:第 6 章"需求可追溯性"的完整表(约 100 项需求映射)请参见原文 PDF。