STM32 UDS Bootloader开发-需求篇

news2025/1/18 17:07:09

文章目录

    • 前言
    • 内存分配
    • UDS诊断协议需求
      • CAN ID及时间参数
      • 诊断服务
        • Bootloader诊断服务
      • APP诊断服务
      • DID
      • 刷写流程
        • 预编程
        • 主编程
        • 后编程
    • 总结

前言

最近断断续续的在做基于STM32F103的UDS Bootloader,没有项目驱动,只是自己感兴趣。目前基本已经可以实现功能了,在此对做的东西进行一下总结,希望可以帮助到有需要的人。

内存分配


本次使用的单片机为STM32F103RCT6,flash大小256k,一个扇区2k,SRAM:48KB

flash起始地址为0x8000000,大小为0x40000(16进制)—>262144字节(10进制)—>256KB

RAM起始地址为0x2000000,大小为0xC000(16进制)—>49125字节(10进制)—>48KB

将flash划分为Bootloader和App两块

APP跳转到boot,这个标志放在ram中,但要保证软复位时不清除.

FlashDrive需要放到ram中,每次下载APP时先下载FlashDriver

APP有效标志放入Flash中,每次刷写前清除标志,刷写成功后写入标志。

flash分配如下:

ram分配如下:

UDS诊断协议需求

CAN ID及时间参数

波特率:500k

物理寻址ID:0x711

功能寻址ID:0x7DF

ECU 响应ID: 0x766

P2 Server:50ms P2 *Server:5000ms

P2 Client:50ms P2 *Client:5000ms

S3server:5000ms

S3client:2000ms

STmin:20ms 连续帧协议数据单元发送的最小时间间隔

BlockSize:0 每一块中包含连续帧的个数

CANFrameFillerByte:0x55 数据帧不满8byte时的填充值

诊断服务

Bootloader诊断服务

10

01

Diagnostic Session Control

Default Session

Phy Req

Fun Req

10

02

Diagnostic Session Control

ECU Programming Session

Phy Req

10

03

Diagnostic Session Control

ECU Extended Session

Phy Req

Fun Req

11

01

ECU Reset

Hard Reset

Phy Req

Fun Req

22

Read Data By Identifier

Phy Req

27

01

Security Access

Request Seed

Phy Req

27

02

Security Access

Send key

Phy Req

31

01

Routine Control

Start Routine

Phy Req

34

Request Download

Phy Req

36

Transfer Data

Phy Req

37

Request Transfer Exit

Phy Req

85

01

ControlDTCSetting

On

Phy Req

Fun Req

85

02

ControlDTCSetting

Off

APP诊断服务

10

01

Diagnostic Session Control

Default Session

Phy Req

Fun Req

10

02

Diagnostic Session Control

ECU Programming Session

Phy Req

10

03

Diagnostic Session Control

ECU Extended Session

Phy Req

Fun Req

11

01

ECU Reset

Hard Reset

Phy Req

Fun Req

14

ClearDiagnosticInformation

FF FF FF Clear all

Phy Req

22

Read Data By Identifier

Phy Req

27

01

Security Access

Request Seed

Phy Req

27

02

Security Access

Send key

Phy Req

28

00

CommunicationControl

Enable Rx and Tx

Phy Req

Fun Req

28

01

CommunicationControl

Enable Rx and DisableTx

Phy Req

Fun Req

28

02

CommunicationControl

Disable Rx and EnableTx

Phy Req

Fun Req

28

02

CommunicationControl

Disable Rx and Tx

Phy Req

Fun Req

31

01

Routine Control

Start Routine

Phy Req

85

01

ControlDTCSetting

On

Phy Req

Fun Req

85

02

ControlDTCSetting

Off

DID

22服务的DID:

F1AA:读取版本号

Routine Control DID:

FF00:擦除内存

0201:检查预编程条件

FF01:检查编程完整性和兼容性

2E服务的DID:

F15A -写指纹

刷写流程

预编程

1.进入扩展模式(功能寻址)10 83 (83表示不需要服务器应答)

2.检查预编程条件(物理寻址)31 01 XX XX,针对要刷写的ECU。一般就是检查供电电压,车速这些,如果厂家没指定,那么由ECU自己定义。如果ECU不满足预编程条件,则收到10 02进入编程模式时,返回0x22不满足条件否定响应。

3.停止DTC设置(功能寻址),85 82(82表示不需要服务器应答)

4.禁止无关通讯(功能寻址),28 83 03(83表示发送和接收报文都禁止,且不需要服务器应答,第三位01表示是应用软件报文,第三位03则表示应用软件和网络管理报文都禁止)

