uds 诊断协议的bootloader开发

                                                              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
Paged082_0000~2_3FFF16K
Paged092_4000~2_7FFF16K
Paged0A2_8000~2_BFFF0A8000~0ABFFF16K
Paged0B2_C000_2_EFFF16K
Paged0C3_0000~3_3FFF0C8000~0CBFFF16K
No Paged0D3_4000~3_7FFF4000-7FFF16K
Paged0E3_8000~3_BFFF16K
No 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的解决,以及按比例缩放窗体空间的方法:

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

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

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

      附上核心代码:

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UDS(Unified Diagnostic Services)是一种诊断协议,用于在汽车电子控制单元(ECU)之间进行诊断和通信。而CAN(Controller Area Network)是一种常用的实时通信协议,用于在汽车电子系统中进行数据传输。因此,UDS诊断协议与CAN通信协议相结合,形成了UDS诊断协议CANTP。 UDS诊断协议CANTP的作用主要有三个方面。首先,它允许诊断工具与ECU之间进行通信,以获取和更新ECU的诊断信息,例如读取和清除故障码、获取实时数据等。其次,它允许在诊断过程中进行ECU的控制和编程,包括重置ECU、编程ECU等操作。最后,UDS诊断协议CANTP还提供了满足汽车制造商特定需求的自定义功能,使得诊断工具能够适应不同品牌和型号的车辆。 UDS诊断协议CANTP的通信基于CAN总线,利用CAN帧进行数据传输。CANTP协议定义了在CAN总线上的数据传输格式、通信速率等细节,以确保诊断工具与ECU之间的可靠通信。通过CANTP协议诊断工具能够向ECU发送诊断请求,并接收ECU的响应信息。CANTP协议还提供了一些错误检测和纠错机制,以保证诊断过程的稳定和可靠性。 总之,UDS诊断协议CANTP是一种基于CAN通信协议的汽车诊断协议,它通过定义通信格式和细节,实现了诊断工具与ECU之间的可靠通信,具备诊断、控制和编程等功能,旨在满足汽车制造商的特定需求。这一协议在汽车维修和故障排除过程中扮演着重要的角色,提高了诊断效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值