Bootloader

2023-11-14

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

在这里插入图片描述

  • 注意: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 停止更新
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bootloader 的相关文章

  • Flash概念简述

    1 Flash全名叫做Flash Memory Flash存储芯片的一种 通过特定的程序可以修改里面的数据 Flash属于非易失性存储设备 Non volatile Memory Device 与此相对应的是易失性存储设备 Volatile
  • BootLoader介绍

    文章目录 一 BootLoader的引入 二 BootLoader的启动方式 三 BootLoader的结构和启动过程 四 自己写一个BootLoader 1 BootLoader第一阶段 2 BootLoader第二阶段 一 BootLo
  • [转]汽车电子还能这么玩

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 导读 汽车电子
  • Qt在嵌入式系统QNX的HMI应用方案

    author 锋影 扣扣 174176320 e mail 174176320 qq com 黑莓推出了其全新的黑莓10平台QT的智能手机和平板电脑 它产生了大量的兴趣在QT上移动 黑莓10是基于QNX1操作系统的黑莓 也许不是很出名 是Q
  • [转][QNX]对存储设备分区

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 email 174176320 qq com 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 命令格式 fdisk
  • qnx的汽车全液晶仪表-基于qnx系统的汽车仪表-车机系统开发

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 e mail 174176320 qq com QNX系统在
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • 从 UEFI 应用程序内部运行 UEFI shell 命令

    我是 UEFI 应用程序开发新手 我的要求是 我需要从 UEFI 应用程序运行 UEFI shell 命令 app efi 源代码 需要指导我如何做到这一点 Example cpUEFI shell 中的命令用于将文件从一个路径复制到 其他
  • 加载引导加载程序的第二阶段和/或将控制权转移给它时出现问题

    我的主引导记录代码 bit16 16bit by default org 0x7c00 jmp short start nop bsOEM db OS423 v 0 1 OEM String start cls mov ah 06h Fun
  • 未选择链接器文件

    我正在使用链接器文件处理应用程序中的问题 发生的事情是在资源管理器选项卡中 链接器文件似乎没有被 选择 我必须提到我也有一个引导加载程序 我收到错误 944 地址 1FC02FF8h 处的数据冲突 我认为这与该错误有关 有人能帮我吗 非常感
  • 与 CMPSB 指令混淆

    我一直在看这段代码 我对代表 cmpsb line LOOP push cx mov cx 0x000B eleven character name mov si ImageName image name to find push di r
  • 将 NASM 和 64 位 C 代码编译并链接到引导加载程序中 [重复]

    这个问题在这里已经有答案了 我制作了一个非常简单的一级引导加载程序 它执行两个主要操作 从 16 位实模式切换到 64 位长模式 并从硬盘读取接下来的几个用于启动基本内核的扇区 对于基本内核 我尝试用 C 而不是汇编编写代码 对此我有一些疑
  • 将bootloader和内核制作成iso? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何创建将内核加载到 iso 的简单引导加载程序 已经过去 5 天了 我在 google 中搜索并进行
  • NASM:磁盘读取超时

    尝试从磁盘 从同一文件 读取数据 将另外 2 个 512 字节扇区加载到内存中 磁盘读取功能如下 read DH sectors to ES BX from drive DL disk read push dx push bx Tried
  • ARM 系统上的 Bootrom 与引导加载程序有什么区别

    我主要来自 x86 系统背景 其中 BIOS 固件 负责从 PowerON 加载引导加载程序 如 GRUB 进而加载操作系统 我现在一直在阅读 ARM 系统上的等效启动顺序 网上似乎有文章提到了两个术语 bootrom 和 bootload
  • 没有操作系统直接运行的程序叫什么名字?

    当我试图提出有关该主题的其他问题时 我很难正确表达我的问题 那么直接在相关计算机上运行的程序的正确名称是什么 一个可以描述内核和引导加载程序的术语 因为它们是在没有操作系统的情况下直接执行的 C 标准称之为 独立环境 我觉得这个术语和我见过
  • 检索 Windows Vista 及更高版本上 BootMgr 的分区号

    我需要将启动管理器映射到分区号 Manufacturer Recovery partition Partition 0 Boot manager Partition 1 C Partition 2 D Partition 3 对于已安装的分
  • 如何获取 RAM 大小、引导加载程序

    我想问如何在引导加载程序中获取总 RAM 大小和可用 RAM 大小 截至目前 我知道如何获得较低的内存 但由于某种原因我无法将其打印到屏幕上 因为它保存在斧头寄存器中 这是我到目前为止所拥有的 BITS 16 BootLoader alwa
  • 将引导加载程序存储在软盘映像上的哪里?

    我将编写并测试引导加载程序 为了做到这一点 我计划将引导加载程序复制到软盘映像文件上并将其安装在虚拟机中 但是 我不确定将引导加载程序的机器代码放在哪里 它是否只是转储到文件的前几个字节中 软盘的引导扇区是第一个扇区 如果您谈论的是原始软盘
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c