5.读取版本号(物理寻址)22 XX XX ,诊断仪读取当前ECU版本信息。

主编程

1.进入编程会话10 02 ,此时在APP中应该执行复位,然后进入boot中的编程模式

2.请求种子 27 01(x根据主机厂给的等级来定)

3.发送密匙 27 02 key

4.解锁成功后,2E服务写入指纹信息。一般就是时间和设备号这些

5.下载flash驱动程序,34 36 37服务。因为bootloader里是不带驱动程序的,防止意外操作导致flash改变,程序出现异常,所以只在刷写的时候才允许操作flash。下载完成后一般还需要例程控制31服务进行完整性检查(CRC32校验)和依赖性检查(ecu指定,DID为FF01-14229-1规定)(该步骤暂时不做)

6.擦除内存,由31服务执行,具体的DID按14229-1应该为FF00,需要给定擦除的起始地址和大小。

7.下载APP程序,34,36,37服务。下载完成后也需要例程控制31服务中的完整性检查(CRC32校验)和依赖性检查(ecu指定,DID为FF01-14229-1规定)

8.ECU复位,一般发送11 01进行复位,复位完成后Flash驱动程序将被清除。避免意外激活这些可能会进行非预期的内存擦除或程序操作的代码。

后编程

1.主编程完成后,ECU复位,诊断仪发送进入扩展模式10 83(功能寻址,不需要ECU回复)

2.恢复通讯28 80 03(功能寻址,不需要ECU回复,03表示网络管理报文和应用报文都恢复)

3.开启DTC诊断85 81(功能寻址,不需要ECU回复)

4.清除刷写ECU的故障信息(物理寻址14 FF FF FF)

5.进入默认会话模式10 81(功能寻址)

总结

理清需求后,再进行后面的软件开发就比较方便了。不论是开发下位机还是上位机,都需要参考这部分需求。在后面的文章中将会继续介绍软件的设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/576188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于 OpenCV 图像处理工具包 imutils 简单认知

写在前面 博文内容涉及 基本的图像处理工具包 imutils 的简单介绍以及使用Demo理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的&#xff0…

2023年真无线蓝牙耳机品牌有哪些推荐?无线蓝牙耳机选购指南

今天就来给大家测评一下2023年最受用户欢迎的蓝牙耳机,在不断地测试耳机,并挖掘好的耳机出来,不得不说,蓝牙和麦克风以及音频技术的驱动的迭代更新,性能确实惊叹不已。 对于刚接触无线耳机的小白来说,选购…

【服务器】支付宝SDK接口调试

​ 文章目录 1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道 4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名 6. 使用固定二级子域名进行访问 转发自cpolar内网穿透的文章:Java支付宝沙箱环境支付&#…

低代码的“钱景”——专业的事交给专业的人来做

你需要知道的低代码 低代码通常是指一种可视化的开发方法,用较少的代码、较快的速度来交付应用程序,相似的概念还有“无代码”,也是一种开发方法,通常是面向非技术性员工,让业务人员也可以成为“技术人员”&#xff0…

首发Yolov8涨点神器:华为诺亚2023极简的神经网络模型 VanillaNet---VanillaBlock助力检测,实现暴力涨点

强烈推荐:博主多个数据集亲测有效,实现暴力涨点,可快速迁移到论文创新性十足,刚新鲜出炉的论文,华为诺亚共同提出!!! 1.VanillaNet 论文:https://arxiv.org/pdf/2305.12972.pdf 来自华为诺亚、悉尼大学的研究者们提出了一种极简的神经网络模型 VanillaNet,以极简主义…

表情包APP小程序制作开发功能有哪些?

表情包小程序在实际的开发过程中所具备的功能都是至关重要的,功能完善好操作才能更受用户青睐。表情包小程序制作开发功能包括但不仅限于以下几点: 1、热门表情包推荐。表情包制作小程序为用户推荐最热门的表情包,让用户可以紧跟当下流…

串口屏-迪文10寸T5串口屏简单上手

先看效果 调试所需软件 DGUS上位机 下载链接 调试所需硬件 SD卡一张 读卡器一个 USB转TTL一个 DGUS上位机调试 点击新建工程(会让你选尺寸) 分别生成0号字库和DWIN ICL文件 0号字库文件在你软件的安装目录可以找到 ICL文件输出到你能找到的位置 等会要用 添加背景图片 …

异常检测论文1

本文仅作为个人阅读文献&#xff0c;做笔记记录。 <> \usepackage[dvipsnames]{xcolor} 一、摘要部分&#xff1a; 我们发现&#xff0c;现有的数据集偏向于局部结构异常&#xff0c;如划痕、凹痕或污染。特别是&#xff0c;它们缺乏违反逻辑约束形式的异常&#xff0…

