发新帖本帖赏金 25.00元(功能说明)我要提问
返回列表
打印
[技术讨论]

关于UDS升级的深度探讨

[复制链接]
20721|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
uuguoleilei|  楼主 | 2023-12-2 23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 uuguoleilei 于 2024-9-20 20:13 编辑

  • #技术资源# #申请原创# #有奖活动# #每日话题#  
  • can通信的UDS功能是车辆进行软件升级必不可少的一项功能,UDS的有许多的服务,有需要详细了解的朋友可以自行查看14229国标;这里主要探讨UDS升级涉及到的服务;
  • 一、UDS功能寻址和物理寻址UDS的功能寻址和物理寻址是实现人或设备与ECU控制器交流的一种语言。这两种寻址方式在UDS协议中用于确定数据包应该被发送到网络中的哪个节点或设备。功能寻址是一对多的通信或广播方式,向执行特定功能的所有设备发送数据包,无需知道每个设备的具体物理地址。比如广播诊断请求Request,同时等待总线上的ECU给与响应。物理寻址是一对一的通信方式,直接将数据包发送至具有特定物理地址的设备,如特定的ECU。指定发送特定诊断请求Request,等待指定ECU给与响应。ECU会有一个物理ID:0x666,一个自己的功能ID:0x888;
  • 二、10服务10服务有很多,在14229中也有详细的定义,我们只讲我们用到的3种;默认会话(0x01);默认会话是uds的初始化的状态,默认的状态就是这个会话,默认会话的请求只需要发送  ID+10 01  对应的ecu就要进入默认会话了;ecu进入默认会话后,需要进行正响应,也就是响应ID+50 01;(正响应是服务ID+0x40 :0x10 +0x40 = 0x50)编程会话(0x02);编程会话:只存在于boot中的会话,当请求编程会话时,如果此时程序正运行在app层,那么ecu将要重启,进入到boot区进行程序的刷写流程扩展会话(0x03);扩展会话:当需要进入服务指令时,就需要进入扩展会话状态,比如31服务,19服务
  • --------------------------------------------------------------------------------------------------------
  • 当程序运行在app层时,uds服务可以提供网络管理服务和故障码查询服务;当app需要uds升级时,app需要进入boot才能进行升级,进入boot的方式一般为通过1002服务,更改app的跳转标志,再进行复位,达到进到boot的目的;但是在app进入boot之前,需要做一些准备工作,才能安心的进入boot,比如需要先发送报文停止服务,一般为85 01;还需要经过密钥的校验通过,才可以进入boot,一般1级密钥为2701 服务,通过2702+seed  和6702+key,完成密钥的校验,一般密钥通过后,就可以直接发送1002进入boot了;
  • ——————————————————————————————————————————
  • 到了boot之后,还需要进行密钥的校验,因为此时已经经过复位了,当然如果你是通过程序跳转指令跳到boot的,也是需要发送一次密钥的;再次通过密钥之后,就需要加载flashdriver,每个芯片的flashdriver都不一样的,因为flashdriver的使用频率比较高,所以需要反正sram这样的响应速度快的内存里;flashdriver的内容一般都是,擦除内存功能和写内存功能,其中包括flash的解锁和上锁指令,以及flash的擦除一般为一页一页擦除,写的字节数必须为4的倍数,这是由于一位的flash内存最小单位是4bit,当然不是所有的芯片都一样,需要详细查看芯片数据手册的flash那一章节;加载flashdriver的uds服务是在密钥通过之后,通过34服务,36服务,37服务来传输的,其中34服务是校验要传输的地址和大小,比如地址为0x00002300,大小为0x780,那么34服务的指令则为 34 00 44 00 00 23 00 00 00 07 80;注意这一长串的发送给的时候需要用连续帧发送;
  • 34服务校验完地址和大小后,就可以使用36服务进行传输数据了,36服务传输的数据内容flashdriver的十六进制数内容,存储到flashdriver对应的地址;36服务下载完成后就可以使用37服务退出传输了;将flashdriver传输完成后,需要使用31服务的did子服务进行crc校验,如果校验不通过说明传输的地址和大小正确,但是传输的数据不正确,需要进一步进行排查;
  • 设计 flash driver 的功能擦除功能:确定 flash 的擦除单位,通常是页或块。设计擦除函数,该函数接收要擦除的地址范围作为参数,并按照芯片的要求发送擦除命令序列。处理擦除操作的错误情况,如超时、失败等。编程功能:确定 flash 的编程单位,通常是字节或字。设计编程函数,该函数接收要编程的地址和数据作为参数,并按照芯片的要求发送编程命令序列。处理编程操作的错误情况,如校验错误、写入失败等。
  • 解锁和上锁功能:了解芯片的 flash 保护机制,确定如何解锁和上锁 flash 存储器。
  • 设计相应的函数来执行解锁和上锁操作,确保在进行擦除和编程操作之前解锁 flash,并在操作完成后上锁以保护数据。
  • 地址映射和转换:根据芯片的地址映射方式,将逻辑地址转换为物理地址,以便正确访问 flash 存储器。处理地址超出范围等错误情况。
  • ————2024.0807.今天先到这————————————————————————————————————————————————[color=var(--md-box-samantha-normal-text-color) !important]设计 flash driver 的功能



    • 擦除功能:
    • 处理擦除操作的错误情况,如超时、失败等。
    • 设计擦除函数,该函数接收要擦除的地址范围作为参数,并按照芯片的要求发送擦除命令序列。
    • 确定 flash 的擦除单位,通常是页或块。
    • 编程功能:
    • 处理编程操作的错误情况,如校验错误、写入失败等。
    • 设计编程函数,该函数接收要编程的地址和数据作为参数,并按照芯片的要求发送编程命令序列。
    • 确定 flash 的编程单位,通常是字节或字。
    • 解锁和上锁功能:
    • 设计相应的函数来执行解锁和上锁操作,确保在进行擦除和编程操作之前解锁 flash,并在操作完成后上锁以保护数据。
    • 了解芯片的 flash 保护机制,确定如何解锁和上锁 flash 存储器。
    • 地址映射和转换:
    • 根据芯片的地址映射方式,将逻辑地址转换为物理地址,以便正确访问 flash 存储器。
    • 处理地址超出范围等错误情况。

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 25.00 元 2024-08-08
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
dirtwillfly 2024-9-20 16:46 回复TA
感谢分享 
21小跑堂 2024-8-8 16:28 回复TA
深度探究CAN通信中的UDS功能,通过对UDS的升级和服务讨论初步了解UDS功能 
21小跑堂 2023-12-6 10:46 回复TA
奖励200家园币 

相关帖子

沙发
uuguoleilei|  楼主 | 2024-8-7 15:58 | 只看该作者
板凳
power_2013| | 2024-9-7 23:05 | 只看该作者
没看到深度的啥

使用特权

评论回复
评论
uuguoleilei 2024-9-20 09:46 回复TA
是的,比较浅显目前 
地板
田舍郎| | 2024-9-7 23:48 | 只看该作者
这些不是最基本的操作流程吗

使用特权

评论回复
评论
uuguoleilei 2024-9-20 09:47 回复TA
是的,基本烧录流程 
发新帖 本帖赏金 25.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

42

帖子

3

粉丝