Bootloader

Bootloader
  • 一段有下载引导功能的程序
    • 下载应用程序
    • 引导使MCU运行在应用程序中,只在有更新请求或者APP无效的时候才会激活
  • APPBootloader都存在Flash
  • Flash Driver用来擦除APP,下载临时存放在RAM中,下载完成后复位释放。一般随用随下,不允许固化在Bootloader中,防止误调用擦除APP
  • 启动时序

Bootloader_第1张图片

  • 注意:APP中,执行10 02相当于一个复位动作

  • 刷写过程

    • Pre-Programming step 预编程阶段

      • 跳转到扩展会话模式

        02 10 03
        06 50 03 xx xx xx xx
        # 这中间为了保持当前会话,会周期发送 3E 服务
        02 3E 80
        
        • 02 10 03,后面的填充根据要求
      • 关闭DTC

        02 85 02
        02 C5 02
        
      • 禁止非诊断报文的接收和发送

        03 28 03 01
        02 68 03
        
    • Programming step 主编程阶段

      • 跳转到编程会话模式

        02 10 02
        06 50 02 xx xx xx xx 
        # 这中间为了保持当前会话,会周期发送 3E 服务
        02 3E 80
        
      • 安全访问

        02 27 01
        04 67 01 xx xx(Seed 2-Byte)
        04 27 02 xx xx(KEY: 2-Byte)
        02 67 02
        
      • 下载Flash Driver

        # Request Download
        34 xx xx xx...
        74 xx(lengthFormatIdentifier) xx...(maxNumberOfBlockLength)
        # Transfer Data
        # 序号首次1-F,后续0-F
        36 01 xx...# 每条报文占的字节数根据34服务中响应的maxNumberOfBlockLength返回值
        76 01
        # Request Transfer Exit
        01 37
        01 77
        
      • 完整性校验(check routine),检查是否成功下载erase routine

        31 01 xx xx(Routine ID)
        71 01 xx xx(Routine ID) xx(routineInfo)
        
      • 擦除APP ,擦除前会将APP有效位置0

        • 如果没有置0,当擦除一半失败,APP程序不完整了,Programming Request没有置1APP有效位依然有效,那就不断进入崩溃的APP
        • Stay In Boot,为了让Boot Manager能够收到上位机的诊断请求,在Boot程序停留一段时间,在这个时间内,Boot尝试捕获上位机的10 02请求。超过这个时间,Boot Manager必须决定进入哪个
        31 01 xx xx(Routine ID)
        71 01 xx xx(Routine ID) xx(routineInfo)
        
      • 刷写新的APPECU (如果多个Module,循环多次)

        # Request Download
        34 xx xx xx...
        74 xx(lengthFormatIdentifier) xx...(maxNumberOfBlockLength)
        # Transfer Data
        # 序号首次1-F,后续0-F
        36 01 xx...# 每条报文占的字节数根据34服务中响应的maxNumberOfBlockLength返回值
        76 01
        # Request Transfer Exit
        01 37
        01 77
        
      • 完整性校验(check Memory)

        31 01 xx xx(Routine ID)
        71 01 xx xx(Routine ID) xx(routineInfo)
        
      • 验证应用程序validate application,通过则将APP有效位置1

        31 01 xx xx(Routine ID)
        71 01 xx xx(Routine ID) xx(routineInfo)
        
      • WriteDataByIdentifier —— dataIdentifier = VIN

        1x xx 2E xx xx(DID) xx...(Data)
        30 00 00 
        21 xx...
        22 xx...
        03 6E xx xx(DID)
        
    • Post-Programming step 后编程阶段,这之后将Program Request0

      • 开启通信

        03 28 00 01
        02 68 00
        
      • 开启DTC

        02 85 01
        02 C5 01
        
      • 复位Reset

        02 11 01
        02 51 01
        
服务
  • 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,并将接收到的K1K2相比较。如果一致ECU发送肯定响应给Tester端,已经解锁。
    • 当执行复位、重新上下电或者会话切换后,会由解锁状态跳转到锁定状态
  • 31 例程控制RoutineControl

    • 客户端通过例程ID(2-Byte)请求启动、停止服务端的例程或者请求例程结果
    • 主要用于:Erasing memoryResetting
    • 报文格式
      • 请求: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
        • 00
        • 00以外的值由汽车制造商定义
      • 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 + 64095 = 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
    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
    
    • 常用子服务
      • 00enableRxAndTx 启用非诊断报文的接收和发送
      • 03disableRxAndTx 禁止非诊断报文的接收和发送
  • 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
    
    • 常用子服务
      • 01 on 恢复更新
      • 02 off 停止更新

你可能感兴趣的:(诊断协议,UDS,Bootloader,汽车电子)