【redis】Stream、String 超详细介绍

文章目录 一、Stream1.1 写入数据XADD条目 ID 的格式 1.2 获取数据XRANGE 和 XREVRANGEXREAD 监听新条目非阻塞形式阻塞形式 1.3 消费者组XGROUP 创建消费者组XREADGROUP 通过消费者组消费XACK 确认消息消费者组示例 1.4 XPENDING 和 XCLAIM 认领 其他消费者 的待处理消息XPEND…

(2022,MaskedGAN)掩蔽的生成对抗网络是数据高效生成学习者

Masked Generative Adversarial Networks are Data-Efficient Generation Learners 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 任务定义 3.2 掩蔽的生成对抗网络 3.3 理论见解 4. 实验 4.1 在 CIFAR-10、CIFAR-100 和 ImageNet 上使用…

算法基础学习笔记——④前缀和\差分\双指针\位运算

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨前缀和 ✨一维前缀和 &#x1f353;一维前缀和模板&#xff1a; ✨二维前缀和 &#x1f353;二位前缀和模板&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(∩_∩)O&a…

Python二级编程:分词去重

一、原题 参考编程模板&#xff0c;完善代码&#xff0c;实现以下功能。‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‫ 利用 jieba 库实现中文分词。对分词后的列表进行去重处理&#xff0c;然后将分词结果中字符数大于等于 3 的词语&…

大话手游原始服务端搭建教程Centos

大话手游原始服务端搭建教程Centos 大家好&#xff0c;我是艾西&#xff0c;今天给大家分享一款回合制的ARPG大话手游搭建教程。游戏场景、精美的画面以及多元的人物做的非常棒。在游戏中可以穿越神话世界&#xff0c;同时也可以结交好友&#xff0c;加入团队&#xff0c;共同…

按键的单击、双击、连续按、短按和长按实现思路

概念区分 看到好多教程说了这些概念&#xff0c;有的说单击就是短按&#xff0c;连续按就是长按等等。 其实&#xff0c;仔细想想&#xff0c;这几个概念是有一些区别的。 假如一个按键&#xff0c;没按下时是高电平&#xff0c;按下时是低电平&#xff0c;以此来理解这些概念。…

JVM—Class类文件结构详解

Class类文件的结构 要了解Class文件的结构首先得了解Class文件所采用的数据类型&#xff1a; Class文件格式采用一种类似C语言结构体的伪结构来存储数据&#xff0c;这种伪结构只有两种数据结构&#xff0c;即无符号数和表&#xff0c;解析Class文件全是以这两个数据结构为基础…

【数据结构】什么是堆,如何使用无序数组生成一个堆?

文章目录 一、堆的概念及其介绍二、如何使用无序序列构建一个堆&#xff1f;三、C语言实现堆的基本操作结构体创建与销毁获取堆顶数据与个数及堆的判空堆的插入与删除 源代码分享 一、堆的概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称&#xff0c;堆通常是一…

LEETCODE 每日一题 1093.大样本统计

题目描述 前往leetcode1093题 我们对 0 到 255 之间的整数进行采样&#xff0c;并将结果存储在数组 count 中&#xff1a;count[k] 就是整数 k 在样本中出现的次数。 计算以下统计数据: minimum &#xff1a;样本中的最小元素。 maximum &#xff1a;样品中的最大元素。 mean &…

【Log】About these two years

文章目录 第一篇博客&#xff1f;成长收获的季节Future 第一篇博客&#xff1f; 第一次在CSDN发布博客&#xff0c;是当初我学习嵌入式的时候&#xff0c;那个时候我们做了一个大创&#xff0c;其中使用到了激光雷达&#xff0c;然后我就负责激光雷达部分代码的编写和设计&…

AI-新手玩转RKNN

关于RKNN RKNN 是Rockchip npu 平台使用的模型类型&#xff0c;以.rknn后缀结尾的模型文件。Rockchip 提供了完整了模型转换 Python 工具&#xff0c;方便用户将自主研发的算法模型转换成 RKNN 模型&#xff0c;同时 Rockchip 也提供了C/C和Python API 接口。 #mermaid-svg-M7l…

电子器件系列37:SD卡座(Push-Push和Push-Pull)

SD卡座是目前最通用的数据存储卡座、记忆卡座。在各种通讯数码产品、安防产品、带储存类产品等设备上都有所应用。有着性价比高、存储容量大、使用便捷、通用性以及安全性强等特点。自弹式SD卡座的卡槽底部会设有一个小直径、小线径的弹簧或一种切口式弹片。当装入SD卡时&#…