AUTOSAR 入门教程(8)ComStack CANTP(三)

#Innolight

🚛 CAN 传输协议(CANTP) 是 AUTOSAR 中实现长报文多帧传输的关键模块,尤其在诊断通信(UDS/OBD)中扮演着不可替代的角色!本文将深入解析 CANTP 的分层架构、流控机制和诊断应用场景。

Pasted image 20251230110031.png

🖼️ 图:CANTP 在 AUTOSAR 通信栈中的位置(位于服务层)

🧩 CANTP 架构定位

📌 核心功能

🔗 模块交互关系

模块 交互方向 作用
PDU Router 上层 接收/发送 N-PDU
CanIf 下层 访问 CAN 控制器硬件
DCM 同级 处理诊断请求/响应

⚙️ 核心工作机制

📦 帧类型解析

帧类型 标识符 功能
单帧(SF) 0x0 传输 ≤7 字节数据
首帧(FF) 0x1 标记多帧传输开始
连续帧(CF) 0x2 传输后续数据块
流控帧(FC) 0x3 协调传输速率

💡 示例:传输 20 字节诊断报文
1️⃣ 发送方:FF(0x1) + 长度 → 接收方
2️⃣ 接收方:FC(0x3) + BS/STmin 参数
3️⃣ 发送方:CF(0x2) + 数据块(循环直到完成)

⏱️ 流控参数详解

🔧 关键配置参数

🛠️ 静态配置项

/* CANTP 模块配置示例 */
CanTpChannelConfig {
  CanTpNsa     = TRUE;      // 使用网络层地址
  CanTpSTmin   = 20;        // 默认帧间隔(ms)
  CanTpBs      = 8;         // 块大小
  CanTpNar     = 0x7DF;     // 目标地址
}

⚠️ 动态参数限制

参数 范围 说明
BS 0-255 0 表示无流控限制
STmin 0-127ms 超过 127ms 需特殊编码
N_PDU 长度 ≤4095 字节 ISO-TP 标准限制

🚗 诊断通信实战

🔍 UDS 报文示例

# 读取故障码请求(0x1901 为 CAN ID)
[0x1901] 02 19 01 AA AA AA AA
# 响应报文(多帧传输)
[0x1901] 10 14 59 01 FF 00 00  # 首帧(总长度 20)
[0x1901] 21 01 02 03 04 05 06  # 连续帧 1
[0x1901] 22 07 08 09 0A 0B 0C  # 连续帧 2

🛠️ 常见问题排查

🔧 最佳实践:使用 CANoe/CANalyzer 抓包分析帧序列时序