文章目录
传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目录
1 配置DSD模块
1.1 新建$10服务
UDS $10服务的协议介绍,请参考文章「FlashBootloader02【诊断会话控制服务($10)】」
配置部分如下,
找到 /Dcm/DcmConfigSet/DcmDsd/DcmDsdServiceTable/DcmDsdService
的配置项,增加响应的服务,此处是DiagnosticSessionControl ($10)服务。如下图所示
图 1 增加DiagnosticSessionControl ($10)服务
备注:DcmDsdServiceTables可以包含多个服务表,常用的UDS和OBD服务表,此处新建的是UDS服务表DcmDsdUdsServiceTable
1.2 新建$10的子功能服务
-
1、勾选DcmDsdSidTabSubfuncAvail,它表示此服务是否包含子功能
-
2、增加相应的会话层子功能
2 配置DSP模块
2.1 增加会话Level
DiagnosticSessionControl ($10)服务的每一个子功能对应一个会话Level
2.2 配置会话层时间参数
P2/P2Start的时间参数,会在相应的会话控制的请求的正响应中给出来。
下表是P2/P2Start的时间参数的含义:
Parameters 参数 | Description 描述 | Min. 最小值 | Max. 最大值 |
---|---|---|---|
P2CAN_Server | 服务器从接收到请求报文到开始发送应答报文之间的间隔时间。 | 0 | 50 ms |
P2*CAN_Server | 服务器从发送应答代码为0x78 的否定应答报文到开始发送下一个应答报文之间的间隔时间(增强型应答时序)。 | 0 | 5000 ms |
a 对于增强型应答时序,连续的应答代码为0x78 的否定应答报文之间的传输最小时间间隔应为1/2 P2* CAN_Server_max,最大误差为±20 %. |
DCM要在接收到请求服务之后开始计时,最晚应不晚于P2/P2Star到期(timeout),要发出RCR-RP。如果不满足时序要求,要调整P2/P2Start的时间参数值的大小
文章目录
传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目录
3 DcmDiagnosticSessionControl 切换
某些情况下,当诊断会话发生变化时,ECU 要做出特殊的处理,比如:取消所有由测试仪(Tester)激活的诊断功能。针对诊断服务的不同可以有两种处理方式
- DCM 内部的协议栈进行固定格式的处理,如诊断会话发生变化时,通过诊断通信控制服务($28)来禁用/启用通信。
- 没法进行固定格式的处理必须由应用程序执行处理,有两种接口可以使用。
- DCM 已经通过调用模式声明组 ModeDeclaration DcmDiagnosticSessionControl的模式来通知应用程序进行处理
- 通过简单的函数调用来通知应用程序(比如属于CDD模块的应用程序)进行处理
4 DcmDiagnosticSessionControl 切换的模式接口
4.1 模式切换接口Rte_Switch_Dcm_DcmDiagnosticSessionControl_DcmDiagnosticSessionControl
当发生会话更改时,模式管理器会调用Callout【Rte_Switch_Dcm_DcmDiagnosticSessionControl_DcmDiagnosticSessionControl】来通知其他模块。
那什么时候会发生会话更改呢?
- 发送诊断请求DiagnosticSessionControl ($10) 服务的时候
- S3 定时器发生超时的时候
4.2 DcmDiagnosticSessionControl支持的模式
下面是DcmDiagnosticSessionControl支持的模式:
模式说明 | 描述 |
---|---|
默认会话模式 | 表示 UDS 默认会话(初始状态)。 |
编程会议模式 | 表示 UDS 编程会话。 |
扩展会话模式 | 表示 UDS 扩展会话。 |
UserDefinedSession模式 | 用户自定义的会话 |
5 DcmDiagnosticSessionControl 切换的函数调用接口
为了获得更好的 DCM 集成灵活性,还可以通过简单的函数调用通知位于 CDD 中的应用程序。
通过配置
/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/DcmDspSessionCallback
和
/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/DcmDspSessionCallback/DcmDspSessionCallbackFnc,它们将指定当DcmDiagnosticSessionControl 切换时由 DCM 调用的回调函数。
函数的定义如下表所示:
原型 | |
---|---|
void 「DcmDspSessionCallbackFnc」 (Dcm_SesCtrlType previousSesCtrlId, Dcm_SesCtrlType newSesCtrlId) | |
previousSesCtrlId | 指定以前的诊断会话 ID(转换的源状态) |
newSesCtrlId | 指定新的诊断会话 ID(转换的目标状态) |
返回值 | void |
功能说明 | 将在诊断会话状态转换时调用 |