本帖最后由 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 存储器。
- 处理地址超出范围等错误情况。
|
此文章已获得独家原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。
感谢分享
深度探究CAN通信中的UDS功能,通过对UDS的升级和服务讨论初步了解UDS功能
奖励200家园币