Files
autosar_standard_spec_v4.4/IO/AUTOSAR_SWS_DIODriver.md
T

1265 lines
60 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Specification of DIO DriverDIO 驱动规范)
> **AUTOSAR CP Release 4.4.0**
## 文档元信息
| 项目 | 内容 |
|------|------|
| Document Title(文档标题) | Specification of DIO DriverDIO 驱动规范) |
| 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 | DIOReadChannelGroup/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
```
**图 1DIO 驱动结构与集成**
## 2 缩略语与缩写
具有局部范围的缩略语和缩写不包含在 AUTOSAR 词汇表中。这些必须出现在本地词汇表中。
| 缩写 / 缩略语 | 描述 |
|---|---|
| DIO channelDIO 通道) | 表示单个通用数字输入/输出引脚。 |
| DIO port(DIO 端口) | 表示由硬件分组的几个 DIO 通道(通常由一个硬件寄存器控制)。示例:Freescale HC08 的 Port A8 位) |
| DIO channel groupDIO 通道组) | 表示由逻辑组表示的几个相邻 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 ModulePort 驱动模块)**
许多端口和端口引脚由 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 行作为示例。完整表见原文 PDFAUTOSAR_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
```
**图 2ChannelGroup 的示意性描述**
DIO 驱动提供以下服务:
- Dio SWS 应定义单独为输出通道、为端口或为通道组修改电平的函数。
- Dio SWS 应定义单独读取输入和输出(参见 SWS_Dio_00083)通道的电平、为端口或为通道组的函数。
```
port
read channel
channel group
DIO service
port
write channel
channel group
```
**图 3DIO 服务** ⌋ (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 — 物理状态 0VSTD_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 通道的 IDLevel — 要写入的值 |
| 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 端口的 IDLevel — 要写入的值 |
| 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 端口的 IDLevel — 要写入的值;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 VariantsLink 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 VariantsLink 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 VariantsLink 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 VariantsLink 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 VariantsLink time — --Post-build time — -- |
| Value Configuration Class(值配置类) | Pre-compile time — X All VariantsLink 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 VariantsLink 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 VariantsLink time — --Post-build time — -- |
| Value Configuration Class(值配置类) | Pre-compile time — X All VariantsLink 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 VariantsLink 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 VariantsLink time — --Post-build time — -- |
| Value Configuration Class(值配置类) | Pre-compile time — X All VariantsLink 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 VariantsLink 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-COMPILELink time — X VARIANT-LINK-TIMEPost-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-COMPILELink time — X VARIANT-LINK-TIMEPost-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 VariantsLink time — --Post-build time — -- |
| Value Configuration Class(值配置类) | Pre-compile time — X All VariantsLink 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 APIDio_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。