当前位置: 首页 > news >正文

AUTOSAR 通信栈深度解析:PduR 与 CanTp 的交互机制(图文详解)

在 AUTOSAR 经典平台(Classic Platform)中,通信栈(ComStack)是实现 ECU 之间数据通信的核心。
其中,PduR(PDU Router) 负责数据路由,CanTp(CAN Transport Protocol) 负责长报文分帧与重组。

但很多人容易误解:

PduR 与 CanTp 的交互并不是为 COM 模块服务,而是 专门服务于 DCM(诊断通信管理模块)

本文将通过图文形式,详细讲解 DCM–PduR–CanTp 之间的交互机制。

🧭 一、总体架构与数据流

在 AUTOSAR 的 CAN 通信栈中,数据从应用层传递到物理 CAN 总线的路径如下:

Application (UDS 服务层)│▼DCM│▼PduR│▼CanTp│▼CanIf│▼CAN Driver

🧩 二、各模块职责说明

模块职责特点
Application / UDS 服务层发起或处理诊断请求(如 0x10、0x22 等)依赖 DCM 提供通信接口
DCM (Diagnostic Communication Manager)管理 UDS 通信、诊断会话、传输分段逻辑上层模块
PduR (PDU Router)在上层(DCM)与下层(CanTp)之间路由数据不修改 PDU 内容
CanTp (CAN Transport Protocol)实现 ISO 15765-2 传输协议(分帧、重组、流控)传输层
CanIf (CAN Interface)提供 CAN 硬件抽象接口与驱动直接交互
CanDrv (CAN Driver)操作硬件控制器发送/接收物理帧底层驱动

🚀 三、发送流程(DCM → PduR → CanTp)

当应用层通过 DCM 发送一条诊断请求(例如 0x10 StartDiagnosticSession)时,数据流如下:

🧩 发送方向(Tx Path)

Application → DCM → PduR → CanTp → CanIf → CAN 驱动

详细流程:

  1. DCM → PduR
    DCM 调用:

    PduR_DcmTransmit(PduIdType id, const PduInfoType* info);
    发起长报文传输请求。
  2. PduR → CanTp
    根据配置,PduR 调用:

    CanTp_Transmit(PduIdType id, const PduInfoType* info);
    将该 PDU 交给传输层处理。
  3. CanTp → PduR(请求数据)
    在发送过程中,CanTp 分帧时会多次调用:

    PduR_CanTpCopyTxData(PduIdType id, PduInfoType* info, RetryInfoType* retry, PduLengthType* availableDataPtr);
    请求下一段要发送的数据。
  4. CanTp → CanIf
    CanTp 调用 CanIf_Transmit(),发送 First Frame / Consecutive Frame / Flow Control 等多帧。
  5. CanTp ← CanIf(发送确认)
    当所有帧发送完成时,CanIf 调用 CanTp_TxConfirmation()
  6. CanTp → PduR
    CanTp 调用:

    PduR_CanTpTxConfirmation(PduIdType id, Std_ReturnType result);
    通知 PduR 传输结束。
  7. PduR → DCM
    PduR 再回调:

    Dcm_TxConfirmation(PduIdType id, Std_ReturnType result);
    通知诊断上层发送完成。

📥 四、接收流程(CanTp → PduR → DCM)

当 ECU 收到来自测试仪的诊断请求(例如 0x22 ReadDataByIdentifier)时,流程如下:

🧩 接收方向(Rx Path)

CAN 驱动 → CanIf → CanTp → PduR → DCM → 应用层

详细流程:

  1. CanIf → CanTp
    底层驱动接收到 L-PDU 后,CanIf 调用:

    CanTp_RxIndication(PduIdType id, const PduInfoType* info);
  2. CanTp → PduR(开始接收)
    当检测到新的长报文开始时,CanTp 调用:

    PduR_CanTpStartOfReception(PduIdType id, const PduInfoType* info, PduLengthType TpSduLength, PduLengthType* bufferSizePtr);
  3. CanTp → PduR(逐段拷贝数据)
    每收到一帧,CanTp 调用:

    PduR_CanTpCopyRxData(PduIdType id, PduInfoType* info, PduLengthType* bufferSizePtr);
  4. CanTp → PduR(接收完成)
    所有帧接收完成或出现错误时,CanTp 调用:

    PduR_CanTpRxIndication(PduIdType id, Std_ReturnType result);
  5. PduR → DCM
    最后,PduR 通知 DCM:

    Dcm_RxIndication(PduIdType id, Std_ReturnType result);
    DCM 解析完整的诊断请求,进入协议处理阶段。

📊 五、接口调用方向总览

场景调用方向接口名称
DCM 发起传输DCM → PduRPduR_DcmTransmit()
PduR 调用传输层PduR → CanTpCanTp_Transmit()
传输中数据请求CanTp → PduRPduR_CanTpCopyTxData()
传输完成通知CanTp → PduRPduR_CanTpTxConfirmation()
接收开始CanTp → PduRPduR_CanTpStartOfReception()
接收中数据交付CanTp → PduRPduR_CanTpCopyRxData()
接收完成CanTp → PduRPduR_CanTpRxIndication()
上层回调PduR → DCMDcm_RxIndication() / Dcm_TxConfirmation()

