7.5 DSP

7.5 诊断服务处理层(DSP)

7.5.1 DSP功能概述

DSP为诊断服务的处理,当接收到DSD请求处理诊断服务,服务处理过程:
1)分析收到的请求消息
2)检查格式和是否支持寻址子功能
3)在DEM、SWC或其他BSW模块上获取数据或执行所需的函数调用
4)汇总响应

检查格式及是否支持其子功能

DSP对请求消息的分析导致格式错误长度错误时,DSP子模块将触发NRC 0x13 (Incorrect message length or invalid format)的负响应。

  • [SWS_Dcm_00272]当对请求消息的分析导致格式化或长度失败时,DSP子模块应触发NRC 0x13(错误消息长度或无效格式)的否定响应。

  • 注意:这取决于可能执行格式检查的具体实现,并取决于诊断数据描述在编译时提供的详细程度。

汇总消息

DSP子模块通过对不包含响应服务标识符响应消息进行汇总,确定响应消息长度

  • [SWS_Dcm_00039]DSP子模块应组装不包括响应服务标识符的响应消息,并确定响应消息长度。

  • [SWS_Dcm_00038]如果使用分页缓冲机制,DSP子模块应在将任何数据分别传递给DSD子模块或DSL子模块之前确定总响应长度。

  • 要求[SWS_Dcm_00038]是必要的,因为使用ISO15765-2[10]的CAN分段诊断数据传输要求在各个数据传输的第一个CAN帧中提供完整数据流的总长度(有关分页缓冲机制的详细信息,请参阅第7.3.4.9节)。

否定响应码的处理

除非另一个特定的NRC被指定,否则当API调用执行服务没有返回OK时,DSP子模块应该触发NRC 0x10 (generalReject)的负响应。
----10服务被拒绝

  • [SWS_Dcm_00271] 除非指定另一个特定的 NRC,否则当执行服务的 API 调用未返回 OK 时,DSP 子模块应触发带有 NRC 0x10(generalReject)的否定响应。
  • [SWS_Dcm_01414] Dcm_NegativeResponseCodeType 接受的否定响应范围
    如果 Dcm 通过具有输出参数 Dcm_NegativeResponseCodeType ErrorCode 的任何 API 调用外部应用程序,则 Dcm 应仅接受 0x01-0xFF 范围内的值,以防返回值为 E_NOT_OK。
  • [SWS_Dcm_01415] 应用程序返回意外返回代码时的行为
    如果 Dcm 使用输出参数 Dcm_NegativeResponseCodeType ErrorCode 调用 API,并且应用程序将此参数设置为 DCM_POS_RESP 并返回 E_NOT_OK,则 Dcm 应报告运行时错误 - -DCM_E_INVALID_VALUE。 [SWS_Dcm_00275] d 当对请求消息的分析导致其他不受支持的消息参数时,DSP 子模块应触发带有 NRC 0x31(请求超出范围)的否定响应。
诊断模式声明组

Dcm作为诊断模式的模式管理员,管理以下7类模式切换:

1). DcmDiagnosticSessionControl (service 0x10)

2). DcmEcuReset (partly service 0x11)

3). DcmSecurityAccess (service 0x27)

4). DcmModeRapidPowerShutDown (partly service 0x11)

5). DcmCommunicationControl_symbolic name of ComMChannelId>. (service

0x28)

6). DcmControlDTCSetting (service 0x85)

7). DcmResponseOnEvent_ (service 0x86)
注意:RTE/SchM 将在名称前加上“MODE_”,因此名称不包含 MODE 关键字。

[SWS_Dcm_01327] Dcm 应根据以下 ModeDeclarationGroup 将 ModeDeclarationGroupPrototype DcmSecurityAccess 定义为提供的 ModeGroup:
以DcmSecurityAccess为例,DCM声明安全访问相关的模式组:

ModeDeclarationGroup DcmSecurityAccess

