• UDS诊断系列介绍02-传输层CANTP


    1. 模块介绍

    CANTP(CAN TransportLayer),位于通信栈的传输层,是专门服务于UDS诊断,位于PDUR与CANIF之间,实现了PDUR到CANIF的拆包发送与CANIF到PDUR的组包接收功能。对于多帧大数据支持通过流控帧控制数据发送速率并提供数据发送与接收过程中超时处理功能。
    在这里插入图片描述

    1.1 CANTP状态机

    CANTP内部有两个状态机,分别为CANTP_OFF及CANTP_ON,在ECU刚上电后其状态为CANTP_OFF,经过CanTp_Init()后状态切为CANTP_ON,发送与接收才可以正常进行。
    在这里插入图片描述

    1.2 涉及概念

    单帧:SF(Single Frame),用于发送单个CAN帧即可发送完成的数据;
    首帧:FF(First Frame),用于发送较大数据情况下的第一帧;
    连续帧:CF(Consecutive Frame),用于发送较大数据情况下首帧外的其余部分;
    流控帧:FC(Flow Control),接收后用于调节数据发送速度。

    I-PDU:Interaction Layer PDU,I-PDU包括数据,数据长度及I-PDU ID;
    N-PDU:Network Layer PDU,网络层PDU;
    L-PDU:Data Link Layer PDU,一个或多个I-PDU组包成一个L-PDU.
    SDU:Service Data Unit

    2. 功能描述

    下面对CANTP的接收与发送功能进行介绍,根据数据大小,将进一步拆分为单帧与多帧的发送与接收。

    2.1 PDU的发送

    2.1.1 单帧PDU发送

    其发送步骤为:
    1)PduR调用CanTp接口,请求进行单帧数据传输;
    2)CanTp调用PduR接口Copy数据,并调用CanIf接口发送数据
    在这里插入图片描述
    对应时序图:
    在这里插入图片描述

    2.1.2 多帧PDU发送

    其发送步骤为:
    1)PduR调用CanTp接口,请求进行多帧数据传输;
    2)CanTp调用PduR接口Copy数据,并调用CanIf接口发送首帧数据
    3)CanTp再次调用PduR接口Copy数据,并调用CanIf接口发送连续帧数据,直到全部数据发送结束。

    在这里插入图片描述
    对应时序图:
    在这里插入图片描述

    2.2 PDU的接收

    2.2.1 单帧PDU接收

    其发送步骤为:
    1)CanIf调用CanTp接口(CanTp_RxIndication)通知数据接收;
    2)CanTp调用PduR接口(PduR_CanTpStartOfReception)通知数据开始接收;
    3)CanTp将PDU数据从CanIfCopy到CanTp;
    4)CanTp将PDU数据去除包头后从CanTp Copy到PduR;
    在这里插入图片描述
    对应时序图:
    在这里插入图片描述

    2.2.2 多帧PDU接收

    其发送步骤为:
    1)CanIf调用CanTp接口(CanTp_RxIndication)通知数据接收;
    2)CanTp调用PduR接口(PduR_CanTpStartOfReception)通知数据开始接收;
    3)CanTp将首帧PDU数据从CanIfCopy到CanTp;
    4)CanTp将首帧PDU数据去除包头后从CanTp Copy到PduR;
    5)CanTp将连续帧PDU数据从CanIfCopy到CanTp;
    6)CanTp将连续帧PDU数据去除包头后从CanTp Copy到PduR;
    在这里插入图片描述
    对应时序图:
    在这里插入图片描述

  • 相关阅读:
    Sass系统学习
    Python的基础语法(十)(持续更新)
    Gradient Descent
    【xxl-job】分布式任务调度中心详解
    Python大数据之PySpark(二)PySpark安装
    STM32外部中断
    乾元通多卡聚合路由器的技术解析
    Python深度学习13——Keras模型的可视化(神经网络结构图)
    C#(JS)几个常用的正则表达式
    _001_Zotero入门
  • 原文地址:https://blog.csdn.net/initiallizer/article/details/126083017