本文将介绍在使用 mm32f0140 系列 mcu 实现 uds bootloader 过程中涉及到的 flexcan、uds 和 bootloader 等相关基本概念。
mm32f0140 简介
mm32f0140 使用高性能的 arm® cortex-m0 内核的 32 位微控制器,最高工作频率可达 72mhz,内置 64kb flash 和 8kb sram,有丰富的增强型 i/o 端口和包括 flexcan 在内等多种外设,适用于汽车诊断仪,后装汽车协控制器和消防监控等多种应用场合。
图 1 mm32f1040 简介
什么是 flexcan?
can 是控制器域网 (controller area network, can) 的简称,是一种功能丰富的车用总线标准,被设计用于在不需要主机(host)的情况下,允许网络上的单芯片和仪器相互通信。是由研发和生产汽车电子产品著称的德国 bosch 公司开发了,并最终成为国际标准(iso11898)。是国际上应用最广泛的现场总线之一。flexcan 是 can 协议的一个高完成度版本。
mm32f0140 系列 mcu 内嵌的 flexcan,符合 iso 11898-1 标准,支持 can 2.0b 版本协议,位速率高达 1 mbps,具有非常灵活的用于传输和接收的邮箱系统,可以接收和发送 11 位标识符的标准帧,也可以接收和发送 29 位标识符的扩展帧,主要被设计用作车载串行总线,可满足实时处理、车辆在电磁干扰环境下的可靠操作、成本效益、带宽等要求。
什么是 uds?
uds(unified diagnostic services,统一诊断服务)是一种用于汽车电子控制器 ecu (electronic control units) 环境下的一种诊断通信协议,可实现诊断、固件更新、日常测试等功能,在 iso 14229 中规定了其实现标准。
在本实例中,uds 通信是在客户端-服务端关系中执行的。客户端是上位机下载软件运行于 pc 机,服务端是 mm32f0140 系列 mcu。例如,将 can 总线接口连接到 mcu,并将 uds 请求发送到 mcu。当 mcu 支持 uds 服务时,它将根据客户端发出的请求做出相应的响应。
为什么用 bootloader?
对于 ecu 而言,如果程序内置有基于flexcan bootloader,则每次更新 ecu 的固件可不必再使用烧录器进行烧录,而可直接通过 can 总线来更新程序,而且随着汽车智能化的普及,甚至可以对 ecu 进行远程升级。有无 bootloader 功能程序结构对比如图 2 所示:
图 2 程序结构对比框图
为什么要基于 uds?
为了规范 bootloader 的全过程。因 uds 在设计时考虑了 bootloader 的需求,并为 bootloader 提供了相关服务以供使用,故主机厂普遍会要求在 uds 规范的基础上完成 bootloader 功能。
使用到哪些 uds 服务?
● 在 bootloader 中,使用到 uds 的 $10、$11、$27 和 $3e 基础诊断服务,$22、$2e 读写 did 服务,$31、$34、$36 和 $37 固件数据传输相关服务。
● 在 app 中,使用到 uds 的 $85 和 $28 服务,保证暂停 can 正常通信,暂停记录 dtc,让被升级设备升级。
uds 提供的服务概览如图 3 所示:
图 3 uds 服务概览
can、uds 和 osi 模型之间的关系
为了更好的理解 uds, 让我们了解一下 can 总线、uds 和 osi 模型之间的关系。
can 对应于 osi 模型中的数据链路层和物理层描述(根据 iso 11898)。
与 can 相比, uds (iso 14229) 是一种 “更高层协议”, 在 osi 模型中使用到会话层和应用层,如下图 4 所示:
图 4 uds 与 osi 模型对应图
uds 的消息结构
pdu
network_protocol data unit, 网络层协议数据单元
pdu 是用于建立对等实体间的通信,是一组信息和数据的集合,表示了发送发和接收方对等实体之间传递的信息和数据。由地址信息(can id)、协议控制信息(pci) 和数据构成。
图 5 为 uds 消息结构示意图,图 6 为 uds 消极响应示意图。
图 5 uds 消息结构
图 6 uds 消极响应示意
pci
protocol control information,协议控制信息
pci 字段本身与 uds 请求本身没有关系,但是对于在 can 总线上发出的诊断 uds 请求是必需的。pci 字段可以长达 1 ~ 3 字节,并且包含与传输不适合单个 can 帧的消息有关的信息。
sid
service id,服务标识符
当希望使用特定的 uds 服务时,uds 请求消息应该在数据有效负载中包含 uds 服务标识符 (sid)。标识符分为请求 sid 和响应 sid。
sfb
sub function byte,子函数字节
在一些 uds 请求帧中使用,在一些 uds 服务中,如 0x22,子函数字节没有使用。一般来说,当一个请求被发送到 ecu 时,ecu 可以做出正向或负向的响应。在响应为正向的情况下,测试人员可能想要抑制响应(因为它可能是不相关的)。这是通过在子函数字节中将第 1 位设置为 1 来完成的。负向的反应是无法被抑制的。剩下的7位可以用来定义最多 128 个子函数值。例如,当通过 sid 0x19(读取诊断信息)读取 dtc 信息时,子函数字节可用于控制报告类型。
did
data identifier,数据标识符
在大多数 uds 请求服务中,各种类型的请求数据参数用于提供 sid 和可选子函数字节以外的请求进一步配置。
iso-tp 标准
ecu 固件更新通常涉及大量有效载荷的通信,而 iso-tp 标准(iso 15765 )就是为了解决基于 can 的车辆诊断的大量有效载荷问题而提出。该标准指定了基于can 的车辆网络传输协议和网络层服务,最常见的用例就有 uds (iso 14229-1)。
iso-tp 标准概述了如何通过分段、流量控制和重组来传输高达 4096 字节的 can 数据有效载荷。iso-tp 定义了用于通信的 can 帧,如下图 7 所示。
图 7 iso-tp 帧类型
通过使用 iso-tp 标准将 uds 的消息结构 pdu 分为了四种类型:
sf (single frame, 单帧)
描述单帧传输。
ff (first frame, 首帧)
描述多帧传输的起始。
cf (consecutive frame,连续帧)
用于在多帧传输中传输数据。
fc (flow control frame,流控帧)
用于在多帧传输过程中,对报文流控制。
uds 的单帧通信和多帧通信:
单帧通信如图 8 所示:
图 8 单帧通信
多帧通信过程如图 9 所示:
图 9 多帧通信
基于 uds bootloader 实现更新 app 流程框图
mm32f0140 系列 mcu 使用 flexcan 实现基于 uds bootloader 更新 app 的流程框图如10所示:
图10 更新 app 流程
结语
本文以 mm32f0140 系列 mcu 的 flexcan 为例,简要介绍了在使用 mm32f0140 系列 mcu 实现 uds bootloader 过程中涉及到的 flexcan、uds 和 bootloader 等相关基本概念,并介绍了 uds 的消息结构和 iso-tp 标准,以及展示了 mm32f0140 系列 mcu 使用 flexcan 实现 uds bootloader 更新 app 的流程框图。
来源:灵动mm32mcu
高通领先地位不再,5G市场已被超越
基于QuartusII的实例展示
中国开源社区健康案例——NebulaGraph社区
马歇尔稳定度仪的使用注意事项
提速数字基础设施建设,浪潮云洲创新实践
基于MM32F0140的UDS Bootloader学习笔记
适用于测试和通信波形应用的直接数字合成技术
苹果新M1笔记本优于采用x86处理器的笔记本
动力电池质量参差不齐 工艺积累还需提升!
土壤肥料养分速测仪的用途有哪些,它有哪些优势
移远通信率先推出支持3GPP R16协议的第二代5G模组
一种微型化超精密光谱芯片新方案
【佑菲斯电子学生证】平安校园添利器,安全便捷两不误!
宽电压蓄电池放电测试仪的功能和特点是什么
研究人员开发出一种创新的光电化学(PEC)蚀刻技术
无人送货的未来或可期
PCB布线常用规则盘点
化学蚀刻的铜-ETP铜的实验分析
智能家居市场持续增长,本地化面临挑战需解决
ADMP421 低成本、低功率、数字输出的MEMS麦克风