uds诊断协议的bootloader开发概述

本文介绍的内容基于MC9SG128 MCU和UDS 协议,包括ECU下位机开发(CW5.1),上位机开发(VS2010,C#),和APP开发(CW5.1),诊断下载流程和检测方法通过车厂企业测试标准。

主体流程:

UDS诊断进入bootloader的流程:ECU上电时,先进入bootloader,初始化MCU后读取EEPROM判断是否可以跳转到app层,如果判断条件不满足,则留在boot执行。这时上位机烧录启动后,会发送0x10 02 进入编程会话,然后解锁ECU,发送0x34,0x36,0x37等服务请求将上位机加载的app代码(.s19格式的文件)以数据的形式发送到下位机,下位机接收到代码后通过写flash,将代码保存在flash(先进行地址分区)当中。 基本逻辑就是这样。但是大部分情况都是从app跳入到boot中,这里有个关键是,上位机发0x10 02 只发一次,app接收到0x10 02 后产生复位后到boot中就会变成default session,这时需要判断复位是因为重新上下电产生还是由于app运行时接收到了0x10 02,由固定位置的EEPROM中的内容确定此时是否需要从boot层跳跳转到app层。

下载流程图如下:

本项目 bootloader原理框图:

解锁ECU算法采用的是SHA256 和 AES128加密解密算法,UDS安全访问认证流程如下图:

需要注意的几个问题:

1.bootloader flash/EEPROM 内存分配方法:

                             飞思卡尔9s12G128 单片机flash 内存映射表
是否分页访问 Page Num(0x) Global Address(0x) prm address(0x) Size
Paged 08 2_0000~2_3FFF 16K
Paged 09 2_4000~2_7FFF 16K
Paged 0A 2_8000~2_BFFF 0A8000~0ABFFF 16K
Paged 0B 2_C000_2_EFFF 16K
Paged 0C 3_0000~3_3FFF 0C8000~0CBFFF 16K
No Paged 0D 3_4000~3_7FFF 4000-7FFF 16K
Paged 0E 3_8000~3_BFFF 16K
No Paged 0F 3_C000_3_EFFF 16K

1.1.MC9s12系列单片机寻址的特点:

由于16位单片机的 寻址范围最多是0x0000~0xFFFF(64K),为了扩大寻址范围,飞思卡尔单片机采取了地址分页机制,简单讲就是NVM通过高地址+低字节地址来确定真实的flash地址空间,从而实现对flah的读写,具体如何手写一段flash 写函数又是一篇博文了。

2.1.中断向量表必须放在非分页区

非分页区可以由CPU 的pC指针直接访问,当发生复位或者跳转时,pc指针需要找到中断向量表此时不能通过NVM来访问flash,因此应用层工程就必须将中断向量表放在非分页区。

3.1.当 flash空间不足时,(此处应该附上9s12 内存映射图)

2.s19 文件解析:附上文件解析的代码(C#)

3.C# 的简单使用:

3.1:加密/解密算法动态链接库的制作:

3.2:USBCAN_II 动态链接库的使用:

3.3:vspy3 动态链接库的添加:

3.4:c# 中“全局变量"的使用:

3.5:生成bootloader上位机界面:

4. C语言 的随机数生成:

unsigned char value = random();即可得到一个随机数(需要先#include "stdlib.h"这个头文件)

5. UDS协议网络层的概念(BS,FF,SF,CF P2Serve,P2*serve)

6.  故障触发和存储,以及读取的实现:

7.  c# 窗体假死bug的解决,以及按比例缩放窗体空间的方法:

这里的假死指的是 当点击“烧录”按钮后,上位机就开始工作,此时窗体无法拖动,也不能缩小放大。

假死的本质原因:窗体线程正在进行数据收发,无法响应对窗体控件的操作。

解决此问题的办法:将数据下载的操作委托给另一个线程,这样窗体线程就能在烧录过程中响应对鼠标窗体的操作了。

附上核心代码:

uds 诊断协议的bootloader开发相关推荐

  1. 【车载开发系列】UDS诊断协议总括篇

    [车载开发系列]UDS诊断协议总括篇 UDS诊断协议总括篇 [车载开发系列]UDS诊断协议总括篇 一.UDS诊断协议简介 为什么要设计UDS诊断协议 二. UDS诊断协议详细 1)诊断通信管理功能单元 ...

  2. 什么是UDS诊断协议

    UDS (Unified Diagnostic Services) 是一种用于在汽车电子控制单元(ECU)之间进行诊断和通信的标准协议.它是一种底层协议,主要用于诊断和编程各种汽车系统,例如发动机.变 ...

  3. 14229汽车诊断协议学习笔记

    14229汽车诊断协议学习笔记 什么是14229协议 诊断服务基本知识 确认的服务 未确认的服务 请求原语格式 响应原语格式 诊断分层结构 诊断服务 诊断会话控制(0x10)服务 ECU 重置(0x1 ...

  4. UDS诊断全方位解析,AutoSAR技术精要揭秘

    UDS诊断全方位解析,AutoSAR技术精要揭秘 近期整理了一份关于UDS诊断的详尽资料,以及对AutoSAR技术进行了深入探究.本文将为您呈现这份2000字的综合文章,其中也包含相关的源代码示例,希 ...

  5. UDS诊断服务的会话层和寻址方式

    文章目录 1 诊断服务的会话层和寻址方式 传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目录 1 诊断服务的会话层和寻址方式 根据14229 uds诊断协议的要求 ...

  6. 【UDS统一诊断服务】(补充)五、ECU bootloader开发要点详解 (1)

    文章目录 引言 1. bootloader的功能 2. 如何建立可靠的总线通信? 重要说明: 3. 解析编程文件(S19/HEX/BIN) 引言 bootloader的功能 如何建立可靠的总线通信? ...

  7. 基于CAN总线的汽车诊断协议UDS(上位机开发网络层及错误代码解析)

    UDS协议栈的开发和测试对于刚刚接触UDS协议的开发人员来说,不但需要阅读大量的标准文档,短时间内很难理解透彻,标准协议栈代码的编写更加困难,刚入门又没有快捷简单的测试工具帮助加快理解和验证,使得UD ...

  8. 基于CAN总线的汽车诊断协议UDS的开发重点

    一.意义 为了指导开发工程师,正确的使用诊断模块,快速开发出满足车厂要求的诊断功能. 二.诊断模块介绍 此诊断模块根据ISO-14229-1文档,并结合部分车厂的文档进行开发,使用面向对象的思路进行设 ...

  9. 【车载开发系列】UDS诊断---链接控制服务($0x87)

    [车载开发系列]UDS诊断-链接控制服务($0x87) 诊断---链接控制服务($0x87) [车载开发系列]UDS诊断---链接控制服务($0x87) 一.概念定义 二.应用场景 三.报文格式 1) ...

  10. 【车载开发系列】UDS诊断---DTC故障码基础回顾

    [车载开发系列]UDS诊断-DTC故障码基础回顾 UDS诊断---DTC故障码基础回顾 [车载开发系列]UDS诊断---DTC故障码基础回顾 一.什么是DTC故障码 二.DTC故障码的作用 三.什么是 ...

最新文章

  1. mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
  2. MySQL编程技巧_MySQL编程中的6个重要的实用技巧
  3. PyQt5菜单添加+事件+状态栏-7
  4. 4款bt search
  5. sql 时态表的意义_在SQL Server 2016中拉伸时态历史记录表
  6. Open3d之交互式可视化
  7. 今天,我们考大学是为了什么?
  8. CentOS7 下安装telnet服务
  9. 【leetcode】523. Continuous Subarray Sum
  10. 【Python实例第6讲】多标签分类
  11. spring源码-自动注入
  12. viper12a电源电路图_VIPER22A VIPER12A工作原理引脚功能应用电路图纸与分析
  13. 51单片机 程序 红外发射 红外接收 红外双机通信 红外遥控器 控制 灯 系统 proteus 仿真
  14. Day01_01_Linux_Ubuntu教程之Linux系统简介
  15. linux刷rockchip工具,Rockchip官方純linux,kernel4.4.0
  16. java计算机毕业设计火炬中学校刊在线投稿审稿系统源码+数据库+系统+lw文档+mybatis+运行部署
  17. 示例填充图片_用示例解释洪水填充算法
  18. html怎么给图片加密,实现图片加密
  19. 新媒体如何借势进行热点营销
  20. AD域环境搭建超详细

热门文章

  1. Tiny4412 使用superboot安装启动安卓/Linux/UbuntuCore系统, 使用SD-Flasher烧写
  2. [项目分享]JSP+Servlet+JDBC+DBCP2实现在线购书系统
  3. Linux系统-进程概念
  4. 为什么Audition cc2017扫描不了电音插件,你需要这个软件
  5. 转:高级PHP应用程序漏洞审核技术
  6. 使用J-link+J-Flash给STM32芯片烧写序列号
  7. php防止sql注入的方法
  8. canvas简易人机五子棋
  9. cmd 无法查看 台式机ip地址
  10. vue3引入echarts