1.基础知识
1.1 请求消息格式,与肯定响应消息格式
肯定响应中的第三个字节,是 子功能=04使能快速休眠,才能在肯定响应中回复的字节。
对于该字节的意义和编码规则,如下:
说人话就是,此参数表示key转换到off档位后,样件能保持多少时间的正常工作状态后,才进入睡眠状态。
编码规则,如PowerDownTime=0x11,就表示ECUkey转换到off档位后,在能够保持17s后,再进入睡眠状态。
2、子功能的定义
规范14229中,只规定了四种子功能:
2.1、 Subfuntion=01;hardReset=硬复位
此种模拟的是断电后,重新开始上电初始化,这种初始化可能会导致将一些存储在易失性存储区域和非易失性存储区域的值,重置为预定义的初始值。但是注意上一句的描述只是一种推荐。而非必须实现,规范也没明确定义必须这么做,具体实现还得参照,具体的主机厂诊断规范!!!
2.2、 Subfuntion=02;keyonoffReset=钥匙开关复位
与hardReset 硬复位,相比的区别是,会保留非易失性区域内存储的值,最直观的理解如:车辆上常见的各种记忆开关,当这些开关的检测控制模块,执行此类复位时,就会记住上次开关的状态。同理可知,hardReset 硬复位则会将开关复位到原始值。
从代码角度理解,可以理解为hardReset,是需要执行一遍初始化程序,而keyonoffReset则不需要执行初始化程序。
2.3、 Subfuntion=03;SoftReset=软复位
2.4、enableRapidPowerShutDown : 使能快速休眠
使能快速休眠开启休眠功能,在这种模式下,使用关闭钥匙电也不会进入关闭状态,而是进入休眠状态。这个子功能是针对由车辆电池供电而非点火供电的ECU,这类ECU通常情况下在钥匙电关闭后的一段时间内进入电源关闭状态(PowerOff) ,而这个指令会命令ECU打开快速休眠功能,在这种模式下,ECU在钥匙电关闭后将不会进入关闭状态,而是进入休眠状态(休眠意味着虽然断电,但仍然可以被唤醒(电池供电)),进入休眠状态所需要的时间更短,且能够在更短的时间内被唤醒,但会有一定功耗。其实这个类似于电脑的关机和休眠,常规模式下钥匙电关闭后ECU会关机,而快速休眠模式打开后,则会快速进入休眠。所以进入快速休眠状态必须满足以下两个条件:1、请求使能快速休眠(会有响应消息)2、关闭钥匙电(操作使用休眠功能,不会去发响应消息)
2.5、DisableRapidPowerShutDown : 关闭快速休眠
3、复位与诊断会话之间的关系
复位服务执行,准确的来说是是 11 01/02/03服务执行后,无论会话是存在于哪一种会话模式下,都一定会直接进入default会话模式
4、复位时,先回复后执行,还是先执行后回复?
1、规范中,并没有对“先回复后执行,还是先执行后回复”作出强制规定。但是给出强烈推荐,“先回复,后执行”。
个人推测如下,因为规范中无法预测,复位具体执行需要的时间,因为具体的复位时间,以11 01 hardRset 硬复位为例,需从以下几点综合考虑:
**1)软件架构,硬件架构和具体元器件选项
故,如果先执行复位,复位成功后,才给出肯定响应,则可能会导致诊断响应超时。但是诊断中另外一种服务会话切换 10 02 programer session中,会先回复NRC0x78。至于为什么不采取这种方案,还是个人推测,是因为复位后,会重置存储器中的内容,导致服务器端失去了先前接收的0x11服务内容,故没有采取这种方案!!
5、复位使用时间的计算
计算依据如下:
实现方案:以CAPL脚本的方法实现测试
1、0x11 01 服务发送成功后,记录时间为T1,并立即开始以1ms(capl能实现的最短周期)发送任何诊断信息(建议执行 10 01这种帧DLC=8,最小长度);
2、 记录 10 01报文正反馈 50 01 XX XX YY YY ,回复的第一帧报文,记录为T2;
3、T2-T1=复位使用的时间;