我的汽车进步之路-ISO 15765 ISO 15765DoCAN/CAN-TP协议深度解析ISO 15765 全称道路车辆 — CAN 总线诊断通信Diagnostic communication over Controller Area Network, DoCAN行业内常称其为CAN-TPCAN 传输协议是车载诊断领域的核心基础协议之一。它对应 OSI 模型的网络层第 3 层 传输层第 4 层底层基于 ISO 11898 定义的 CAN/CAN FD 数据链路层上层承载 UDSISO 14229、OBD 等诊断应用层服务核心解决「CAN 单帧载荷有限无法传输长诊断报文」的问题。一、协议整体架构与组成ISO 15765 系列标准分为 4 个部分核心逻辑全部集中在第 2 部分ISO 15765-1总则定义通用术语、缩略语、协议整体框架是整个系列的基础说明文档。ISO 15765-2传输协议与网络层服务核心协议的核心本体定义了 CAN 总线上长数据的分段、重组、流控机制也就是常说的 CAN-TP 协议。既支持经典 CAN8 字节载荷也兼容 CAN FD最大 64 字节载荷ISO。ISO 15765-3UDS on CAN 实现已废止旧版标准中定义了统一诊断服务UDS在 CAN 总线上的实现规范目前已被ISO 14229-3UDS 第 3 部分CAN 总线会话层与诊断服务映射完全替代不再属于 15765 体系ISO。ISO 15765-4排放相关系统要求针对 OBD-II、WWH-OBD 等法规强制的排放诊断规定了排放相关 ECU 的诊断通信强制规范包括 CAN ID 分配、物理层参数、传输协议约束等是满足排放法规的必选标准。二、核心机制ISO 15765-2 网络层详解这部分是协议的灵魂所有长诊断报文如读大量故障码、ECU 刷写数据的可靠传输都依赖这套机制。2.1 核心功能短数据直接封装为单帧传输长数据自动分段拆分接收端按序重组通过流控帧协调收发双方的传输节奏匹配接收端缓冲区能力避免数据溢出经典 CAN 下支持最大 4095 字节的单条报文12 位长度字段满足绝大多数诊断场景需求。2.2 四种帧类型N_PDU网络层协议数据单元N_PDU分为 4 种通过帧首的协议控制信息N_PCI区分。N_PCI 位于数据段的第一个字节高 4 位为帧类型标识。帧类型简称PCI 高 4 位核心作用经典 CAN 载荷结构单帧Single FrameSF00000x0传输短数据一帧完成交互第 1 字节低 4 位为数据长度第 2~8 字节有效数据最多 7 字节首帧First FrameFF00010x1多帧传输第一帧声明总数据长度第 1 字节低 4 位为总长度高 4 位第 2 字节总长度低 8 位共 12 位第 3~8 字节有效数据6 字节流控帧Flow ControlFC00110x3接收方回复控制发送节奏第 1 字节低 4 位为流控状态 (FS)第 2 字节块大小 (BS)第 3 字节最小帧间隔 (STmin)第 4~8 字节保留连续帧Consecutive FrameCF00100x2多帧传输的后续数据帧第 1 字节低 4 位为帧序列号 (0~F 循环)第 2~8 字节有效数据7 字节流控帧的三种状态FS0x0CTS, Continue to Send允许发送发送方可按约定参数继续发送连续帧0x1WAIT接收方忙发送方暂停发送等待下一个流控帧0x2OVFLW, Overflow接收方缓冲区溢出无法接收直接终止本次传输2.3 寻址模式ISO 15765-2 定义了两套寻址维度通信目标类型物理 / 功能寻址和地址编码格式正常 / 扩展 / 混合 / 正常固定寻址。按通信目标分类物理寻址Physical Addressing点对点一对一通信用于诊断仪与单个 ECU 的专属通信比如读取特定 ECU 的故障码、参数配置等。功能寻址Functional Addressing一对多广播通信一条报文总线上所有符合条件的 ECU 都会接收并响应最典型的是 OBD 广播 ID0x7DF所有排放相关 ECU 都会响应。按地址编码格式分类正常寻址Normal Addressing地址信息完全隐含在11 位 CAN ID中数据段内不携带地址字段。乘用车行业有通用约定功能寻址请求 ID0x7DF物理寻址请求 ID0x7E0 ~ 0x7EF响应 ID 请求 ID 8例如0x7E0→0x7E8这也是 ISO 15765-4 的强制要求是乘用车诊断 CAN 最常用的寻址方式。正常固定寻址Normal Fixed Addressing基于29 位 CAN ID的标准化地址编码典型格式为0x18DA 目标地址(TA) 源地址(SA)地址信息直接编码在 CAN ID 中常见于商用车、重卡等遵循 J1939 体系的场景。扩展寻址Extended Addressing在 CAN 数据段的最开头N_PCI 之前增加 1 字节目标地址TA相当于把地址放在数据载荷里。可以配合 11 位或 29 位 CAN ID 使用用于 ECU 数量多、地址空间不足的场景。混合寻址Mixed Addressing同时使用 CAN ID 寻址 数据段中的地址扩展字节N_AE包含源地址、目标地址、地址扩展三级地址主要用于跨网段远程诊断等复杂场景。2.4 时序参数与超时机制协议定义了 6 个核心时序参数所有车载 ECU 都必须满足对应的超时约束是诊断通信可靠性的基础。参数全称含义典型超时阈值N_As发送方仲裁延时网络层将帧交给数据链路层 → 帧成功发到总线的最大延时1000 msN_Ar接收方仲裁延时数据链路层收到帧 → 帧交给网络层的最大处理延时1000 msN_Bs发送方缓冲延时发出首帧 → 收到流控帧的最大等待时间1000 msN_Br接收方缓冲延时收到首帧 → 发出流控帧的最大处理时间1000 msN_Cs发送方连续帧间隔两个连续帧之间的发送间隔由 STmin 约束最小值-N_Cr接收方连续帧超时两个连续帧之间的最大接收间隔超时则终止传输1000 ms额外约束N_WFTmax— 接收方最多可连续发送 FC.WAIT 帧的数量超过该值发送方直接终止传输避免无限等待。2.5 网络层服务原语网络层向上层会话层 / 应用层提供标准化的服务接口通过服务原语交互N_USData.request上层发起数据传输请求传入目标地址、数据内容N_USData.confirm网络层向上层反馈传输结果成功 / 失败及错误原因N_USData.indication网络层接收完整报文后向上层提交数据N_USData_FF.indication收到首帧时提前通知上层便于上层提前分配接收缓冲区N_ChangeParameter.request/confirm动态修改协议参数如超时时间、STmin、BS 等三、与 UDSISO 14229的关系二者是分层协作的关系经常被混淆核心差异如下维度ISO 14229UDS 统一诊断服务ISO 15765DoCANOSI 层级应用层第 7 层 会话层第 5 层网络层第 3 层 传输层第 4 层核心功能定义诊断服务逻辑读故障码、安全访问、ECU 刷写、数据读写等定义 CAN 总线上的传输规则数据分段、流控、重组总线依赖性总线无关可运行在 CAN、LIN、FlexRay、以太网DoIP等多种总线仅适用于 CAN/CAN FD 总线安全机制内置安全访问、身份认证机制无内置安全能力仅负责数据可靠传输简单来说UDS 管「传什么」ISO 15765 管「在 CAN 上怎么传」。车载 UDS 诊断的完整协议栈为应用层ISO 14229-1 UDS服务 → 会话层ISO 14229-3 CAN映射 → 网络/传输层ISO 15765-2 CAN-TP → 数据链路层ISO 11898 CAN四、工程应用关键要点CAN FD 兼容2016 版及之后的 ISO 15765-2 完整支持 CAN FD单帧最大载荷提升至 64 字节大幅减少多帧传输场景ECU 刷写等大数据场景速率提升最明显。流控参数工程配置BS块大小 0 表示不分块发送方可以一次性发完所有连续帧无需等待后续流控帧是车载 ECU 的主流配置STmin最小帧间隔常见配置为 0x1420ms、0x0A10ms配置为 0 表示无间隔全速发送。多会话并行协议支持不同地址的传输会话交错进行网络层通过地址信息区分不同会话互不干扰。错误处理序列号不连续、流控溢出、任意超时触发都会直接终止本次传输并向上层报告错误由应用层决定是否重传。