【02】ISO 15765-2 拆帧的具体逻辑是怎样的?

发布时间:2026/10/19 7:22:46
【02】ISO 15765-2 拆帧的具体逻辑是怎样的?
ISO 15765-2 拆帧的核心逻辑是先看 UDS 应用层数据有多长再判断能否放进一个 CAN 帧放不下就拆成“首帧 连续帧”中间用“流控帧”控制节奏。1. 先判断要不要拆帧以常见 CAN 2.0 为例一个 CAN 帧数据域最多8 字节。ISO-TP 还要占用 1 字节做帧头所以情况判断方式使用帧类型数据 ≤ 7 字节一个 CAN 帧装得下单帧 SF数据 7 字节一个 CAN 帧装不下首帧 FF 连续帧 CF接收方需要控速多帧传输中流控帧 FCCAN FD 下阈值会更高但原理相同。2. 四种帧怎么区分ISO 15765-2 用 CAN 数据域第 1 个字节的高 4 位 N_PCI type来区分帧类型。帧类型N_PCI 高 4 位作用单帧 SF0x0短数据一帧发完首帧 FF0x1告诉对方总长度并携带前 6 字节数据连续帧 CF0x2携带后续数据带序列号 SN流控帧 FC0x3接收方控制发送节奏3. 单帧 SF短数据不拆当 UDS 报文 ≤ 7 字节时直接发单帧。例如读取 DID 的请求02 22 F1 90 00 00 00 0002单帧有效数据长度 222 F1 90UDS 服务 0x22DID 0xF190后面补 0 或填充字节这种在 Trace 里最简单一眼就能看出是一条完整 UDS 请求或响应。4. 多帧传输FF → FC → CF当数据超过 7 字节时典型流程是发送方 接收方 |── FF首帧───────────────| |── FC流控帧─────────────| |── CF#1连续帧───────────| |── CF#2连续帧───────────| |── ... ────────────────────| |── FC下一个块───────────| 如果 BS 有限制 |── CF#n ───────────────────|首帧 FF首帧负责两件事声明总数据长度携带前 6 字节有效数据。格式大致是1X XX D1 D2 D3 D4 D5 D6第 1 字节高 4 位 1表示首帧第 1 字节低 4 位 第 2 字节组成12 位总长度 FF_DL第 3~8 字节是前 6 字节数据。例如10 0F 22 F1 90 00 00 00表示总长度 0x00F 15 字节后面还有 9 字节要通过连续帧发送。流控帧 FC接收方收到首帧后要先回一个流控帧告诉发送方“怎么发”。30 00 14 00 00 00 00 0030高 4 位 3表示流控帧低 4 位 0表示 CTS继续发送00BS 0表示连续帧数量无限制14STmin 20 ms表示连续帧之间至少间隔 20 ms。流控帧里的三个关键字段FS 流状态0x0继续发送0x1等待0x2溢出/终止BS 块大小允许连续发送多少个 CF0 表示无限制STmin 最小间隔两个连续帧之间最小等待时间。连续帧 CF连续帧负责搬运剩余数据每帧最多携带 7 字节。21 D7 D8 D9 DA DB DC DD 22 DE DF 00 00 00 00 00高 4 位 2表示连续帧低 4 位是序列号 SNSN 从 1 开始递增21, 22, 23 ... 2F, 20, 21 ...到 0xF 后回绕。接收方根据 FF 声明的总长度和 CF 的 SN把数据按序拼回完整 UDS 报文。5. 在 CANoe Trace 里怎么看排查时可以把日志按 PCI 类型快速过滤0x开头单帧通常是一条完整诊断请求/响应1x xx开头首帧说明后面还有连续帧2x开头连续帧注意 SN 是否连续3x开头流控帧重点看 FS、BS、STmin。如果看到首帧之后长时间没有流控帧可能是N_Bs 超时如果连续帧中途断开可能是总线负载过高、STmin 过小、BS 配置不当或 ECU 处理超时。6. 一句话记忆单帧看长度首帧报总量流控定节奏连续帧搬数据序列号保顺序。看 Trace 时先找1x首帧再顺着2x连续帧和3x流控帧就能还原整条 UDS 长报文。