- 安全访问SecurityAccess(0x27)
安全访问SecurityAccess(0x27),此服务是提供访问ECU内部数据或者出于安全因素需被限制的诊断服务的请求权限。常见的如读服务(0x22)读取非安全信息时能够直接读取,不需要利用27服务进行安全访问,而通过写服务(0x2E)写入数据时,则通常需要通过27服务进行安全访问才可以写,刷新程序也需要利用27服务通过相关的安全等级才能够对ECU进行程序下载,显然这些都是需要利用27服务进行权限管控,从而保障ECU的安全可靠。
安全访问序列如下图所示,一共4步组成,
- 诊断仪先发送请求seed的报文(27 01)
- ECU响应seed(67 01 xx xx xx xx)
- 诊断仪根据返回的seed按照约定算法计算key值,并发送给ECU请求验证(27 02 xx xx xx xx)
- ECU收到请求之后,也按照约定的算法对该key进行校验,并给出响应,若计算一致,则为正响应(67 02),否则为负响应(7F 27 NRC)
图4-8 安全访问序列图
ECU若校验key一致,则ECU则切换安全状态至对应的解锁状态,此时在该解锁状态下能够支持的服务都应该可以工作。如果ECU已经处于解锁状态,此时诊断仪再次发送请求seed的报文,ECU应该响应seed为0的正响应。
seed请求的子服务值为奇数,对应的key请求验证的子服务值为该奇数加1,如27 01与27 02为一组安全等级,27 03与27 04为一组安全等级,27 11与27 12为一组安全等级。不同的安全等级由客户定义功能区分。
seed请求格式
seed正响应格式
key请求验证格式
key验证正响应格式格式
负响应格式
- 通讯控制CommunicationControl(0x28)
通讯控制服务用于开启或关闭ECU对某些报文的发送或接收,如应用报文和网络管理报文等。
请求格式
正响应格式
负响应格式
- 待机在线TesterPresent(0x3E)
该服务用于诊断仪端告知ECU诊断仪依然在线。该服务通常用于保持ECU处于非默认模式,由于ECU在S3server时间收不到诊断请求的话,ECU将会退回默认会话模式(default session),所以诊断仪为了保持ECU处于非默认模式,需要周期性发送TesterPresent服务指令,周期时间需要小于S3server。
请求格式
正响应格式
负响应格式
- 诊断故障码设置控制ControlDTCSetting(0x85)
诊断故障代码设置控制服务用于停止或重启ECU诊断故障代码的记录。
当通过该服务对故障码记录进行抑制操作后,若会话层时序参数超时从而ECU进入默认会话,或ECU执行复位操作后,诊断故障代码应该恢复记录。
当接收到诊断仪发送的清除诊断信息(0x14)服务后,ECU应重新开启诊断故障代码记录。
请求格式
正响应格式
负响应格式
- 读DID数据ReadDataByIdentifier(0x22)
根据DID(标识符)读取数据服务用于从ECU存储器中读取由DID所确定的数据记录值,其中DID为两个字节长度的数值。
ISO14229中定义该服务的请求报文允许支持1个或者多个数据标识符,一般主机厂仅支持1个DID读取。下图报文格式也以1个DID作为讲解。
请求格式
正响应格式
负响应格式
- 写DID数据WriteDataByIdentifier(0x2E)
根据DID写入数据服务允许诊断仪将数据写入由DID指定的内部存储单元。ECU应在数据写入成功后发送该服务的肯定响应。
请求格式
正响应格式
负响应格式
- 清除故障码ClearDiagnosticInformation(0x14)
正响应需在诊断信息清除请求后,ECU处理完成后发出,即使 ECU 没有存储的 DTC,也需发出正响应报文。清除 DTC 的同时,所有 DTC 相关存储信息都应被清除。
请求格式
正响应格式
负响应格式
- 读故障码信息ReadDTCInformation(0x19)
请求格式
正响应格式
负响应格式
- 通过DID控制输入输出InputOutputControlByIdentifier(0x2F)
该服务是用于通过DID来直接控制ECU对应的输入输出信号。
请求格式
正响应格式
负响应格式
- 例程控制RoutineControl(0x31)
请求格式
正响应格式
负响应格式
- 请求下载RequestDownload(0x34)
请求格式
正响应格式
负响应格式
- 传输数据TransferData(0x36)
请求格式
正响应格式
负响应格式
- 请求数据传输退出RequestTransferExit(0x37)
请求格式
正响应格式
负响应格式
5. 负响应码