[CP_AUTOSAR]_通信服务_DCM模块(三)_DSL子模块(三)


  在前面 《[CP_AUTOSAR]_通信服务_DCM模块(三)_DSL子模块(一)》《[CP_AUTOSAR]_通信服务_DCM模块(三)_DSL子模块(二)》 文中,介绍了 DSL 子模块的整体功能,以及从 PduR 模块到 DSD 模块提交的诊断请求,本文将接着介绍从 DSD 子模块到 PduR 模块的诊断应答消息。

1、Concurrent TesterPresent(“保持逻辑链路激活”)

  上位机可能会在发送物理请求/响应的同时发送功能性的 “TesterPresent” 命令。在 《ISO 14229-1》,这叫 “ keep alive logic ”。功能性的 “TesterPresent” 会在一个单独的 DcmDslProtocolRxPduId 上接收,其参数中有个 DcmDslProtocolRxAddrType 会被配置为 DCM_FUNCTIONAL_TYPE。DCM 内部的接收缓存未被显式的配置,因此功能性的 “TesterPresent” 被按照如下方式去处理:
  [SWS_Dcm_00112] 当 PduR 模块调用的函数 Dcm_TpRxIndication 返回值为 E_OK ,并且诊断请求为 ”TesterPresent” 命令(0x3E 80),DSL 子模块应该重置会话超时计数器(S3Service)。
  [SWS_Dcm_00113] 当 PduR 模块调用的函数 Dcm_TpRxIndication 返回值为 E_OK ,并且诊断请求为 ”TesterPresent” 命令(0x3E 80),DSL 子模块不应该提交该诊断请求给 DSD 模块,作进一步的解释;由于绕过DSL子模块中的功能“testpresent”,Dcm模块能够毫无延迟地接收和处理下一个物理寻址的诊断请求。
  [SWS_Dcm_01168] 只有在功能寻址并且 ”suppressPosRspMsgIndicationBit” 被设置为 TRUE 时,DCM 才会将接收的测试端保持在线的请求处理为并发的请求。

1.1、Dcm_CopyTxData

  如果拷贝的数据长度,小于在函数 PduR_DcmTransmit() 中要发送的数据长度,在当前拷贝数据被发送过程中,DCM 模块会使用 Dcm_CopyTxData 函数来提供另外的数据。
  [SWS_Dcm_00346] 如果 DCM 模块成功地拷贝数据到缓存中,函数 Dcm_CopyTxData 应该返回 BUFREQ_OK。
  [SWS_Dcm_00350] Dcm_CopyTxData 警告:
    1、函数 Dcm_CopyTxData 中参数 availableDataPtr 的值应该不超过待发送的字节数量;
    2、如果函数 Dcm_CopyTxData 返回值为 BUFREQ_E_NOT_OK,调用 PduR_DcmTransmit() 的发送请求是没有完成的。最后一次确认(调用服务函数 Dcm_TpTxConfirmation 出现错误)需要完成这个拷贝,并且能够开始另外一次发送(即调用 PduR_DcmTransmit())。因此确认终止发送,却决于传输的协议。

1.2、Dcm_TpTxConfirmation

  [SWS_Dcm_00352] 调用函数 Dcm_TpTxConfirmation ,DCM 模块应该锁住发送的缓存空间。
  [SWS_Dcm_00353] 调用函数 Dcm_TpTxConfirmation ,DCM 模块应该停止超时的错误处理(Page buffer 超时,P2ServerMax/P2*ServerMax 超时)。

2、提交诊断应答(从 DSD 子模块到 PduR)

  [SWS_Dcm_00114] DSD 子模块请求 DSL 子模块去发送诊断应答消息。
  [SWS_Dcm_00115] 当 DcmDslMainConnection(一个容器,包含了诊断协议的主要连接的配置) 的诊断应答准备完成时,DSL 子模块应该使用函数 PduR_DcmTransmit() 去触发发送诊断应答消息给 PduR 模块,函数使用了参数 DcmDslProtocolTxPduRef(在 EcuC 中应用一个 PDU)作为 PduId。
  [SWS_Dcm_01072] 如果是周期性发送,DCM 应该在函数 PduR_DcmTransmit() 中提供满载数据,而不希望调用 Dcm_CopyTxData 函数。
  [SWS_Dcm_01073] 如果是周期性发送,DCM 将会周期性的调用函数 Dcm_TxConfirmation 来显示发送的结果。
  [SWS_Dcm_00117] 如果在成功发送一个 DCM PDU 或者是调用函数 Dcm_TpTxConfirmation 发生了一个错误,DSL 子模块收到了一个确认,DSL 应该将这个确认信息转发给 DSD 模块。
  [SWS_Dcm_00118] 如果发送失败了(PduR_DcmTransmit() 失败了)或者确认失败(Dcm_TpTxConfirmation 发生错误),那么 DSD 子模块不应该重复诊断应答消息的发送。
  [SWS_Dcm_01166] 如果 DcmDslProtocolTx 的 Multiplicity 被设置为 “0”,DCM 模块接收到的诊断请求之后,不发送诊断应答。

   更多内容可参考 CP_AUTOSAR_总目录,点击跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值