UDS之BOOT刷写详细步骤目录
前言
现在汽车行业BOOT刷写还是比较热门的,所以学会BOOT刷写是非常重要的,以后还要学习更为高级的OTA升级(空中升级)等,本文介绍BOOT刷写的详细步骤。
一、BOOT刷写的阶段
1、预编程阶段
在刷写前,通过刷写工具去读取 ECU 的 Boot 软件
版本号(F180)、软件版本(F188)、 VIN(F190)、 硬件版本(F191)
1.1打开扩展会话(10 03)
软件一开始处于默认会话,需要发送指令让其进入扩展会话,方便后面的读写操作。
1.2检查预编程条件(31 01 xx xx 例如31 01 02 03)
整车厂在刷写时,会检查一些条件,当条件不满足时,退出刷写。
ECU 的电源电压不能太高或者太低(9V-16V)
车辆处于 IGN On 状态, 但不在 Ready 状态
车辆处于静止状态,车速为 0km/h 等等;
1.3关闭DTC存储功能(85 02 )
在刷写过程中,ECU控制器功能不正常,可能不能收发总线消息,这种情况下,需要避免在这个过程中触发故障码存储。使用85诊断故障码设置服务设置故障码设置类型为OFF(02)关闭DTC的存储。
1.4关闭报文通信(28 01 01 )
刷写过程中,因为传输的数据较多,因此停用通讯报文的发送可以降低总线负载。
使用28服务关闭与诊断无关的报文,将节约出来的通信资源用于刷写软件,提升刷写速度。
2、刷写中(认证&下载数据)
在设备固件升级或初始化的过程中,操作步骤可以详述如下:
1.
身份认证:•首先进行安全验证,确保只有授权的用户或系统能够执行后续的操作。这一步骤可能包括输入密码、使用数字证书、或者通过特定的安全密钥进行身份识别和鉴权。
2.
指纹写入:•在某些需要生物特征识别功能的设备中,会在身份认证通过后,允许用户录入或更新指纹信息到设备的安全模块中,用于后续的身份验证和访问控制。
3.
擦除内存:•在固件刷写前,通常会对目标存储区域(例如闪存)进行擦除操作,确保原有数据被清除,避免新旧固件内容冲突导致系统异常。这一步可能执行全盘擦除或仅擦除固件分区。
4.
下载固件至指定地址:•从安全可靠的服务器获取新的固件文件,并将该固件精确无误地传输至设备内部预先设定好的存储地址,这个过程一般称为固件烧录或下载。
5.
校验与写入确认:•在固件下载完成后,系统会根据固件包中的校验码或其他完整性保护机制,对写入到设备内存中的固件数据进行完整性检查和正确性验证。
6.
固化与重启:•如果校验成功,表明固件已正确写入,此时系统可能会执行固化操作,使新固件生效,并计划重启设备以加载并运行新固件。整体流程设计严谨,旨在确保固件升级过程的安全性和稳定性,防止非法篡改以及因操作不当引发的各种问题。
2.1 切换到编程会话(10 02)
刷写过程必须要在编程会话中才可以进行。使用会话控制服务 10 02 切换到 programming session。
2.2安全访问-请求种子(27 01)
27 安全访问服务 保证是有权限的人员或者设备才能够进行刷写,安全访问服务子功能请求种子向 ECU 请求安全认证种子。
2.3 安全访问-发送与验证Key(27 02)
诊断设备在接收到由车辆ECU提供的种子(security seed)后,会利用预设的共享算法对该种子进行运算以生成秘钥。接下来,诊断工具通过特定的子功能将计算得到的秘钥发送给目标ECU。ECU接收到该秘钥后,同样采用相同的预定义算法进行计算,并与收到的秘钥值进行对比验证。如果两者吻合,则表示认证成功,诊断设备获得了对ECU安全访问的权利。然而,若连续多次认证失败,ECU将会启动安全保护机制。每经历一次认证失败,ECU内部的安全访问失败计数器就会增加1。当错误尝试次数累计达到3次时,ECU将向诊断设备返回一个否定响应码0x36,表明“尝试次数已超出限制”。此时,ECU会自动进入一段冷却期,即暂停服务约10秒钟。在这10秒之内,任何新的认证请求都将暂时无法通过,ECU会继续返回否定响应码0x37,表示“延时时间尚未结束”。待10秒钟延时结束后,诊断设备方可再次发起新的认证请求。
2.4 写入指纹(2E F1 98 1122 …)
记录刷写时间(F198)、写入指纹信息(F199),标记写软件人的身份(维修店编号、诊断设备序列号)。
2.5 擦除内存(31 01 FF 00 XX XX YY YY)
在向ECU的内存区域上传新数据之前,必须先执行擦除操作以清除该区域内原有的数据。为了实现这一目标,可以利用31号诊断服务例行程序(Routine
Control Service),具体为服务ID
FF00,它被设计用于对ECU内部存储器进行擦除操作。依据控制器的实际地址空间分配情况以及芯片自身的擦除单元大小和能力,该服务能够执行单次整体擦除或者分段多次擦除操作。举例来说,若要发起一次擦除请求,可通过以下形式构造报文命令:31
01 FF 00 起始地址 擦除长度
这里的“起始地址”指的是需要擦除的内存区域的第一个字节地址,“擦除长度”则表示从起始地址开始连续要擦除的字节数量。通过这种方式,确保了在下载新的数据前,目标内存区域已经被有效地清理为空白状态。
2.6 请求下载(34 XX YY ZZ ZZ AA AA)
向ECU传输软件之前需要指定写入的地址和数据的大小。
刷写设备使用 34 请求下载服务向 ECU 指定刷写起始地址和刷写数据的大小, 请求下载
($34)服务指定的内存从起始到结束应该是连续的。如果不是连续的,刷写设备应该为每个要刷写的数据块发送一个单独的请求。34 数据格式标识符 地址和长度格式标识 内存地址 内存大小
2.7 传输数据(36 XX YY YY …)
软件下载服务,将数据下载到上一步指定的内存中。
刷写设备使用 36 传输数据服务向 ECU 内存区域中传输刷写的数据,一个数据块通常需要多条传输数据服务传输。
36 数据块顺序计数器 数据
2.8 请求传输退出 (37)
37 服务退出当前连续内存区域的刷写,将在肯定响应中携带校验和,校验最近的一条请求下载请求服务指定的内存区域。
返回的校验和与刷写设备计算的校验和进行比较,如果不相同,将重新使用 36 数据传输服务下载数据,多次校验不通过,刷写将会中断。
2.9 检查存储空间(31 01 02 02)
检验刷写的数据的可靠性,在软件/数据刷写完毕时,刷写设备通过例行程序服务来验证刷写到内存区域的每块数据是否成功。
检查刷写的数据的完整性,确定来源合法,通过CRC、哈希、数字签名等方法,保证刷写过程中不会出错,且刷写的数据是来自合法的提供者。
2.10 检查编程依赖(31 01 FF 01)
使用 31 例程控制服务 FF01 确认刷入的软件和ECU的硬件,基础软件是匹配的。
2.11 ECU复位(11 01)
整个刷写完成后,刷写设备要求 ECU 硬件复位, ECU 进入应用程序。
11 复位服务重启ECU,使刷写的新软件生效。
3、 刷写后(还原网络)
刷写后的步骤与刷写前的步骤是对应的,启用刷写前禁用的通信等。
此时网络恢复到正常的模式, ECU 以默认的波特率进行正常的通信,并能进行故障码的检测和存储。刷写结束后要求各 ECU
恢复非诊断消息的发送及接收 。
3.1 切换到扩展模式(10 03)
默认状态下 ECU 在 01 默认会话中,使用UDS 会话切换(10
03)进入拓展会话。在拓展会话中,启用非诊断通信、清除刷写阶段产生的故障码、各 ECU 恢复故障码的检测。
3.2 启用发送一般通讯报文(28 00 01 XX XX)
使用 28 通信控制服务启用在刷写前停止收发的一般通讯报文。
3.3 各 ECU 恢复故障码的检测(85 01)
恢复故障码检测,使用85诊断故障码设置服务设置故障码设置类型为ON(01)恢复DTC的存储。
3.4 ECU 回到默认模式(10 01)
从扩展会话切换回默认会话。