随机推荐

  • 【华为OD机试真题2023 JS】统一限载货物数最小值

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 统一限载货物数最小值 知识点二分查找 时间限制 1s 空间限制 64MB 限定语言 不限 题目描述 火车站附近的货物中转站负责将到站货物运往仓库 小明在中转站负责调度2K辆中转车
  • JeeSite快速开发平台 JNPF快速开发平台3.4.6版本 框架源码部署文档入门说明

    JeeSite快速开发平台 JeeSite 快速开发平台 不仅仅是一个后台开发框架 它是一个企业级快速开发解决方案 后端基于经典组合 Spring Boot Shiro MyBatis 前端采用 Beetl Bootstrap AdminL
  • x264编码h264

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 x264介绍 二 x264中主要的编码接口以及主要数据结构介绍 1 void x264 param default x264 param t 2 int
  • 发现一个好用的层级多项目管理工具

    市面上项目管理工具蛮多的 但大多仅支持单层多项目管理 而我们公司有多条产品线 如果没有层级组织用于分类 使用起来就非常麻烦 最近 我们试用了下Topo项目管理软件 它可以根据我们的组织架构进行层级搭建 实际使用效果不错 看图 进系统 进设置
  • 【Linux】网络编程套接字(下)

    Linux 博客主页 一起去看日落吗 分享博主的在Linux中学习到的知识和遇到的问题 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 看似不起波澜的日复一日 一定会在某一天让你看见坚持的意义 祝我们都能在鸡零狗碎里找
  • 第八天字符串

    344 反转字符串 力扣题目链接 opens new window 编写一个函数 其作用是将输入的字符串反转过来 输入字符串以字符数组 char 的形式给出 不要给另外的数组分配额外的空间 你必须原地修改输入数组 使用 O 1 的额外空间解
  • 基于单片机超声波测距语音播放

    一 系统方案 本设计采用52单片机作为主控器 HC SR04测距 液晶1602显示 按键设置报警阀值 语音报警 二 硬件设计 原理图如下 三 单片机软件设计 1 首先是系统初始化 uint dist 保存超声波模块测量到的结果 Trig P
  • pandas 数据导出

    1 导出到csv文件 1 1 DataFrame数据导出 index 0 忽略索引 header 0 忽略表头 mode a 可追加 df to csv data output path index 0 header 0 sep t flo
  • 循环控制结构小题1

    include
  • mapbox-gl支持多种坐标系

    文章目录 前言 效果 总结 前言 mapbox默认的投影是3857 但是实际应用中我们经常会使用高德 百度 天地图的服务 原生mapbox是不支持的 需要我们修改源码以支持以上坐标系 参考 支持百度 高德坐标系 mapboxgl 纠偏百度地
  • vue 项目中 zip 压缩包文件下载

    vue 项目中 zip 压缩包文件下载 参考文章 胡新fa 文件下载流程 参考文章 Mr 裴 压缩包下载打不开问题 參考文章 sqwu 注意 一定要在接口中配置 responseType blob 该属性 headers 根据需求添加 re
  • URL 地址栏锚点 window location hash 使用方法

    location是javascript里边管理地址栏的内置对象 比如location href就管理页面的url 用location href url就可以直接将页面重定向url 本文转自米扑博客 URL 地址栏锚点 window loca
  • ULN2003芯片控制直流电机学习

    ULN2003 双极型线性集成电路 达林顿晶体管阵列 ULN2003是一个单片高电压 高电流的达林顿晶体管阵列集成 电路 它是由7对NPN达林顿管组成的 它的高电压输出特性和阴 极箝位二极管可以转换感应负载 单个达林顿对的集电极电流是 50
  • pyspark_自定义udf_解析json列【附代码】

    pyspark 自定义udf 解析json列 附代码 一 背景 二 调研方案 三 利用Pyspark udf自定义函数实现大数据并行计算 整体流程 案例代码运行结果 案例代码 代码地址 代码 一 背景 车联网数据有很多车的时序数据 现有一套
  • GITHUB实用有趣工具推荐

    1 algorithm visualizer 一个交互式的在线可视化学习算法平台 能在可视化区域看到每行代码执行对应的操作 并且有对应的动画呈现 使你更加容易理解算法 2 pcottle learnGitBranching 一个在线可视化交
  • python能做什么毕业设计-有没有适合python做的毕设题目,现在不知道做什么了?...

    对于这个问题有三个解决方案 1 自己开发 2 借助开源项目 3 付费开发 结合自身的能力和需求 大家可以自行寻找合适的解决方案 1 自己开发 难度 高 实用性 低 价格 免费 Python 是一门非常好入门的语言 普通人跟着一门教程认真学
  • jenkins部署 java项目到远程 windows服务器

    jenkins部署 java项目到远程 windows服务器 1 查看windows服务器是否有 ssh服务 cmd模式 输入 ssh 如果报错就去安装ssh 可以去下 openSSH 2 然后直接用自己的电脑就是客户端 用xshell 连
  • 79. Word Search

    Given a 2D board and a word find if the word exists in the grid The word can be constructed from letters of sequentially
  • 蓦然回首 灯火阑珊

    时间的沙漏沉淀着无法逃离的过往 记忆的双手总是拾起那些明媚的忧伤 雨声 划破伤痛的记忆 泪水 激起心中的波浪 你的一闪而过 让我记住这永恒的瞬间 你在我生命中留下不褪色的光芒 就如流星的坠落绚丽地点亮了整个星空 很幸运 就像是个命运的宠儿
  • Bootloader

    Bootloader 一段有下载和引导功能的程序 下载应用程序 引导使MCU运行在应用程序中 只在有更新请求或者APP无效的时候才会激活 APP和Bootloader都存在Flash中 Flash Driver用来擦除APP 下载临时存放在