今日跟大家分享参加野火【瑞萨RA MCU创意氛围赛】选手的项目——基于CAN总线的UDS诊断Bootloader升级MCU工具。
一个MCU固件升级工具,基于瑞萨RA4M2的CAN总线通信接口,UDS协议实现程序升级,可以满足产品迭代、修复问题、优化性能等多方面的需求。实现操作,将升级包放到sd中,即可实现多个MCU自动化升级。更多具体操作一起看看下面的讲解!
前言
UDS诊断协议(ISO14229),是一项国际标准,为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求,并没有设计通信机制。ISO14229仅对应用层和会话层做出了定义。UDS包含了ISO14229下属的七个子协议,其中ISO14229-2是在会话层,其他6个子协议在应用层。这让我想到大学学习计算机网络知识中OSI七层网络模型。
OSI模型
如果MCU要实现UDS功能,还需要建立传输层和网络层,小昭使用的是ISO15765来实现这两层功能,剩下就是数据链路层和物理层,这两层属于底层,MCU已经帮我们实现,做些简单配置就可以了。
底层功能配置
① CAN总线配置
canID接收配置、中断函数请点击文末阅读原文参考文章:
② 定时器配置
OSI网络需要获取毫秒系统时间,判断数据传输是否超时。
③ SD卡配置
后面会介绍,升级文件放在SD卡中。
具体可以看
Renesa 瑞萨 RA4M2 移植文件系统FAT32
https://blog.csdn.net/weixin_43746325/article/details/130451569
SD卡DMA功能
网络层
ISO15657协议,它是为上层应用做服务,假设上层应用下发了256个字节给到网络层,要是物理层实现就头很大了,大家都知道,在标准CAN中,一次最多只能传八个字节数据。所以就有网络层的出现,15675实现将上层数据进行拆包,八个八个字节数据给到物理层,相反,如果物理层接收到数据,然后将一帧一帧数据丢给网络层,网络层会找到头数据和尾数据,将一帧帧数据进行打包给到应用层。这就是网络层,ISO15765的作用,实现数据拆包和打包的作用。
保持会话,TesterPresent(0x3E)服务,该 服 务 用 于 将 一 个 或 多 个 服 务 器 保 存 在 defaultSession 之 外 的 诊 断 会 话 中 。
项目测试
未完待续
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !