Autosar BSW 之诊断 (3) Dcm

1. DSL:诊断服务层

模块负责确认诊断数据流的请求与响应。确保诊断计时以及诊断状态的切换。

1.1 处理诊断请求

  • PduR来的数据传递到DSP主要通过调用接收和Copy数据的函数实现。

      当收到诊断请求时,PDUR调用Dcm_StartOfReception()和Dcm_CopyRxData()函数将收到的诊断请求数据放置在DCM模块的Buffer中,然后PDUR调用Dcm_TpRxIndication()函数通知Dcm模块接收到了新的诊断请求。

  • 与Tester保持Alive。

      ECU接收到对应的报文 (SID:0x3E Sub: 0x80) , ECU对该报文不会发到DSP

1.2 处理诊断响应

  收到发送数据时,PDUR会将数据诊断请求数据从DSL的发送Buffer中Copy到PDUR的发送Buffer中,具体后续处理由CAN的协议栈进行处理。

  保证对测试人员的响应时间

  • 周期性传输

      对应的服务ReadDataByPeriodicldentifier (0x2A), UDS提供的“ReadDataByPeriodicldentifier (0x2A)”服务,用于向由一个或多个periodicDataldentifiers标识的ECU请求定期传输数据记录值

  • ResponseOnEvent(ROE)传输

      对应的UDS服务ResponseOnEvent (0x86), 通过UDS Service ResponseOnEvent (0x86),测试人员可以请求ECU启动或停止传输由指定事件发起的响应。当注册一个事件进行传输时,测试者也指定相应的服务来响应(例如:UDS service ReadDataByldentifier 0x22).

  • 分段响应

      在某些情况下,例如在例程执行的情况下,应用程序需要立即请求一个NRC 0x78(响应等待),该请求应立即发送,而不是仅仅在到达响应时间之前(P2ServerMax分别为P2*ServerMax)。

      当Dcm模块调用一个操作并得到一个错误状态DCM_E_FORCE_RCRRP时, DSL子模块将触发NRC 0x78(响应等待)的负响应传输。这个响应需要从一个单独的缓冲区发送,以避免覆盖正在进行的请求处理。

  • 应用程序触发ResponsePending响应

      当需要响应诊断请求时,DSL模块通过调用PduR_DcmTransimit()和Dcm_CopyTxData()将数据传递至PDUR模块,其中PduR_DcmTransimit()函数只是传递长度信息、地址信息,数据是通过Dcm_CopyTxData()函数传递至PDUR模块,当数据传输成功后,PDUR模块通过Dcm_TpTxConfirmation()函数告知DCM数据接收成功。

1.3 管理安全等级

  • 管理安全级别

      DSL提供Dcm_GetSecurityLevel()、DslInternal_SetSecurityLevel()两个函数分别用于获取当前的安全等级和设置安全等级

      对于配置层面而言,DSL菜单主要是配置诊断帧,包括物理寻址和功能寻址,单次通信的最大buffer、时间参数、包括回复0x78(诊断请求已收到且有效服务器正在执行请求服务-等待响应)的时间和为了防止诊断服务异常,允许0x78的最大次数。

  • 处理Key和Seed

1.4 会话状态处理

  • 管理会话状态处理当前激活的Session以及设置新的Sesstion

    • 缺省会话(0x00, Default session)

    • 编程会话(0x01, Programmingsession)

    • 扩展会话(0x02,Extended session)。

  • 管理权限状态分为权限模式和默认的模式

  • 跟踪活动的非默认会话

  • 允许修改时间

1.5 诊断协议处理

  • 处理不同的诊断协议

  • 处理设置诊断协议服务Table,根据UDS或者OBD链接到不同的诊断协议

  • 设置不同服务协议的优先级

  • 支持优先级抢占机制

  • 并行处理OBD和UDS协议,可以忽略优先级和抢占机制

1.6 通信模式处理

  DCM模块和ComM模块的交互由DSL子模块完成。

  ComM模块把每个通信通道(channel)的当前通信状态(No-com, Full-com, Silent-com)通知给Dcm模块。

  Dcm模块的诊断功能将会调用ComM模块的接口功能可能会阻止Ecu进入shutdown模式(ActiveDiagnostic ==’DCM_COMM_ACTIVE’时ECU必须保持唤醒状态,也就是不允许 进入shutdown/sleep)。

  • 处理通信要求(Full/Silent/No)

      ComM会通知DCM当前的通道, DCM会进行模式的请求, 避免通信进入Sleep;在Silent和NO下, DCM禁止通信

      ComM模块调用 Dcm_ComM_NoComModeEntered接口通知Dcm模块通信关闭。Dcm模块收到通知后就会Disable所有的诊断接收/传输。

      ComM模块调用 Dcm_ComM_SilentComModeEntered接口通知Dcm模块通信静默。Dcm模块收到通知后就会Disable所有的诊断传输。

      ComM模块调用 Dcm_ComM_FullComModeEntered接口通知Dcm模块通信静默。Dcm模块收到通知后就会Enable所有的诊断接收/传输。

    • No Communication

    • Silent Communication

    • Full Communication

  • 指示活动/非活动诊断

  • 启用/禁用所有类型的诊断传输

      在DSL里面可以配置多路诊断通道,假设诊断ID有2个以上,通过DcmDslProtocolRows容器实现。

2. DSD:诊断服务调度

DSD负责接收网络上的诊断请求,并转发到对应的数据处理模块。接收响应数据并将数据传递给DSL模块,在由DSL模块发送到网路。

  • 检查诊断服务:用于检查诊断服务执行的条件,如当前会话模式、诊断服务是否支持、安全访问等级。当判断条件不支持是会相应0x7F和具体的NRC否定响应码,通过后会由上一层处理服务(具体处理也可以给出否定响应)

  • 汇总响应数据:将判断得到的响应数据或者由DSP发送的响应数据发送给DSL,由DSL向外发送数据

3. DSP:诊断服务处理

DSP负责处理诊断服务请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶小破孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值