🧠 六、关键点解析

  • PduR 不修改 PDU 内容
    它仅负责路由数据、协调缓冲区,数据内容保持原样。
    (除网关场景外,不会做内容修改)
  • CanTp 实现 ISO 15765-2 协议
    负责 First Frame、Consecutive Frame、Flow Control 机制,确保大数据可靠传输。
  • DCM 是唯一使用 CanTp 的上层模块
    COM 模块不经过 CanTp,周期通信直接走 CanIf。
  • 交互是完全回调驱动的异步流程
    没有共享内存,所有数据交互通过接口调用完成。

⚙️ 七、架构图示

  ┌──────────────┐│ Application  ││ (UDS Services)│└──────┬───────┘│DCM│┌──────▼──────┐│    PduR     │ ← 路由中心└──────┬──────┘│CanTp│CanIf│CAN Driver

🧩 八、常见误区与建议

常见误区正确理解
“PduR 直接与 COM 通信并使用 CanTp”❌ 错,PduR 与 CanTp 的交互只存在于 DCM 通路中。
“PduR 会修改数据”❌ 不会,PduR 仅路由数据。
“TxConfirmation 是 PduR 调用 CanTp 的”❌ 反向,CanTp 回调 PduR_CanTpTxConfirmation()。
“CanTp 自动选择是否分帧”❌ 分帧逻辑由配置决定(N-PDU 长度与帧类型)。

实践建议:

  1. 确认 DCM 的 N-SDU 配置与 CanTp 通道匹配。
  2. 检查 PduR 路由表是否正确映射 DCM ↔ CanTp。
  3. 注意 CanTp 的超时参数:N_AsN_BsN_Cs
  4. 抓取 CAN 总线数据可直观看到 FF / CF / FC 分帧过程。

✅ 九、总结

模块职责上下层关系
DCM诊断通信、UDS 协议处理上层
PduR路由数据、协调缓冲中层
CanTp实现 ISO 15765-2 分帧协议传输层
CanIf提供 CAN 驱动抽象接口接口层
CanDrv控制器驱动底层

简要结论:

  • DCM ↔ PduR ↔ CanTp 构成诊断通信的核心路径;
  • COM ↔ PduR ↔ CanIf 则负责普通周期通信。
  • 只有 DCM 通路才会触发 CanTp 的多帧传输机制。

📚 参考文档:

  • AUTOSAR_SWS_PduR, Release R20-11
  • AUTOSAR_SWS_CanTp, Release R20-11
  • AUTOSAR_SWS_DCM, Release R20-11
  • ISO 15765-2:2016 — Road vehicles – Diagnostic communication over CAN
http://www.dtcms.com/a/566395.html

相关文章:

  • 大学网站策划方案网站制作费用及后期运营
  • 告别ESLint:在Vue 3项目中拥抱编码自由
  • 网站开发人员 平均工资动易网站管理系统教程
  • 一款基于 .NET WinForm 开源、轻量且功能强大的节点编辑器,采用纯 GDI+ 绘制无任何依赖库仅仅100+Kb
  • 买域名不建网站html5 做手机网站
  • ONNX Runtime CUDA版本兼容性指南
  • SSM图书馆自习室占座选座zg09h(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 与企业网站做接口在线培训方案设计
  • idea运行tomcat的日志文件放到哪里了
  • 招聘网有哪些平台网站seo排名优化
  • Java静态关键字深度解析:从内存模型到类加载机制
  • 厦门做公司网站淄博抖音推广公司
  • 福建网站建设价格wordpress+小米商城
  • 京东 jd.item_review API 返回值全面解析​​
  • 深圳网站优化企业北京师大互联网公司排名
  • 运动模糊图像的处理
  • OpenGauss数据库闪回恢复基本功能
  • 【ICCV 2025】Bridging the Skeleton-Text Modality Gap:扩散模型驱动零样本骨架动作识别
  • 电子设计中的“握手信号”:深入浅出理解DCDC的PG引脚与软启动
  • dedecms 图片网站模板烘焙甜点培训学校
  • 怎么用手机建设网站dede做双语网站
  • yapi文档系统
  • MySQL 高可用(HA)参考架构:Oracle 官方指引(适配 Dev/Test/ 核心 Prod)与停机风险应对
  • 宜州做网站网站服务器失去响应
  • 手机怎么网站模板网站建设宗旨是什么
  • 系统性学习C++-第九讲-list类
  • 沈阳市网站制作浙江省2011年1月高等教育自学考试 网站建设与管理试题与答案
  • 基于 Qwen2.5-1.5B-Instruct 的商品信息抽取实践(附完整代码)
  • 免费行情软件网站大全西宁休闲娱乐场所
  • 基于Java开发的AMHS天车调度系统技术可行性评估以及相关示例