{

{

 DCM_SEC_LEV_LOCKED

DCM_SEC_LEV_1

 ...

DCM_SEC_LEV_63

}

 initialMode = DCM_SEC_LEV_LOCKED

};
ModeSwitchInterface  SchM_Switch_<bsnp>_DcmSecurityAccess

{

 isService = true;

 SecLevel currentMode;

};
  • [SWS_Dcm_00806] Dcm 应根据 ModeDeclarationGroup DcmDiagnosticSessionControl 将 ModeDeclarationGroupPrototype DcmDiagnosticSessionControl 定义为提供的 ModeGroup
  • [SWS_Dcm_00777] Dcm 应根据 ModeDeclarationGroup DcmEcuReset 在其基本软件模块实例中将 ModeDeclarationGroupPrototype DcmEcuReset 定义为provided-ModeGroup
  • [SWS_Dcm_00807] Dcm 应根据 ModeDeclarationGroup DcmModeRapidPowerShutDown 在其基本软件模块实例中将 ModeDeclarationGroupPrototype Dcm-ModeRapidPowerShutDown 定义为provided-ModeGroup
  • [SWS_Dcm_00780] Dcm 应为在 CommunicationControl 服务中考虑的每个网络定义一个单独的 ModeDeclarationGroupPrototype DcmCommunicationControl_ 《symbolic name of ComMChannelId>,作为基于 ModeDeclarationGroup DcmCommunicationControl 在其基本软件模块实例中提供的 ModeGroup
  • [SWS_Dcm_00781]Dcm 应根据 ModeDeclarationGroup DcmControlDTCSetting 在其基本软件模块实例中将 ModeDeclarationGroupPrototype Dcm-ControlDTCSetting 定义为 provided-ModeGroup
  • [SWS_Dcm_00933] Dcm 应根据 ModeDeclarationGroup DcmResponseOnEvent 在其基本软件模块实例中为每个 RoeEvent 定义一个单独的 ModeDeclarationGroupPrototype DcmResponseOnEvent_《Symbolic name of RoeEventId> 作为提供的模式组。 Dcm 为每个 RoeEvent 提供了一个状态机(见图 7.4)。 SWC 需要 RoeEvent 的状态激活事件报告将 Roe 状态报告给 Did。因此,Dcm 为每个 RoeEvent 的每个状态提供了一个 ModeDeclarationGroupPrototype,它将状态机的当前状态报告为模式。
  • [SWS_Dcm_00934] d ModeDeclarationGroupPrototype 应代表此 RoeEvent 的 ROE 状态机的当前状态。
模式相关的请求执行

