[CP_AUTOSAR]_通信服务_CanTp模块(一)


  在前面 《关于接口的一些说明》 以及  《Memory软件模块接口说明》 中,简要介绍了CP_AUTOSAR分层软件接口的常用规范,以及内存模块的接口使用说明,本文以通信软件模块为例,介绍通信模块的接口交互。

1、简介及功能概述

  CanTp模块位于PDU Router和CAN Interface模块之间(详见下图),其主要目的是为了分割和重组CAN I-PDUs(CAN I-PDU,CAN 表示协议数据单元基于CAN网络,I 表示Interaction,来自于上层模块,如COM,DCM,PDU router,PDU multiplexer,对应于OSI分层模型中的Layer6 - 展示层Presentation。),这些CAN I-PDUs的消息在标准CAN模式下超出了8字节,在CANFD模式下,超出了64字节,及一帧CAN报文承载不了所有的消息。
  PDU Router会将来自于AUTOSAR COM 和 DCM模块的 I-PDUs 基于通信协议进行分发。分发路线穿过的网络系统类型(如CAN/LIN/FlexRay)则取决于I-PDU的标识符。PDU Router也能够决定传输协议是够需要使用,最终,该模块携带有网关的作用。
  CAN Interface (CanIf)模块,可以直接访问CAN总线通道,其根据ECU的硬件布置以及CAN驱动数量抽象出来。由于CanTp只能处理传输层的报文帧(比如SF,FF,CF 和 流控帧),这取决于N - PDU的ID,CanIf模块必须提交一个 I - PDU给到PDU R 或者是 CanTp。
在这里插入图片描述
  根据AUTOSAR基础软件架构来看,CanTp提供了如下服务:
    1、在发送方向(即应用层的数据往CAN总线上发送)可以分割数据;
    2、在接收方向(CAN总线数据往应用层发送)可以重组数据;
    3、控制数据流;
    4、对消息分割过程中,可以检测数据的错误性;
    5、发送消息的取消;
    6、接收消息的取消;

  AUTOSAR 基础软件模块规范是建立在现有规范上的,而 ISO 15765 - 2( 更多规范细则可以参考这篇文档,点击可跳转)在汽车领域中被广泛使用,因此本文介绍的CanTp规范就是基于这篇国际规范。

2、与其它模块之间的依赖关系

2.1、CanTp 连接

  在AUTOSAR架构中,CanTp需要传输诊断(基于UDS协议,点击可跳转)和 AUTOSAR COM的 I - PDUs。因此,要求CanTp能够同时处理来自于多个模块的请求(比如,并行地对消息流的分割处理)。
  最大的同时连接数是可以被静态配置的,这无疑影响着代码生成的资源消耗和复杂程度(如CPU、ROM 和 RAM),因为这些资源(Rx 和 Tx状态机,N - PCI数据的变量等等)同时都需要被保存下来。
  为了允许用户能够在同一时间内,去选择接收或者发送的 I - PDUs,每个N - PDU的ID会根据CanTp “connection channel”内部分配完成。由于 “connection channel” 无法从外部访问,所有在传送N - PDU的重要信息(比如,“connection channel” 数量,超时,地址格式等等)都会被链接到 N - PDU 的ID中。

