uds 诊断协议的bootloader开发 您所在的位置:网站首页 bootloader工作流程 uds 诊断协议的bootloader开发

uds 诊断协议的bootloader开发

2023-08-17 13:23| 来源: 网络整理| 查看: 265

                                                              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)SizePaged082_0000~2_3FFF16KPaged092_4000~2_7FFF16KPaged0A2_8000~2_BFFF0A8000~0ABFFF16KPaged0B2_C000_2_EFFF16KPaged0C3_0000~3_3FFF0C8000~0CBFFF16KNo Paged0D3_4000~3_7FFF4000-7FFF16KPaged0E3_8000~3_BFFF16KNo Paged0F3_C000_3_EFFF16K

                                                                       

    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的解决,以及按比例缩放窗体空间的方法:

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

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

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

      附上核心代码:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有