可以根据模式条件限制请求的执行。这使得Dcm能够格式化的进行环境检查。
与会话/安全检查类似,可以为 Dcm 配置进一步检查(参见 [SWS_Dcm_00773] 和 [SWS_Dcm_00774])。引用的模式规则正在仲裁模式声明组的几个模式声明,其中可以处理请求。否则响应一个可配置的 NRC(参见 [SWS_Dcm_00812])。

  • [SWS_Dcm_00808] DcmModeRule 应在 DcmLogical-Operator 设置为 DCM_AND 的情况下通过逻辑 AND 或在 DcmLogicalOperator 设置为 DCM_OR 的情况下通过逻辑 OR 评估所有引用的 DcmModeConditions 和/或嵌套的 DcmModeRules。如果仅引用了单个 DcmModeCondition 或 DcmModeRule,则 DcmLogicalOperator 不应存在,因此不应使用。
  • [SWS_Dcm_CONSTR_6028] DcmModeCondition 应具有 DcmBswModeRef 或 DcmSwcModeRef 或 DcmSwcSRDataElementRef 作为外部参考。
  • [SWS_Dcm_00810] DcmModeConditions 的 DcmSwcModeRef 和 DcmBswModeRef 应评估是否在 DcmConditionType 设置为 DCM_EQUALS 的情况下设置了引用的模式声明,或者在 DcmConditionType 设置为 DCM_EQUALS_NOT 的情况下未设置。
  • [SWS_Dcm_01119] 如果引用的数据元素(通过 DcmDspExternalSRDataElement-Class),则应评估 DcmModeCondition 的 DcmSwcSRDataElementRef:等于在 DcmConditionType 设置为 DCM_EQUALS 的情况下引用 DcmSwcSRDataElement-ValueRef 表示的值不相等在 DcmConditionType 设置为 DCM_EQUALS_NOT 的情况下,DcmSwcSRDataElement-ValueRef 大于由参考 DcmSwcSRDataElement 表示的值,在 DcmConditionType 设置为 DCM_GREATER_THAN 的情况下,ValueRef 大于或等于参考 Dcm-SwcSRDataElementValueRef 在 DcmConditionType 设置为 DCM_GREATER_OR_EQUAL 的情况下小于参考 DcmSwcSRDataElement-ValueRef 表示的值 在 DcmConditionType 设置为 DCM_LESS_THAN 的情况下小于或等于参考 Dcm-SwcSRDataElementValueRef 表示的值以防万一DcmConditionType 设置为 DCM_LE SS_OR_EQUAL
  • [SWS_Dcm_CONSTR_6029] 值 DCM_GREATER_THAN、DCM_GREATER_OR_EQUAL、DCM_LESS_OR_EQUAL 和 DCM_LESS_THAN 不得与模式参考(DcmBswModeRef 或 DcmSwcModeRef)一起使用。
  • 注意:引用的 ModeDeclarationGroupPrototypes 的当前模式可由 API SchM_Mode(在 DcmBswModeRef 的情况下)或 API Rte_Mode(在 DcmSwcModeRef 的情况下)读取。
  • [SWS_Dcm_00811] 如果在一个 DcmModeRule 中引用了多个 DcmModeCondition,则应按照 DcmArgumentRef 的 EcucReferenceValues 的索引属性的顺序对它们进行评估。
  • 注意:这意味着 NRC 的优先级
  • [SWS_Dcm_00782] DcmModeRule 应有一个可选参数 Dcm-ModeRuleNrcValue 来定义在由于 DcmModeRule 禁止服务执行的情况下发送的 NegativeResponseCode。
  • [SWS_Dcm_00812] 如果嵌套的 DcmModeRule 还包含 DcmModeRuleNrcValue 参数,则该 NRC 应在更高级别的 NRC 之前使用。
  • [SWS_Dcm_00813] 如果 DcmLogicalOperator 设置为 DCM_AND,则第一个失败的 DcmModeRule 与显式配置的 NRC (DcmModeRuleNrcValue) 将用于定义响应消息的 NRC。
  • [SWS_Dcm_00814] 如果 DcmLogicalOperator 设置为 DCM_OR,则最后一个失败的 DcmModeRule 与显式配置的 NRC (DcmModeRuleNrcValue) 将用于定义响应消息的 NRC。
  • 注意:AND 和 OR 逻辑运算的区别在于允许优化实现。
  • [SWS_Dcm_00815] 如果没有特定 NRC 中的完整评估结果,则应使用 NRC 0x22(ConditionsNotCorrect)。
  • [SWS_Dcm_00942]Dcm 应为 DcmModeConditions 的每个 DcmSwcModeRef 的常用 ModeDeclarationGroupPrototype 创建一个引用此 ModeDeclarationGroupPrototype 的所需模式切换端口。如果 ModeDeclarationGroupPrototype 短名称是唯一的,则此端口原型的名称模式应为 DcmModeUser_"。否则,名称模式是特定于实现的,除了所需的前缀“DcmModeUser_”。c() 注意:ModeDeclarationGroupPrototypes 不一定是唯一的,因此例外是为了避免 Dcm Service-SWC 中的名称冲突。使用模式相关请求执行的示例: 一般假设:
    1. DcmModeRule1 由 DcmModeCondition1、DcmModeRule2 和 Dcm-ModeRule3 组成
    1. DcmModeRule1 定义 NRC 0x22
    1. DcmModeRule2 和 DcmModeRule3 没有任何子规则
    1. DcmModeRule2 定义 NRC 0x72 5. DcmModeRule3 没有定义 NRC 值
  • 示例 1:
    1. DcmModeRule1 使用 OR 组合 (DcmModeCondition1 OR Dcm-ModeRule2 OR DcmModeRule3) a) DcmModeCondition1 是失败
  • –> 返回 NRC 0x22
  • b) DcmModeRule2 失败
  • –> 返回 NRC 0x72
  • c) DcmModeRule3 失败
  • –> 返回 NRC 0x22
  • d) DcmModeCondition1、DcmModeRule2 和 DcmModeRule3 失败
  • –> 返回 NRC 0x72
  • e) DcmModeCondition1 和 DcmModeRule3失败
  • –> 返回 NRC 0x22
  • 示例 2:
    1. DcmModeRule1 使用 AND 组合 (DcmModeCondition1 AND Dcm-ModeRule2 AND DcmModeRule3)
  • a) DcmModeCondition1 失败
  • –> 返回 NRC 0x22
  • b) DcmModeRule2 失败
  • –> 返回 NRC 0x72
  • c) DcmModeRule3 失败
  • –> 返回 NRC 0x22
  • d) DcmModeCondition1、DcmModeRule2 和 DcmModeRule3 失败
  • –> 返回 NRC 0x22
  • e) DcmModeCondition1 和 DcmModeRule3 失败
  • –> 返回 NRC 0x22
  • e) DcmModeRul e2 和 DcmModeRule3 失败
  • –> 返回 NRC 0x72
