目录
7 Functional specification
7.1 Error Classification
本节描述了Dcm模块如何处理在生命周期中可能发生的几类错误。
诊断通信错误通过NRCs直接在ISO协议实现中处理。
所有的错误码都由DCM模块定义,并且具有唯一性。
7.1.1 Development Errors
错误类型 | 错误码 | 值[hex] |
---|---|---|
模块间交互出现超时 | DCM_E_INTERFACE_TIMEOUT | 0x01 |
返回值超出范围 | DCM_E_INTERFACE_RETURN_VALUE | 0x02 |
模块间交互时,Dcm检查到buffer溢出 | DCM_E_INTERFACE_BUFFER_OVERFLOW | 0x03 |
Dcm未初始化 | DCM_E_UNINIT | 0x05 |
Dcm的API函数的参数无效 | DCM_E_PARAM | 0x06 |
Dcm的API函数的参数有NULL指针 | DCM_E_PARAM_POINTER | 0x07 |
Dcm初始化失败 | DCM_E_INIT_FAILED | 0x08 |
编程条件储存失败 ※Dcm_SetProgConditions相关 |
DCM_E_SET_PROG_CONDITIONS_FAIL | 0x09 |
7.1.2 Runtime Errors
错误类型 | 错误码 | 值[hex] |
---|---|---|
Dcm正在调用的函数的参数值无效 或者Dcm调用的函数返回的返回值无效或者指针参数值无效 |
DCM_E_INTERFACE_TIMEOUT | 0x01 |
7.2 General design elements
7.2.1 Submodules within the Dcm module
- Dcm包含以下几个子模块:
- Diagnostic Session Layer (DSL) submodule:
DSL模块负责管理诊断请求和响应的数据流,监控和管理协议的timing,同时管理诊断状态,如会话控制和安全等级。
主要交互模块有:PduR、Dcm—DSD、Dcm—DSP和ComM - Diagnostic Service Dispatcher (DSD) submodule:
- DSD子模块从网络上接收到一个新的诊断请求,并将其转发给数据处理器。数据处理器通常是诊断服务处理(DSP)子模块,它负责实际的诊断服务处理。
- 当数据处理器(例如DSP子模块)触发时,DSD子模块会在网络上传输诊断响应。这意味着,DSP子模块完成诊断请求的处理后,会通知DSD子模块发送响应消息 。
- Diagnostic Service Processing (DSP) submodule:
DSP模块负责执行实际的诊断服务和子服务。
- Diagnostic Session Layer (DSL) submodule:
7.2.2 Negative Response Code (NRC)
- UDS服务和OBD服务的标准协议定义的负响应代码(NRCs),用在Dcm与其他BSW模块以及SW-Cs的接口交互的过程中。
- 这些NRCs在数据类型
Dcm_NegativeResponseCodeType
中定义。 - NRC的传输顺序应符合ISO14229-1 [2]中描述的顺序。
常见的NRC定义如下:
值[hex] | 错误类型 | 注释 |
---|---|---|
0x10 | General Reject | 请求被一般性拒绝,可能是由于服务无法在当前条件下执行。 |
0x11 | Service Not Supported | 请求的服务不被支持。 |
0x12 | Sub-Function Not Supported | 请求的子功能不被支持。 |
0x13 | Incorrect Message Length or Invalid Format | 消息长度不正确或格式无效。 |
0x22 | Conditions Not Correct | 当前条件不允许执行请求的操作。 |
0x31 | Request Out of Range | 请求超出范围。 |
0x33 | Security Access Denied | 安全访问被拒绝。 |
0x7E | Sub-Function Not Supported in Active Session | 当前会话中不支持请求的子功能。 |
0x7F | Service Not Supported in Active Session | 当前会话中不支持请求的服务。 |
7.2.3 Non-volatile information
- DCM应检查非易失性存储管理模块 (NvM) 的读取是否正确。如果非易失性信息未能正确读取,DCM应执行默认操作。默认操作的内容在非易失性数据的章节中记载。
- 如果DCM取消了一个需要访问非易失性存储的服务,则应调用
NvM_CancelJobs()
。
※服务的取消可能是由于达到最大RCRRP NRC(0x78)的数量或协议抢占。
7.2.4 Types
Dcm模块支持的数据类型:
boolean
uint8
uint16
uint32
sint8
sint16
sint32
uint8[n]
※uint8[n]类型(在不同的实现中)可以映射为固定长度或可变长度的数据类型。
DCM应当将非整型数据类型(例如uint8[n])处理为与其大小匹配的整型数据类型,或者在DcmDspDataEndianness
配置为OPAQUE
时,仅将其当成n个字节处理。
例:有一个数据uint8[2]
的数据内容为{ 0x12, 0x34 },在DcmDspDataEndianness
没有配置为OPAQUE
时,Dcm将按照大小端的配置对其进行储存,如果配置为BIG_ENDIAN
,数据将被转化为一个uint16的数据0x1234储存,如果配置为LITTLE_ENDIAN
,则数据将被转化为一个uint16的数据0x3412储存;反之,如果被配置为OPAQUE
,那个Dcm在处理时会严格保证其数据格式,将其当作uint8[2]的数组储存,不转换其中的数据。
DcmDspDataEndianness
的配置对于有符号的数据依然有效(地址由低向高增长,低地址在前):
- 大端模式下最高有效字节(包含符号位)仍然存储在最低内存地址处。符号位不变;
- 小端模式下将最低有效字节存储在最低内存地址处,符号位保持在最高有效字节中。
7.2.4.1 Atomic types overview
基本数据类型一览
ATOMIC | |||||||
---|---|---|---|---|---|---|---|
Date bit size | 1(字节对齐) | 8 | 16 | 32 | 8 | 16 | 32 |
DcmDspDidDataType | BOOLEAN | UINT8 | UINT16 | UINT32 | SINT8 | SINT16 | SINT32 |
DcmDspDataEndianness | N/A | N/A | LE,BE | LE,BE | N/A | LE,BE | LE,BE |
DcmDspDataUsePort | S/R, I/O | ||||||
Resulting ImplType | boolean | UINT8 | UINT16 | UINT32 | SINT8 | SINT16 | SINT32 |
7.2.4.2 Data array types overview
数组类型一览
Field(Static) | |||||||
---|---|---|---|---|---|---|---|
Date bit size | 8-8*N | 16-16*N | 32-32*N | 8-8*N | |||
DcmDspDataByteSize | Any | Any | 必须为2的倍数 | 必须为2的倍数 | 必须为4的倍数 | 必须为4的倍数 | Any |
DcmDspDidDataType | UINT8_N | UINT16_N | UINT32_N | UINT8_DYN | |||
DcmDspDataEndianness | N/A | LE,BE | N/A | ||||
DcmDspDataUsePort | S/R, C/S, FNC, NVM | S/R | C/S, FNC | ||||
Resulting ImplType | DataArrayTypeUint8_(Data) | DataArrayTypeSint8_(Data) | DataArrayTypeUint16_(Data) | DataArrayTypeSint16_(Data) | DataArrayTypeUint32_(Data) | DataArrayTypeSint32_(Data) | DataArrayTypeUint8_(Data) |
7.2.4.3 Data types constraints
如果存在7.2.4.2中所记的数组类型的DcmDspDataType(UINT8_N等),则应配置DcmDspDataByteSize(参考数组类型表格)。
当DcmDspDataType配置为UINT16_N或者SINT16时,DcmDspDataByteSize如果超过2则只能只能是2倍数;
当DcmDspDataType配置为UINT32_N或者SINT32时,DcmDspDataByteSize如果超过4则只能只能是4倍数;
如果DcmDspDataUsePort被配置为USE_DATA_SYNCH_CLIENT_SERVER、USE_DATA_ASYNCH_CLIENT_SERVER和USE_DATA_ASYNCH_CLIENT_SERVER_ERROR时,则DcmDspDataType应该被配置为UINT8_N或者UINT8_DYN;
如果DcmDspDataUsePort被配置为USE_DATA_ASYNCH_FNC_ERROR、USE_DATA_SYNCH_FNC和USE_DATA_ASYNCH_FNC中任一种,则DcmDspDataType应该被配置为UINT8_N或者UINT8_DYN;
如果DcmDspDataUsePort被配置为USE_BLOCK_ID,则DcmDspDataType应该被配置为UINT8_N或者UINT8_DYN;
如果DcmDspDataUsePort被配置为USE_DATA_SENDER_RECEIVER、USE_DATA_SENDER_RECEIVER_AS_SERVICE、
USE_BLOCK_ID、USE_ECU_SIGNAL时,DcmDspDataType不允许设置为UINT8_DYN**。
如果配置数组类型的DcmDspRoutineSignalType(UINT8_N等),则应配置DcmDspRoutineParameterSize(数组类型的具体大小)。
在配置RID的接受参数时,只有最后一个参数可以被配置为可变长度。
如果配置了DcmDspPidDataType(排放协议的DID)的类型为数组类型,则需要配置DcmDspPidDataByteSize。
当DcmDspPidDataType配置为UINT16_N或者SINT16时,DcmDspPidDataByteSize如果超过2则只能只能是2倍数;
当DcmDspPidDataType配置为UINT32_N或者SINT32时,DcmDspPidDataByteSize如果超过4则只能只能是4倍数;
※ atp.Status=obsolete 和 atp.StatusRevisionBegin=4.3.1 代表该项在AUTOSAR的4.3.1版本后将不再使用。
如果DcmDspPidDataUsePort被配置为USE_DATA_SYNCH_FNC,则DcmDspPidDataType应该被配置为UINT8_N;
如果DcmDspPidDataUsePort被配置为USE_DATA_SYNCH_FNC,则DcmDspPidDataType应该被配置为UINT8_N;
7.2.4.4 Dcm_OpStatusType
Dcm_MainFunction作为一个主要的控制循环或调度函数,负责管理和执行诊断通信的各种操作,而Dcm_OpStatusType则是在这个过程中传递给操作的一个参数,用来指示上一次操作执行的结果,并且根据这个结果决定本次操作如何进行。
graph TD; Start((Start)) FirstCall("首次调用<br>Dcm_OpStatusType") SetInitial("设置<br>设置参数OpStatus = DCM_INITIAL") CheckReturn("检查返回值") ForceRCRRP("DCM_E_FORCE_RCRRP") Pending("DCM_E_PENDING") SendRCRRP("发送RCR-RP请求<br>(NRC 0x78)") WaitForConfirm("等待发送成功确认") PendingLoop("在每次<br>Dcm_MainFunction中调用Dcm_OpStatusType<br>设置参数OpStatus = DCM_PENDING") ConfirmReceived("收到RCR-RP发送成功的确认") RetryWithForceRCRRPOK("在Dcm_MainFunction中<br>再次调用Dcm_OpStatusTypede<br>设置参数OpStatus = DCM_FORCE_RCRRP_OK") End((End)) Start --> FirstCall FirstCall --> SetInitial SetInitial --> CheckReturn CheckReturn -->|DCM_E_FORCE_RCRRP| ForceRCRRP CheckReturn -->|DCM_E_PENDING| Pending ForceRCRRP --> SendRCRRP SendRCRRP --> WaitForConfirm WaitForConfirm --> ConfirmReceived ConfirmReceived --> RetryWithForceRCRRPOK Pending --> PendingLoop PendingLoop --> CheckReturn RetryWithForceRCRRPOK --> End PendingLoop -->|不再返回<br>DCM_E_PENDING| End7.2.4.5 Dcm_SesCtrlType
无
标签:AUTOSAR,DCM,--,配置,UINT8,DiagnosticCommunicationManager,Dcm,SWS,USE From: https://www.cnblogs.com/yuanzinanzheng/p/18225814