AUTOSAR_SWS_DiagnosticCommunicationManager
7 Functional specification
7.3 Diagnostic Session Layer (DSL)
7.3.1 Introduction
DSL模块的功能详细参考ISO14229-1 [2]和ISO15765-3 [4]。
7.3.2 Use cases
略
7.3.3 Interaction with other modules
-
与DSL子模块交互的模块有以下几个:
-
-
PduR 模块
- PduR为 DSL提供诊断请求的数据。
- 在诊断请求的响应准备好后,将由 DSL触发 PduR发送诊断响应。
-
-
DSD 子模块
- 将 PduR提供的诊断请求的数据转发给 DSD。
- 在诊断请求的响应准备好后,将由 DSD通知 DSL发送诊断响应。
-
-
SW-Cs / DSP 子模块
- DSL提供安全和会话状态的访问通道。
-
-
ComM 模块
- DSL通过 ComM管理诊断的通信状态等。
7.3.4 Functional description
7.3.4.1 Overview
DSL模块提供的功能有以下几个:
-
请求处理:
- 转发请求: 从 PduR接收诊断请求并转发至 DSD。
- 并发"TesterPresent": 保持会话活跃(Keep-Alive Logic)。 响应处理
- 转发响应:将 DSD生成的诊断响应转发至 PduR。
- 响应时序保证: 确保响应时序。
- 周期性传输支持: 支持定期数据传输机制。
- 事件触发响应支持: 实现ResponseOnEvent (ROE) 数据传输。
- 分段响应支持: 分段响应。
- 应用触发响应挂起: 支持Application触发的ResponsePending响应。 安全级别管理:
- 安全管理: 控制并维护诊断安全等级。 会话状态管理:
- 会话状态控制: 管理会话开启、关闭等状态。
- 非默认会话追踪: 记录并管理非默认会话状态。
- 时序调整: 允许修改会话相关的定时参数。 诊断协议处理:
- 协议处理: 支持多种诊断协议的解析与处理。
- 资源管理: 合理调配诊断过程中所需资源。 通信模式管理:
- 模式切换: 控制全通信/静默通信/无通信模式(Full- / Silent- / No Communication)。
- 诊断状态指示: 标记诊断活动或非活动状态。
- 传输控制: 启用或禁用所有诊断数据传输功能。
7.3.4.2 Forward requests from the PduR module to the DSD submodule
-
※Note:
- 新请求的优先度更高时,是否会直接直接抢占? 以下是诊断通信用到的几种PDU (DcmDslConnection配置相关?):
- OBD DcmRxPduId
- OBD DcmTxPduId
- UDS phys DcmRxPduId
- UDS func DcmRxPduId
- UDS DcmTxPduId
通过配置DcmDslProtocolRx
容器中的DcmDslProtocolRxAddrType
为DCM_FUNCTIONAL_TYPE
或者DCM_PHYSICAL_TYPE
,
并且每个通道分配适当的DcmDslProtocolRxPduId
,就可以实现物理寻址和功能寻址的设定。
7.3.4.2.1 Dcm_StartOfReception
参照流程图
-
※Note1:
- 当有请求在处理中时,如果收到了来自外部的 TesterPresent诊断请求,无论与正在处理的请求是否源自同一通道,都会被接受(Dcm_StartOfReception返回BUFREQ_OK),但是都不会进行处理(即:不进行S3Server timer的重制)。 ※Note2:
- Dcm_StartOfReception()可以在中断中调用。 ※Note3:
- Dcm_StartOfReception()的参数 TpSduLength等于0,函数也会返回BUFREQ_E_NOT_OK,不会再进行下一步的处理。
7.3.4.2.2 Dcm_CopyRxData
-
※Note1:
-
当
Dcm_CopyRxData
被调用且参数SduLength为0时,函数也会返回BUFREQ_OK,并且通过bufferSizePtr返回当前Dcm的接收缓冲区的剩余大小== -
根据前面的
Dcm_StartOfReception
的说明,当该函数的参数TpSduLength等于0时,会返回BUFREQ_E_NOT_OK,并且不会进行进一步的处理,这是否意味着当TpSduLength等于0这种情况发生时,根本不存在进行下一步的Dcm_CopyRxData
调用? -
猜测:
Dcm_CopyRxData
可能不仅在接受请求数据时调用,或者是为了保证Dcm_CopyRxData
函数的兼容性。
※Note2:
-
在
Dcm_StartOfReception
取得Dcm接收缓冲区指针到Dcm_TpRxIndication
被调用的时间内,是数据拷贝阶段,这段时间内,Dcm模块不能访问Dcm缓冲区。
※Note3:
-
Dcm_CopyRxData
可以在中断中调用。
7.3.4.2.3 Dcm_TpRxIndication
-
※Note1:
-
当
Dcm_TpRxIndication
被调用且参数Std_ReturnType result
不是E_OK时,Dcm模块将不对接收该PduIdType id
数据的缓冲区域进行进一步的评估(如计算剩余size等),因为接收的数据无法确认是有效还是无效的,防止引发其他错误。
※Note2:
-
在
Dcm_StartOfReception
取得Dcm接收缓冲区指针到Dcm_TpRxIndication
被调用的时间内,是数据拷贝阶段,这段时间内,Dcm模块不能访问Dcm缓冲区。
※Note3:
-
Dcm_TpRxIndication
可以在中断中调用
7.3.4.3 Concurrent ”TesterPresent” (”keep alive logic”)
-
※Note1:
- 不同于前面的正常的诊断请求的接收流程,对于服务 SID 0x3E的keep-alive logic请求使用独立的DcmRxPduId,并且缓冲区也由Dcm模块内部直接给定,不需要显式的配置。 ※Note2:
- 该服务的DcmRxPduId(UDS func DcmRxPduId)也属于物理寻址的 DcmDslConnection,也正因为有独立的处理过程,所以对于积极响应抑制位为TRUE的情况,不影响其他的物理寻址请求。
7.3.4.3.1 Dcm_CopyTxData
※Note1:
:如果 PduR_DcmTransmit()
中请求发送的数据长度大于已经被Dcm_CopyTxData
拷贝到发送缓冲区的数据长度,那么说明发送缓冲区的长度不足以容纳请求的数据,在当前发送缓冲区的数据发送成功后,PDUR会继续调用Dcm_CopyTxData
拷贝后续数据。