作者:亚S哥_271 | 来源:互联网 | 2023-09-24 15:29
目录1.(0x10)DiagnosticSessionControl1.1服务描述1.2诊断会话控制请求消息1.3诊断会话控制正响应消息1.4支持的错误反馈码1.5示例
目 录
1. (0x10)DiagnosticSessionControl
1.1 服务描述
1.2 诊断会话控制请求消息
1.3 诊断会话控制正响应消息
1.4 支持的错误反馈码
1.5 示例
2. (0x11)ECUReset
2.1 服务描述
2.2 请求消息帧
2.3 正响应消息帧
2.4 支持的负反馈信号
2.5 示例
3. (0x27)SecurityAccess
3.1 服务描述
3.2 requestSeed请求消息
3.3 sendKey请求消息
3.4 积极正响应消息
3.5 支持的负反馈码
4. (0x28)CommunicationControl
4.1 服务描述
4.2 请求消息
4.3 积极正响应消息
4.4 支持的负响应码
4.5 示例
5. (0x3E)TesterPresent
5.1 服务描述
5.2 请求消息
5.3 积极正响应消息
5.4 支持的负响应码
5.5 示例
1. (0x10)DiagnosticSessionControl
1.1 服务描述
诊断会话控制服务用于在服务器中启用不同的诊断会话。诊断会话支持服务器中的一组特定的诊断服务和(/或)功能。该服务可使服务器能够报告已启用的诊断会话中特定的参数值(例如,定时参数值)。
服务器中应始终有一个活动的诊断会话。当启动时,服务器应始终启动默认的诊断会话。如果没有启动其他诊断会话,则只要服务器打开电源,默认诊断会话就会运行。
服务器应能够在正常运行条件下和在车辆制造商定义的其他运行条件下提供诊断功能。
如果客户端请求一个已经运行的诊断会话,则服务器应发送积极正响应消息。每当客户端请求一个新的诊断会话时,服务器应在新会话的时间激活之前发送诊断会话控制积极响应消息。如果服务器无法启动客户端所请求的新诊断会话,则服务器应使用诊断会话控制负响应消息进行响应,并且当前会话将继续运行。
非默认诊断会话(不包括编程模式)中的诊断服务和诊断功能集是默认会话中提供的功能的超集,这意味着当切换到任何非默认诊断会话时,默认会话的诊断功能也可用。
要启动一个新的诊断会话,服务器可能会请求满足某些条件,而这些条件是由用户自定义,比如:
- 服务器可能只允许具有特定客户端标识符(客户端诊断地址,一般是物理寻址方式)的客户端启动特定的新诊断会话;
- 可能需要满足某些安全条件;
1. 默认会话:当服务器处于默认会话中,客户端请求启动默认会话时,服务器应完全重新初始化默认会话。在激活的时段期间, 服务器应重置所有激活/启动/更改的设置/控制。但这并不包括被编程进入非易失性存储器的长期变化.
2. 其他会话:当服务器从默认会话过渡到除默认会话以外的任何其他会话时,服务器只能停止在默认会话期间通过事件响应服务(0x86)在服务器中配置的事件(类似于停止响应事件)。
3. 相同会话或其他会话:当服务器从默认会话以外的任何诊断会话转换到默认会话以外的其他会话(包括当前活动的诊断会话)时,服务器应(重新)初始化诊断会话,这意味着:
-
- 应停止通过响应事件(0x86)服务在服务器中配置的每个事件。
- Security安全应重新锁定。安全访问的锁定应重置任何依赖于安全访问而要解锁的活动诊断功能(例如,DID的输入输出控制)。
- 应维护新会话中支持的且不依赖于安全访问的所有其他活动诊断功能。例如,任何配置的定期调度器在从一个非默认会话转换到另一个或同一非默认会话时,都应保持活动状态。通信控制和DTC控制服务(CommunicationControl and ControlDTCSetting)的状态不会受到影响,这意味着当会话切换时间点被禁用时,正常通信应保持禁用状态。
4. 默认会话:当服务器从除默认会话以外的任何诊断会话转换到默认会话时,服务器应通过事件响应服务(0x86)停止已在服务器中配置的每个事件,并应启用安全性。默认会话不支持的任何其他活动诊断功能应终止。例如,任何配置的定期调度器或输出控制应被禁用,通信控制和控制服务的状态应被重置,这意味着在会话切换到默认会话的时间点被禁用时,正常通信应重新启用。在激活的时段期间,服务器应重置所有激活/启动/更改的设置/控制。这并不包括被编程进入非易失性存储器的长期变化。
下表定义在默认会话和非默认会话(定时服务)期间允许的服务。任何非默认会话都被绑定到一个诊断会话计时器上,该计时器必须由客户端保持活动状态。
1.2 诊断会话控制请求消息
1.3 诊断会话控制正响应消息
1.4 支持的错误反馈码
1.5 示例
2. (0x11)ECUReset
2.1 服务描述
客户端使用ECUReset(0x11)服务来请求服务器重置。该服务请求服务器根据ECUReset请求消息中嵌入的Type参数值的内容,有效地执行服务器重置。
在服务器上执行ECUReset之前,应发送ECUReset正响应消息(如果需要)。在服务器重置成功后,服务器应激活默认会话。
2.2 请求消息帧
2.3 正响应消息帧
2.4 支持的负反馈信号
2.5 示例
3. (0x27)SecurityAccess
3.1 服务描述
该服务的目的是提供一种访问数据和(或)诊断服务的手段,这些服务出于安全原因限制了默认会话的访问。比如:下载或上传的例程、从服务器读取特定内存位置的诊断服务等。
安全访问概念使用了:种子(Seed)和密钥(Key)的概念。
使用此服务的一个典型例子如下:
“requestSeed”子函数参数值应始终为奇数,同一安全级别对应的“sendKey”子函数参数值应等于“requestSeed”子函数参数值加1。 ---> 都是从客户端发起
在任何时候,只有一个安全级别应该被激活。例如,如果与requestSeed 0x03相关联的安全级别处于活动状态,并且诊断仪请求成功解锁与requestSeed 0x01相关联的安全级别,那么此时只能解锁与requestSeed 0x01相关联的安全级别支持的安全功能。以前由与requestSeed 0x03关联的安全级别解锁的任何附加安全功能都将不再处于活动状态。安全级别的编号是任意的,不意味着这些级别之间有任何关系(即没有优先级的概念)。
客户端应通过发送服务安全访问的“requestSeed”消息来请求服务器“解锁”。服务器应通过使用服务安全访问“requestSeed”的积极响应消息发送“种子”来进行响应。然后,客户端应通过使用适当的服务安全访问的“sendKey”请求消息向服务器返回一个“密钥”号来进行响应。服务器应将此“密钥”与一个内部存储/计算的"密钥"进行比较。如果两个数字匹配,则服务器应启用(“解锁”)客户端对特定服务/数据的访问,并指示使用服务安全访问“sendKey”积极响应消息。如果这两个数字不匹配,则应被视为错误访问尝试。一个无效的密钥要求客户端使用安全访问的“requestSeed”消息重新开始请求信息。
如果服务器支持安全访问,但当收到客户端安全访问““requestSeed”消息时,客户端请求的安全性级别已经解锁,则该服务器应使用安全访问““requestSeed”正响应消息服务进行响应,其种子值等于零(0)。服务器不得为当前锁定的给定安全级别发送零种子。客户端应使用此方法,通过检查非零种子,来确定服务器特定的安全级别是否被锁定。
3.2 requestSeed请求消息
3.3 sendKey请求消息
子函数参数“securityAccessType”向服务器指示此服务正在进行的步骤、客户端想要访问的安全级别以及种子和密钥的格式。如果服务器支持不同级别的安全级别,则每个级别都应由请求者种子值来标识,该值与sendKey值有固定的关系:
“requestSeed = 0x01”表示“requestSeed = 0x01” 和 “sendKey = 0x02”的固定关系,
“requestSeed = 0x03”表示“requestSeed = 0x03” 和 “sendKey = 0x04”的固定关系。
3.4 积极正响应消息
3.5 支持的负反馈码
4. (0x28)CommunicationControl
4.1 服务描述
该服务的目的是打开(或关闭)服务器的某些消息的发送与(或)接收,例如:应用通信消息。
4.2 请求消息
4.3 积极正响应消息
4.4 支持的负响应码
4.5 示例
5. (0x3E)TesterPresent
5.1 服务描述
此服务用于向服务器指明客户端仍然在线,并且之前已经激活的诊断服务(或通信)将保持活动状态。
此服务用于在诊断会话不是默认会话中,保留一个或多个服务。客户端可以通过定期发送TesterPresent服务请求消息,或在没有其他诊断服务的情况下防止服务器(s)自动返回到默认会话来实现。
5.2 请求消息
5.3 积极正响应消息
5.4 支持的负响应码
5.5 示例
TODO: .....