1. 课程导入
现代汽车电子电气架构正从分布式 ECU 向域控制器与中央计算平台演进,车内通信网络承担着传感器、执行器、控制器之间实时数据交换的核心职责。RH850 系列微控制器是瑞萨电子面向汽车控制领域推出的 32 位 MCU 家族,广泛应用于车身控制、动力总成、底盘域、网关以及智能座舱等场景。其内置的 RSCAN、RSCAN-FD 等 CAN 控制器模块,为 CAN FD 与 UDS 诊断协议提供了硬件基础。理解 RH850 的通信外设结构,是掌握 CAN FD 报文收发与 UDS 诊断服务实现的第一步。
一、RH850 在车载通信中的角色定位
RH850 并非单一型号,而是一个覆盖多核、多封装、多外设组合的 MCU 家族。以常见的 RH850/F1x、RH850/D1x、RH850/P1x 为例,它们分别面向车身、仪表与动力底盘应用。尽管定位不同,这些芯片在通信层面具有共性:集成多路 CAN 通道、支持 CAN FD 数据段可变速率、具备消息缓冲与接收过滤机制,并通过中断或 DMA 与 CPU 交互。
在整车网络中,RH850 通常扮演三类角色:一是作为节点 ECU,直接采集或驱动本地信号;二是作为网关,完成不同 CAN 通道、CAN 与 CAN FD、CAN 与以太网之间的报文路由;三是作为诊断目标,响应诊断仪发起的 UDS 请求。这三类角色对通信栈的要求不同,但都建立在 CAN 控制器与 CAN 收发器构成的物理链路之上。
二、CAN FD 与 UDS 的定位与协作关系
CAN FD(CAN with Flexible Data-rate)是经典 CAN 的升级版本,主要解决两个问题:一是单帧数据长度从 8 字节扩展到 64 字节,二是数据段可采用更高波特率。对于刷写、标定、大数据块传输等场景,CAN FD 显著提升了有效带宽。RH850 的 RSCAN-FD 模块支持仲裁段与数据段分离配置,允许在 500 kbps 仲裁速率下使用 2 Mbps 甚至 5 Mbps 的数据段速率。
UDS(Unified Diagnostic Services,ISO 14229)则是应用层诊断协议,定义了诊断仪与 ECU 之间的服务请求与响应格式,如 0x10 会话控制、0x27 安全访问、0x22 读数据、0x2E 写数据、0x31 例程控制、0x34-0x37 刷写序列等。UDS 本身不关心底层是 CAN 还是 CAN FD,它依赖 ISO-TP(ISO 15765-2)完成多帧拆包与重组,而 ISO-TP 又运行在 CAN 或 CAN FD 之上。
因此,CAN FD 与 UDS 的关系可以概括为:CAN FD 提供“运输通道”,ISO-TP 提供“分段与流控”,UDS 提供“服务语义”。在 RH850 工程中,三者通常以分层方式实现,底层驱动负责报文收发,中间层负责诊断帧组装,应用层负责服务分发。
三、课程知识框架与学习路径
本课程围绕“RH850 平台上的 CAN FD 与 UDS 工程实现”展开,知识框架分为四个层次:硬件与外设层、驱动与配置层、协议栈层、诊断应用层。学习路径建议由底向上推进,先理解 CAN FD 控制器寄存器与消息缓冲,再掌握 ISO-TP 分段机制,最后实现 UDS 服务与刷写流程。
| 层次 | 核心内容 | 关键工具/接口 | 典型产出 |
|---|---|---|---|
| 硬件与外设 | RSCAN-FD 模块、收发器、终端电阻、通道映射 | 数据手册、原理图、示波器 | 物理链路正常、波形正确 |
| 驱动与配置 | 波特率配置、消息缓冲、过滤器、中断/DMA | RH850 驱动库、CS+ / GHS | CAN 报文可收发 |
| 协议栈 | ISO-TP 多帧、流控、超时、CAN FD 64 字节 | CANoe / CANalyzer、诊断脚本 | 长帧诊断数据可传输 |
| 诊断应用 | UDS 服务、会话、安全访问、刷写序列 | 诊断仪、ODX/PDX、Bootloader | ECU 可被诊断与刷写 |
四、典型场景与常见误区
以车身域控制器为例:诊断仪通过 OBD 接口发送 UDS 请求,网关将诊断报文路由到目标 RH850 ECU。若使用 CAN FD,单帧可携带更多数据,减少 ISO-TP 分帧数量,从而缩短刷写时间。但在实际工程中,常见误区包括:只关注应用层 UDS 服务而忽略 ISO-TP 流控参数;CAN FD 数据段波特率配置错误导致采样点偏移;消息缓冲数量不足导致高负载下丢帧;以及未正确处理 P2 超时导致诊断会话异常终止。
下面给出一个 RH850 CAN FD 通道初始化的参数片段,用于建立直观认识:
/* RH850 RSCAN-FD 通道初始化关键参数示例 */
CAN_CHANNEL = 0;
ARBITRATION_BR = 500000; /* 仲裁段 500 kbps */
DATA_BR = 2000000; /* 数据段 2 Mbps */
SAMPLE_POINT = 80; /* 采样点 80% */
RX_BUFFER_NUM = 16; /* 接收消息缓冲数量 */
TX_BUFFER_NUM = 8; /* 发送消息缓冲数量 */
FD_MODE = ENABLE; /* 启用 CAN FD 模式 */
ISO_TP_BS = 8; /* 块大小 */
ISO_TP_STMIN = 5; /* 最小间隔 5 ms */