AUTOSAR_SWS_DiagnosticCommunicationManager-1

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,同时管理诊断状态,如会话控制和安全等级。
      主要交互模块有:PduRDcm—DSDDcm—DSPComM
    • Diagnostic Service Dispatcher (DSD) submodule:
      • DSD子模块从网络上接收到一个新的诊断请求,并将其转发给数据处理器。数据处理器通常是诊断服务处理(DSP)子模块,它负责实际的诊断服务处理。
      • 当数据处理器(例如DSP子模块)触发时,DSD子模块会在网络上传输诊断响应。这意味着,DSP子模块完成诊断请求的处理后,会通知DSD子模块发送响应消息 。
    • Diagnostic Service Processing (DSP) submodule:
      DSP模块负责执行实际的诊断服务和子服务。
      Alt

7.2.2 Negative Response Code (NRC)

  1. UDS服务和OBD服务的标准协议定义的负响应代码(NRCs),用在Dcm与其他BSW模块以及SW-Cs的接口交互的过程中。
  2. 这些NRCs在数据类型Dcm_NegativeResponseCodeType中定义。
  3. 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

  1. DCM应检查非易失性存储管理模块 (NvM) 的读取是否正确。如果非易失性信息未能正确读取,DCM应执行默认操作。默认操作的内容在非易失性数据的章节中记载。
  2. 如果DCM取消了一个需要访问非易失性存储的服务,则应调用 NvM_CancelJobs()
    ※服务的取消可能是由于达到最大RCRRP NRC(0x78)的数量或协议抢占。

7.2.4 Types

Dcm模块支持的数据类型:
boolean
uint8
uint16
uint32
sint8
sint16
sint32
uint8[n]
※uint8[n]类型(在不同的实现中)可以映射为固定长度或可变长度的数据类型。
DcmDspData
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的配置对于有符号的数据依然有效(地址由低向高增长,低地址在前):

  • 大端模式下最高有效字节(包含符号位)仍然存储在最低内存地址处。符号位不变;
  • 小端模式下将最低有效字节存储在最低内存地址处,符号位保持在最高有效字节中。

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倍数;
DcmDspDataType
DcmDspDataByteSize
如果DcmDspDataUsePort被配置为USE_DATA_SYNCH_CLIENT_SERVERUSE_DATA_ASYNCH_CLIENT_SERVERUSE_DATA_ASYNCH_CLIENT_SERVER_ERROR时,则DcmDspDataType应该被配置为UINT8_N或者UINT8_DYN
如果DcmDspDataUsePort被配置为USE_DATA_ASYNCH_FNC_ERRORUSE_DATA_SYNCH_FNCUSE_DATA_ASYNCH_FNC中任一种,则DcmDspDataType应该被配置为UINT8_N或者UINT8_DYN
如果DcmDspDataUsePort被配置为USE_BLOCK_ID,则DcmDspDataType应该被配置为UINT8_N或者UINT8_DYN
如果DcmDspDataUsePort被配置为USE_DATA_SENDER_RECEIVERUSE_DATA_SENDER_RECEIVER_AS_SERVICE
USE_BLOCK_ID
USE_ECU_SIGNAL时,DcmDspDataType不允许设置为UINT8_DYN**。
DcmDspDataUsePort
DcmDspDataUsePort
DcmDspDataUsePort

如果配置数组类型DcmDspRoutineSignalType(UINT8_N等),则应配置DcmDspRoutineParameterSize(数组类型的具体大小)。
在配置RID的接受参数时,只有最后一个参数可以被配置为可变长度。
DcmDspRoutineSignalType
DcmDspRoutineSignalType
DcmDspRoutineParameterSize

如果配置了DcmDspPidDataType(排放协议的DID)的类型为数组类型,则需要配置DcmDspPidDataByteSize
DcmDspPidDataType配置为UINT16_N或者SINT16时,DcmDspPidDataByteSize如果超过2则只能只能是2倍数;
DcmDspPidDataType配置为UINT32_N或者SINT32时,DcmDspPidDataByteSize如果超过4则只能只能是4倍数;
DcmDspPidDataType
atp.Status=obsoleteatp.StatusRevisionBegin=4.3.1 代表该项在AUTOSAR的4.3.1版本后将不再使用。

如果DcmDspPidDataUsePort被配置为USE_DATA_SYNCH_FNC,则DcmDspPidDataType应该被配置为UINT8_N;
如果DcmDspPidDataUsePort被配置为USE_DATA_SYNCH_FNC,则DcmDspPidDataType应该被配置为UINT8_N;
DcmDspPidDataUsePort

7.2.4.4 Dcm_OpStatusType

Dcm_MainFunction作为一个主要的控制循环或调度函数,负责管理和执行诊断通信的各种操作,而Dcm_OpStatusType则是在这个过程中传递给操作的一个参数,用来指示上一次操作执行的结果,并且根据这个结果决定本次操作如何进行。

DCM_E_FORCE_RCRRP

DCM_E_PENDING

不再返回
DCM_E_PENDING

Start

首次调用
Dcm_OpStatusType

设置
设置参数OpStatus = DCM_INITIAL

检查返回值

DCM_E_FORCE_RCRRP

DCM_E_PENDING

发送RCR-RP请求
(NRC 0x78)

等待发送成功确认

在每次
Dcm_MainFunction中调用Dcm_OpStatusType
设置参数OpStatus = DCM_PENDING

收到RCR-RP发送成功的确认

在Dcm_MainFunction中
再次调用Dcm_OpStatusTypede
设置参数OpStatus = DCM_FORCE_RCRRP_OK

End

7.2.4.5 Dcm_SesCtrlType

posted @   元子难挣  阅读(214)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示