2.2、CanTp 交互

  下图展示了CanTp模块与PduR、CanIf 模块之间的交互关系。
  PduR模块通过CanTp模块提供的接口来进行数据的发送和传输。CAN N-SDU 的 ID 是一种固定的数据结构,其描述了 CAN N-SDU 一些属性信息,比如发送还是接收的报文、地址格式或者是一些其它的属性。
  在《[CP_AUTOSAR]_分层软件架构_接口之通信模块交互介绍》一文中,介绍了PDU在不同通信层中的发送和接收过程,结合下图再具体展开:
  被上层传输的数据是属于当前层的SDU,PDU由上层传递到下层,并且PDU也作为了下层的SDU。
  在传输数据的方向上:PduR准备好要发送的数据(可能来源于DCM或者COM模块),传递给下层 CanTp 模块,该协议数据单元对于 CanTp 来说是N - SDU(N表示网络层), CanTp 模块加上协议控制信息(N - PCI)之后,变为 N - PDU;CanTp 继续往下发送给 CanIf 模块,该协议数据单元对于 CanIf 来说是L - SDU(L 表示逻辑链路控制层),CanIf 模块是ECU的硬件抽象,可以调用Can Drivers的接口直接发送到CAN总线上,此时,完成数据的发送。
  在接收数据的方向上:CanIf 模块是ECU的硬件抽象,可以调用Can Drivers的接口直接接收到CAN总线上的数据,CanIf 将此 L - PDU 接收传递给 CanTp ,CanTp 去除报文中包含的N - PCI信息,转为 N - PDU,并发送给 PduR。此时,完成数据的接收。在这里插入图片描述

2.3、处理模式

  AUTOSAR 通信栈支持 polling 和 事件触发两种模式,因此每个通信层基于不同的机制,可以接收来自于底层的消息并且传递给上层不同的消息。

2.4、数据一致性

  为了优化通信栈,AUTOSAR限制了CAN Transport Layer的缓存容量,因此,CanTp将N-SDU的数据载荷直接从上层(DCM、COM、PduR)复制到CAN驱动程序,反之亦然。为了保证数据传输过程的一致性,上层需要遵守以下规则:
  1、在发送时,从请求发送到发送确认时,N-SDU 数据载荷需要保持不变;
  2、在接收时,从请求接收到接收显示时,N-SDU 数据访问会被上锁;

2.5、静态配置

  在运行时,CanTp 模块必须具备有管理传输连接的所有信息,因此在静态配置的时候,以下的属性参数必须有:
  1、CAN N-SDU 的数量;
  2、每个 CAN N-SDU 的ID;
  3、每个 CAN N-SDU 的传输方向(Tx or Rx);
  4、每个 连接的地址格式(普通、扩展、混合的11bit 或者是混合的29 bit)依赖于:
在这里插入图片描述

2.6、PDU Router服务

  CAN Transport Layer使用 PDU Router 的回调函数来拷贝传输数据,并且去确认传输。去初始化接收,拷贝接收的数据,显示消息的接收。以下是 PDU Router模块的接口函数:
在这里插入图片描述
  更多关于 PDU Router 模块规范的接口函数的信息可以参考《AUTOSAR_SWS_PDURouter》文档。

2.7、CAN Interface服务

  CAN Transport Layer使用如下 CAN Interface 模块的服务来发送 CAN N-PDUs:
    CanIf_Transmit
  更多关于CAN Interface 模块规范的接口函数的信息可以参考《AUTOSAR_SWS_CANInterface》文档。

   更多内容可参考 CP_AUTOSAR_总目录,点击可跳转

相关推荐

  1. http模块 之 如何创建个http服务

    2024-07-20 12:22:05       40 阅读
  2. 模块通信

    2024-07-20 12:22:05       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 12:22:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 12:22:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 12:22:05       45 阅读
  4. Python语言-面向对象

    2024-07-20 12:22:05       55 阅读

热门阅读

  1. 火星地图插件

    2024-07-20 12:22:05       19 阅读
  2. 白骑士的PyCharm教学目录

    2024-07-20 12:22:05       18 阅读
  3. Mathematical Problem

    2024-07-20 12:22:05       15 阅读
  4. 第六章 Spring框架深入学习(2023版本IDEA)

    2024-07-20 12:22:05       14 阅读
  5. IO文件流

    2024-07-20 12:22:05       15 阅读
  6. 游戏外挂的技术实现与五年脚本开发经验分享

    2024-07-20 12:22:05       15 阅读
  7. mysql高阶知识梳理

    2024-07-20 12:22:05       15 阅读
  8. 3.设计模式--创建者模式--工厂模式

    2024-07-20 12:22:05       16 阅读
  9. npm下载的依赖包版本号怎么看

    2024-07-20 12:22:05       16 阅读