1. 诊断模式
基础说明请参考0X10服务配置
2. 会话执行
当受到会话请求后,检查当前条件是否可以执行诊断模式切换,只有成功发送肯定响应报文之后(网络层使用N_USData.con 向应用层确认 N_Result = N_Success),ECU才激活所请求的诊断模式,否则诊断模式维持不变;如果当前不能执行模式切换,服务器需要发送否定响应报文,并维持原诊断模式不变。
诊断模式切换需要执行以下操作:
如果 ECU 处于默认会话模式下,客户端发送进入 defaultSession 请求报文(图中过程 b),诊断服务器收到该请求后,执行完全的初始化,复位所有在 defaultSession 模式下激活的事件,设置和控制等操作,但并不包括已经编程固化到非易失性存储位置的操作。
如果 ECU 处于默认会话模式下,客户端发送进入非默认会话模式请求报文(图中过程 c),诊断服务器收到该请求后配置基本不需复位。
如果 ECU 处于非默认会话模式下,客户端发送进入非默认会话模式请求报文(图中过程 e、f、g),服务器收到该请求后安全状态切换到锁定状态,但通过Communication Control (0x28)和ControlDTCSetting(0x85)进行的设置保持不变。
如果 ECU 处于非默认会话模式下,客户端发送进入 defaultSession 请求报文(图中过程 d),诊断服务器收到该请求后,将安全状态切换到锁定状态,由ReadDataByPeriodicIdentifier(0x2A 服务)配置的周期调度被禁止,通过 Communication Control (0x28)和 ControlDTCSetting(0x85)进行的设置均被复位。即服务器需执行完全的初始化,复位所有在非默认模式下激活的事件,设置和控制等操作,但并不包括已经编程固化到非易失性存储位置的操作。
3. 配置流程
10 服务的需求如下:支持 10 服务及其 01 、02 、03 子服务,10 服务及其子服务01 、02 、03不需要安全解锁访问。 01 子服务不允许跳转到 Bootloader , P2ServerTimer 通常设置为 0.05s , P2*ServerTimer 为 5s (或者看具体需求进行配置)。配置如下(所有配置皆需根据实际需求配置):
3.1 DcmConfigSet
3.1.1 DcmDsd配置
DcmDsdRequestManufacturerNotificationEnabled::启用制造商接口(关闭)
DcmDsdRequestSupplierNotificationEnabled:启用供应商接口(关闭)
注:根据实际需求配置
3.1.2 DcmDsdServiceTables
1 根据需求创建诊断服务(0x10, 0x11等)的配置表(DSD参数)
2 配置诊断服务和子服务
在DcmDsdSubService上右键选择“Create DcmDsdSubService ”新建子功能,具体如图所示
- DcmDsdSidTabFnc:工具自带的回调函数,调用静态代码包中的服务函数
- DcmDsdSidTabServiceId:诊断SID
- DcmDsdSidTabSubfuncAvail:有子功能的服务选“true”,支持抑制响应,则对应会生成该服务下的所有子功能对应的抑制响 应位为 1 的子功能,即生成 81、82、83 子功能;
- DcmRbDsdSidTabSidInitFunction:服务初始化函数的函数指针,此服务不选。
- DcmDsdSidTabSecurityLevelRef:该服务支持的安全等级(27服务)
- DcmDsdSidTabSessionLevelRef:该服务支持的会话
3.1.3 DcmDspSession 的配置
DcmDspSessionForBoot 为 DCM_NO_BOOT , 01 诊断会话子服务不允许跳转到 Bootloader ;
DcmDspSessionLevel 为 1 , 01 诊断会话的 session 的等级 1 ;
DcmDspSessionP2ServerMax 为 0.05 , P2ServerTimer 为 0.05 秒;
DcmDspSessionP2StarServerMax 为 5 , P2*ServerTimer 为 5 秒。
另外两个会话配置类似,如果需要支持 Bootloader 更新功能,则需要支持 02 子服务(如图),用
于切换到编程会话,那么DcmDspSessionForBoot配置为 DCM_OEM_BOOT