Sender/Receiver通信

如果配置容器DcmDspData的参数DcmDspDataUsePort配置为USE_DATA_SENDER_RECEIVER或者USE_DATA_SENDER_RECEIVER_AS_SERVICE则DcmDspDataUsePort为一个R-Port,需要为这个R-Port顶一个Interface(一个参数,参数的实现数据类型为 DcmDspDataType)。

  • [SWS_Dcm_00962] Dcm 应为每个配置的具有发送器/接收器接口的 DcmDspData 元素创建(如果参数 DcmDspDataUsePort 设置为 USE_DATA_SENDER_RECEIVER 或 USE_DATA_SENDER_RECEIVER_AS_SERVICE),该接口读取 (DcmDspDidRead) 对应的 R-Port DataInterface,其中一个数据元素具有类型的 Implementation-DataType DcmDsp 数据类型。
  • [SWS_Dcm_00963] Dcm 应为每个配置的具有发送器/接收器的 DcmDspData 元素创建(如果参数 DcmDspDataUsePort 设置为 USE_DATA_SENDER_RECEIVER 或 USE_DATA_SENDER_RECEIVER_AS_SERVICE),它被写入(DcmDspDid-Write)具有一个数据元素的相应 P-Port具有 DcmDspDataType 类型的 ImplementationDataType 的 DataInterface。
  • [SWS_Dcm_01336] Dcm 应为每个配置的元素 DcmDspPidService01 创建一个对应的 R-Port DataInterface,其中一个数据元素具有类型 DcmDsp- PID 数据类型。
  • [SWS_Dcm_00964] 创建的 [SWS_Dcm_00962]、[SWS_Dcm_00963] 和 [SWS_Dcm_01336] 端口应从 DcmDspDiagnosisScaling 容器中派生 CompuMethod
将SwDataDefProps属性从DEXT文件传递到Dcm Service SW-C

用例:将SwDataDefProps细节如CompuMethod、DataContraints和Units传递给Dcm Service SW-C,并使它们在每个DID DataElement / RoutineControl信号中可用。有两个可选的工作流程。

