Bootloader
- 一段有下载和引导功能的程序
- 下载应用程序
- 引导使
MCU
运行在应用程序中,只在有更新请求或者APP
无效的时候才会激活
-
APP
和Bootloader
都存在Flash
中
-
Flash Driver
用来擦除APP
,下载临时存放在RAM
中,下载完成后复位释放。一般随用随下,不允许固化在Bootloader
中,防止误调用擦除APP
- 启动时序
-
注意:APP
中,执行10 02
相当于一个复位动作
-
刷写过程
服务
-
10
诊断会话控制
-
01
默认会话:权限最小,可操作的服务少
-
02
编程会话:用于解锁bootloader
相关的诊断服务
-
03
扩展会话:用于解锁高权限诊断服务,如:读写DTC
、写入数据
- 注:编程会话不能由默认会话转入(在默认会话情况下,不能执行
10 02
),只能由扩展会话转入
- 默认进入默认会话,当
ECU
处于非默认会话时,一段时间内没有请求会退回到默认会话。可以通过让Tester
周期发送3E
服务,使ECU
保持在非默认会话
-
11
重置ECUReset
- 报文格式
- 请求:
11
+ Sub-function
- 响应:
51
+ Sub-function
+ powerDownTime
- 常用子服务
-
01
硬重启
-
03
软重启
-
04
enableRapidPowerShutDown
当使用此子服务时,powerDownTime
才会存在
11 01
51 01
-
27
安全访问
-
ECU
上电后是一个锁定的状态,可以通过27
服务来解锁
- 过程:
-
Tester
端给ECU
发送请求报文来请求种子
-
ECU
收到报文后,回复肯定响应(包含种子数)
-
Tester
端根据这个种子数,利用自身的安全算法算出一个密钥K1
,并发送给ECU
-
ECU
同样根据种子数和自身的安全算法计算出一个密钥K2
,并将接收到的K1
与K2
相比较。如果一致ECU
发送肯定响应给Tester
端,已经解锁。
- 当执行复位、重新上下电或者会话切换后,会由解锁状态跳转到锁定状态
-
31
例程控制RoutineControl
- 客户端通过例程
ID
(2-Byte
)请求启动、停止服务端的例程或者请求例程结果
- 主要用于:
Erasing memory
、Resetting
- 报文格式
- 请求:
31
+ Sub-function
+ routineIdentifier(2-Byte)
- 响应:
71
+ routineControlType
+ routineIdentifier(2-Byte)
+routineInfo
- 常用子服务
-
01
启动例程(startRoutine
)
-
02
停止例程(stopRoutine
)
-
03
请求例程结果(requestRoutineResults
)
-
34
请求下载Request Download
- 报文格式
- 请求:
34
+ dataFormatIdentifier
+ addressAndLengthFormatIdentifier
+ memoryAddress
+ memorySize
-
dataFormatIdentifier
-
addressAndLengthFormatIdentifier
的含义
-
bit 7-4
: Length (number of bytes) of the memorySize parameter
,指定memorySize
有几个字节
-
bit 3-0
: Length (number of bytes) of the memoryAddress parameter
,指定memoryAddress
有几个字节
-
memoryAddress
要写入数据在内存的起始地址
-
memorySize
使用此参数与实际要传输的数据大小进行比较
- 响应:
74
+ lengthFormatIdentifier
+ maxNumberOfBlockLength
-
lengthFormatIdentifier
的含义
bit 7-4: Length (number of bytes) of the maxNumberOfBlockLength parameter
bit 3-0: reserved by document, to be set to 0
-
maxNumberOfBlockLength
告知客户端后面的每个TransferData
报文总共占多少字节
34 11 33 60 20 00 00 FF FF
74 20 00 81
-
36
传输数据Transfer Data
- 将数据从客户端传输到服务器,单次
36
最多传输3580 = 4 + 510*7 + 6
,4095 = 8 + 510*8 + 7
- 报文格式
- 请求:
36
+ blockSequenceCounter
+ Data(3-n)
-
blockSequenceCounter
序号0x01-0xFF
,下一个循环0x00-0xFF
- 响应:
76
+ blockSequenceCounter
+ transferResponseParameterRecord
36 01 xx xx # 每条报文占的字节数根据34服务中响应的maxNumberOfBlockLength返回值
76 01
-
37
请求传输退出Request Transfer Exit
37
77
-
28
通信控制(CommunicationControl
)
- 用于开启或关闭服务端某些消息的接收/发送报文
- 报文格式
- 请求:
28
+ sub-function=[controlType]
+ communicationType
-
communicationType
01: normalCommunicationMessages
02: networkManagementCommunicationMessages
03: networkManagementCommunicationMessages and normalCommunicationMessages
- 响应:
68
+ sub-function=[controlType]
28 03 02
68 03
- 常用子服务
-
00
:enableRxAndTx
启用非诊断报文的接收和发送
-
03
:disableRxAndTx
禁止非诊断报文的接收和发送
-
85
控制DTC
(ControlDTCSetting
)
- 用于停止和恢复
DTC
状态位的更新
- 报文格式
- 请求:
85
+ sub-function=[DTCSettingType]
+ DTCSettingControlOptionRecord
- 响应:
C5
+ DTCSettingType
85 01
C5 01
- 常用子服务
-
01
on
恢复更新
AndTx` 禁止非诊断报文的接收和发送
-
85
控制DTC
(ControlDTCSetting
)
- 用于停止和恢复
DTC
状态位的更新
- 报文格式
- 请求:
85
+ sub-function=[DTCSettingType]
+ DTCSettingControlOptionRecord
- 响应:
C5
+ DTCSettingType
85 01
C5 01
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)