UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白

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

目录

  • 📙 RequestDownload (0x34) service
    • 请求格式
    • 正响应格式:
    • 负响应格式:
  • 📙 TransferData (0x36) service
    • 请求格式
    • 正响应格式:
    • 负响应格式:
  • 📙 RequestTransferExit (0x37) service
    • 正响应格式:
    • 负响应格式:
  • 🌎总结

请添加图片描述

📙 RequestDownload (0x34) service

  • Tester向目标ECU请求下载服务

请求格式

在这里插入图片描述

  • dataFormatIdentifier :这是第二个字节的参数,其中高4个bit表示压缩方法,低4个bit表示加密方法一般情况就是0x00
  • addressAndLengthFormatIdentifier:请求刷写地址和长度格式,高4个bit表示下面的memorySize参数占几个字节,低4个bit表示下面的memoryAddress参数占几个字节。常规就是0x44,就是memorySizememoryAddress各占4个字节。
  • memoryAddress :请求刷写的首地址,这个参数占几个字节由addressAndLengthFormatIdentifier参数的低4个bit决定的
  • memorySize : 请求刷写的字节长度,这个参数占几个字节由addressAndLengthFormatIdentifier参数的高4个bit决定的

如下图的实例Trace : 34 00 44 52 80 90 00 00 00 16 00

在这里插入图片描述

正响应格式:

在这里插入图片描述

  • lengthFormatIdentifier:高4个bit表示下面的maxNumberOfBlockLength参数占几个字节,低4个bit默认0
  • maxNumberOfBlockLength : 目标ECU允许Tester传输最大的字节数
  • 比如下面34服务响应的 maxNumberOfBlockLength等于0x0802,下面36服务就传输了0x0802个字节(包括36 01)
  • 0x1802的解释:CAN TP层的第一个字节的高4bit表示帧类型,1就表示是首帧,2是连续帧,3是流控帧,0是单帧。
  • 实际上,36服务传输可以小于maxNumberOfBlockLength,但不能大于,

在这里插入图片描述

负响应格式:

在这里插入图片描述

  • 0x13 :36服务传输字节大于maxNumberOfBlockLength
  • 0x22 :当目标ECU正在接受数据,发送S34服务请求,ECU应该响应CNC(0x22)
  • 0x31 :请求参数中,参数不对
  • 0x33 :没有进入指定的安全会话
  • 0x70: 没事先擦除内存会报这个NRC

📙 TransferData (0x36) service

  • 刷写过程,即Tester向ECU中下载数据的过程叫download
  • Teser向ECU请求返回数据,即ECU向Tester传输数据的过程叫 upload

请求格式

在这里插入图片描述

  • blockSequenceCounter:数据传输计数器,第一帧从1开始,到了0xFF后,再从0开始,循环往复,直到下载完毕
  • transferRequestParameterRecord:传输数据,正常来说就是(maxNumberOfBlockLength - 2)

在这里插入图片描述

正响应格式:

在这里插入图片描述

  • blockSequenceCounter: 响应的结果和请求时一样
  • transferRequestParameterRecord : 刷写过程是没有这个参数的,35服务请求数据时,才有这个参数
  • 34和35服务,互为逆过程,36服务的请求和响应也是互逆的。

负响应格式:

在这里插入图片描述

  • 0x24 : 不先请求34或者35服务,会响应这个NRC
  • 0x71:xxxxx
  • 0x72:xxxxx
  • 0x73:传输Block计数器错误,比如第一帧传输时不是1,或者,不连续
  • 0x92/0x93: 刷写时电压过高或者过低

📙 RequestTransferExit (0x37) service

正响应格式:

在这里插入图片描述

  • transferResponseParameterRecord:从没见过
    在这里插入图片描述

负响应格式:

在这里插入图片描述

在这里插入图片描述

🌎总结

23

7

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

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

http://www.ppmy.cn/news/32140.html

相关文章

分享10个不错的C语言开源项目

今天跟大家分享10个重量级的C语言开源项目,C语言确实经得住考验: Redis:Redis是一个开源的高性能的键值对数据库。它以C语言编写,具有极高的性能和可靠性。 Nginx:Nginx是一个高性能的HTTP和反向代理服务器&#xff0…

ES+Redis+MySQL,这个高可用架构设计太顶了!

一、背景 会员系统是一种基础系统,跟公司所有业务线的下单主流程密切相关。如果会员系统出故障,会导致用户无法下单,影响范围是全公司所有业务线。所以,会员系统必须保证高性能、高可用,提供稳定、高效的基础服务。 …

ChatGPT告诉你:项目管理能干到60岁吗?

早上好,我是老原。这段时间最火的莫过于ChatGPT,从文章创作到论文写作,甚至编程序,简直厉害的不要不要的。本以为过几天热度就自然消退了,结果是愈演愈烈,热度未减……大家也从一开始得玩乐心态&#xff0c…

javaSE系列之类与对象

javaSE系列之类与方法什么是类类的定义书写事项什么是实例化this引用this的注意事项对象的初始化构造方法封装的概念访问限定符封装扩展之包static成员static的特性static的初始化代码块注意事项内部类1.实例内部类💗 💗 博客:小怡同学💗 &am…

python flask项目打包成docker镜像发布

1.编写python flask代码,简单写一个加法的接口,命名为sum.py import json from flask import Flask,request,render_template app Flask(__name__)app.route(/) def index():return hello worldapp.route(/sum,methods[POST]) def correct():a request…

第十八章 opengl之高级OpenGL(帧缓冲)

OpenGL创建一个帧缓冲纹理附件渲染缓冲对象附件渲染到纹理举例实践如下后期处理反相灰度核效果锐化模糊边缘检测屏幕缓冲当前已经接触了很多:颜色缓冲,(写入深度信息)深度缓冲,(根据条件丢弃特定片段&#…

Linux系统搭建FTP服务器

安装vsftpdyum -y install vsftpd添加FTP用户方式1、添加只允许通过ftp访问的用户useradd -d /home/ftp ftp_user #-d指定用户登录时的启始目录方式2、允许用户登录操作系统usermod -d /home/ftp -s /bin/bash ftp_user #-s指定用户登入后所使用的shell设置用户登录密码passwd …

C语言实现学生成绩管理系统思考

学生成绩管理系统思考 作业要求: 目录 思路 基本函数 学习理解大佬的代码: 完成作业: 思路 学生成绩管理系统,首先要初始化系统, 用C语言做学生实验管理系统要求实现对某班学生3门课程(包括语文、数…