用例:将诸如 CompuMethod、DataContraints 和单位之类的 SwDataDefProps 详细信息传递给 Dcm 服务 SW-C,并使它们在每个 DID DataElement / 每个 RoutineControl 信号中可用。 有两种可供选择的工作流程。
[SWS_Dcm_CONSTR_6079] DcmSwcSRDataElementValueRef 的依赖关系DcmSwcSRDataElementValueRef 的依赖性仅在配置了 DcmSwcSRDataElementRef 时才存在。
在这里插入图片描述
在这里插入图片描述
DcmDspDiagnosticDataElementRef 工作流的特点是在生成的 EcuC 值中使用 EcucForeignReference。 在导入 DEXT 信息时,会生成一个专用的 EcuC 参数,该参数将名为 DcmDspDiagnosticDataElementRef 的 EcucForeign-Reference 保存到 DEXT 文件中的 DiagnosticDataElement。 此 EcucForeignReference 允许访问相应 DiagnosticDataElement 的所有 SwDataDefProps(BaseType、CompuMethod、DataConstr 等)。 容器 DcmDspAlternativeDiagnosticDataElement 聚合此 EcucForeignReference。 在生成相应服务 SWC 的过程步骤中,所有需要的内容将根据 EcucForeignReference 从 DEXT 直接复制到服务 SW-C。 在此工作流程中,需要生成服务 SW-C 时存在 DEXT 文件。

异步调用行为
  • [SWS_Dcm_01412] 如果 Dem 函数返回 DEM_PENDING,只要返回 DEM_PENDING,Dcm 将在稍后的时间点再次调用该函数。
  • [SWS_Dcm_00120] 如果请求的诊断任务的否定响应数(参见 [SWS_Dcm_00024])达到配置参数 DcmDslDiagRespMaxNumRespPend 中定义的值,则 Dcm 模块应停止处理活动诊断请求,通知应用程序或 BSW (如果此诊断任务暗示调用 SW-C 接口或 BSW 接口)通过将活动端口接口的 OpStatus 参数设置为 DCM_CANCEL 并应发送带有 NRC 0x10(一般拒绝)的否定响应。
  • [SWS_Dcm_01184] 如果先前的返回状态为 E_PENDING,则应在下一个 Dcm 主函数循环中再次调用 Dcm_SetProgConditions API。
  • [SWS_Dcm_00760] DCM_E_PENDING 的返回应重新触发(例如在下一个 MainFunction 循环中)。
  • [SWS_Dcm_01413] 使用 OpStatus 等于 DCM_CANCEL 调用的接口的返回值应被忽略

UDS服务

Dcm模块需要支持以下UDS服务
在这里插入图片描述
主要学:10,11,14,19,22,2E,27,31,2F

0x10

UDS 服务 0x10 允许外部测试人员服务器中启用不同的诊断会话。诊断会话启用服务器中的一组特定诊断服务和/或功能。服务请求包含参数: diagnosticSessionType

  • [SWS_Dcm_00250] Dcm 模块应实现 UDS 服务 0x10。
  • [SWS_Dcm_00307] 当响应 UDS 服务 0x10 时,如果请求的子功能未在 ECU 中配置(配置参数 DcmDspSessionLevel),则 DSP 子模块应触发 NRC 0x12 的否定响应(不支持子功能)。

如果配置了请求的子函数值,即使请求的会话类型等于已经运行的会话类型,也会处理以下步骤(参见 ISO14229-1 [2] 第 9.2 节)。

  • [SWS_Dcm_00311] 发送确认函数应使用 DslInternal_SetSesCtrlType() 设置新的诊断会话类型,并应设置新的定时参数(P2ServerMax、P2ServerMax*)(参见配置参数 DcmDspSessionP2ServerMax 和 DcmDspSessionP2StarServerMax),并通过以下方式进行 ModeDeclarationGroupPrototype DcmDiagnosticSessionControl模式切换使用新的诊断会话类型调用 SchM_Switch__DcmDiagnosticSessionControl()(参见 [SWS_Dcm_91019])。 c(SRS_Diag_04015)
  • [SWS_Dcm_00085] DSP 子模块应在内部管理对 ISO14229-1 [2] 中定义的 dataIdentifier 0xF186 (ActiveDiagnosticSessionDataIdentifier) 的读取访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值