当前位置: 首页 > news >正文

CANoe中使用CAPL刷写流程详解(Trace图解)(CAN总线)

  • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
  • 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
  • 🍅 玩转CANoe,博客目录大全,点击跳转👉

请添加图片描述

目录

  • 📙 流程概述
  • 📙 UDS指令详解
    • 🍅 编程前(PreProgramming)
    • 步骤1:进入拓展会话(10 83)
    • 步骤2:会话保持(3E 80)
    • 步骤3:编程前条件预检查(31 01 02 03)(可选)
    • 步骤4:禁用 DTC功能(85 82 FF FF FF)
    • 步骤5:停止通讯报文(28 81 03)
    • 🍅 编程过程(MainProgramming)
    • 步骤6:进入Boot(10 02)
    • 步骤7:Boot下的安全解锁(27 xx)
    • 步骤8:写入指纹信息(2E F1 5A 01 01 01 01 02 03 04 05 06 07 08 09)(可选)
    • 步骤9:刷写Driver文件
    • 步骤10:完整性检查(31 01 02 02)
    • 步骤11:擦除APP文件的内存(31 01 FF 00 44 01 00 00 00 00 3C 00 00 )
    • 步骤12:刷写APP文件
    • 步骤13:APP文件完整性检查(31 01 02 02)
    • 步骤14:最后全部文件下载完毕后,进行编程依赖性检查(31 01 FF 01)
    • 步骤15:硬件重启(11 01)
    • 🍅 编程后(PostProgramming)
    • 步骤16:进入拓展会话(10 03)
    • 步骤17:使能通讯(28 80 03)
    • 步骤17:解除DTC控制(85 81 FF FF FF)
  • 🌎总结

请添加图片描述


📙 流程概述

  • 网上找了张图,基本描述了刷写的流程
    在这里插入图片描述
  • 我也截图了Vflash 刷写的一个过程图,辅佐理解

在这里插入图片描述


📙 UDS指令详解

🍅 编程前(PreProgramming)

步骤1:进入拓展会话(10 83)

  • 这没什么好说的,因为下面的服务不支持默认会话
  • 功能寻址,没响应
    在这里插入图片描述

步骤2:会话保持(3E 80)

  • 开启ECU的会话保持,因为我们知道有个S3 Server 的时间一般是5000ms ,如果没有开启会话保持,5000m后ECU就会切回默认会话。而我们刷写要保持在Boot下的。
  • 功能寻址,没响应

在这里插入图片描述


步骤3:编程前条件预检查(31 01 02 03)(可选)

  • 编程前条件预检查,检查待测ECU的自身条件是否满足刷写,一般情况下会检查电压是否正常车速信号是否接收到且<3km/s,不同的Tier1/OEM可能有不同的检查条件。
  • 物理寻址在这里插入图片描述

步骤4:禁用 DTC功能(85 82 FF FF FF)

  • 禁止ECU产生各种DTC.
  • 功能寻址,没响应
    在这里插入图片描述

步骤5:停止通讯报文(28 81 03)

  • 停止通讯报文.,降低总线负载。
  • 01 表示 enableRxAndDisableTx
  • 03表示停掉APP和网络报文都停掉
  • 功能寻址,没响应

在这里插入图片描述

🍅 编程过程(MainProgramming)


步骤6:进入Boot(10 02)

  • 物理寻址

在这里插入图片描述


步骤7:Boot下的安全解锁(27 xx)

  • 物理寻址

在这里插入图片描述


步骤8:写入指纹信息(2E F1 5A 01 01 01 01 02 03 04 05 06 07 08 09)(可选)

  • 写入指纹可能不太好理解,就是在4S店刷件的时候,写入年月日信息和4S店的编码
  • 物理寻址
    在这里插入图片描述

步骤9:刷写Driver文件

  • 刷写引导文件
    UDS 14229 -1 刷写34,36,37服务简介

  • 和刷写APP文件的不同之处,Driver文件一般很小,且无需刷写前擦除内存。


步骤10:完整性检查(31 01 02 02)

  • 文件刷写完,要进行完整性校验
  • 前些年ECU的校验方式多是CRC的,近几年看到的都是RSA文件验签的。
  • 如果时CRC,可能发送的指令是 31 01 02 02 + 3个字节的校验码
  • 如果是RSA,则 31 01 02 02 + 128/256字节的校验码
    在这里插入图片描述

步骤11:擦除APP文件的内存(31 01 FF 00 44 01 00 00 00 00 3C 00 00 )

  • 再刷写非Flash文件时,需要先执行擦除内存的操作
  • 注意,一般情况,ECU要擦很久,对这个指令的响应就比较久。10秒到300多秒我都遇到过,这取决于擦除地址的大小。
    在这里插入图片描述

步骤12:刷写APP文件

  • app的地址有可能是不连续的

  • 地址不连续的情况

在这里插入图片描述

  • 地址连续的情况,就一个Block块

在这里插入图片描述

  • 如果地址不连续那么刷写的过程的逻辑就是这样的,涉及到多次34地址和长度的请求了。

for(i=0;i<BlockNumber;i++)
{
	34 00 44 52 80 90 00 00 00 16 00
	36 01 xx xx
	36 02 xx xx
	....
	37
}

步骤13:APP文件完整性检查(31 01 02 02)

  • 同 步骤10

步骤14:最后全部文件下载完毕后,进行编程依赖性检查(31 01 FF 01)

  • 最后全部文件下载完毕后,进行编程依赖性检查(31 01 FF 01)

在这里插入图片描述

步骤15:硬件重启(11 01)

  • 全部检查都通过后,硬件重启,进入APP模式下
    在这里插入图片描述

🍅 编程后(PostProgramming)

步骤16:进入拓展会话(10 03)

步骤17:使能通讯(28 80 03)

步骤17:解除DTC控制(85 81 FF FF FF)

在这里插入图片描述

🌎总结

23

  • 虽然Flash刷写流程是个业内常规的流程,但是只给一张流程图,对于刚入门的同学,理解还是有障碍的,希望我加了一些辅助的资料能够帮助大家理解。
    7
  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18

相关文章:

  • 2021电赛国一智能送药小车(F题)设计报告
  • 第十六章 Java为什么使用序列化
  • 【C语言】memcpy , memset等内存操作函数使用方法与注意事项
  • Linux版本现状
  • 硬刚ChatGPT!文心一言能否为百度止颓?
  • Python人脸识别
  • Java每日一练(20230313)
  • 【前端】深入浅出缓存原理
  • Vue中实现路由跳转的三种方式详细分解
  • 写给20、21级学生的话
  • IDEA常用插件列表
  • 为什么 Python 没有 main 函数?
  • 我用Python写了一个下载网站所有内容的软件,可见即可下,室友表示非常好用
  • 网络工程师必备知识点
  • 嵌入式软件开发之Linux 用户权限管理
  • 计算机网络面试总结
  • 求最大公约数和最小公倍数---辗转相除法(欧几里得算法)
  • 一文带你吃透操作系统
  • 基于stm32智能语音电梯消毒系统
  • JS中sort()方法返回值?
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读