今日跟大家分享参加野火【瑞萨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的作用,实现数据拆包和打包的作用。
具体的报文格式可以参考:
ISO 15765-2标准报文格式详情
https://blog.csdn.net/weixin_43746325/article/details/130613538?spm=1001.2014.3001.5502
ISO14229服务,不会全部介绍,只讲Bootloader升级可能要用到的服务。用服务有:
会话服务 0x10 session
https://blog.csdn.net/weixin_43746325/article/details/130959565?spm=1001.2014.3001.5502
安全访问 SecurityAccess(0x27)
https://blog.csdn.net/weixin_43746325/article/details/131020992?spm=1001.2014.3001.5502
内存访问 0x23 Read Version Information Service
https://blog.csdn.net/weixin_43746325/article/details/130995666?spm=1001.2014.3001.5502
网络管理 CommunicationControl(0x28)
https://blog.csdn.net/weixin_43746325/article/details/131056441?spm=1001.2014.3001.5502
例程功能 RoutineControl (0x31) service
https://blog.csdn.net/weixin_43746325/article/details/131056428?spm=1001.2014.3001.5502
请求下载 0x34RequestDownload
https://blog.csdn.net/weixin_43746325/article/details/131015511?spm=1001.2014.3001.5502
数据传输 0x36transferData
https://blog.csdn.net/weixin_43746325/article/details/131015522?spm=1001.2014.3001.5502
退出传输功能 0x37 RequestTransferExit
https://blog.csdn.net/weixin_43746325/article/details/131020981?spm=1001.2014.3001.5502
MCU复位 0x11 ECUReset
https://blog.csdn.net/weixin_43746325/article/details/130977572?spm=1001.2014.3001.5502
保持会话,TesterPresent(0x3E)服务,该 服 务 用 于 将 一 个 或 多 个 服 务 器 保 存 在 defaultSession 之 外 的 诊 断 会 话 中 。
未完待续
推荐阅读
开发活动 | 野火&电子发烧友【瑞萨RA MCU】创意氛围赛第一期已开放
【瑞萨RA MCU创意氛围赛作品赏析】项目1——Qt遥控小车
项目如何从评估套件EK-RA6M3迁移到评估套件EK-RA6M5