详解AUTOSAR BSW通信机制:基于Vector的DaVinci案例分析

AUTOSAR BSW通信模块详解

本篇博客将详细介绍AUTOSAR(Automotive Open System Architecture)中的BSW(Basic Software)通信模块,着重解释其功能和模块之间的接口。我们将以基于Vector DaVinci工具链的实例进行说明。以下是博客的目录:

  1. 概述
  2. COM模块
  3. PDU Router模块
  4. IPDU Mux模块
  5. CAN Tp模块
  6. CAN Interface模块
  7. CAN Driver模块
  8. Trcv Driver模块
  9. 数据流程示例
  10. 接口列表
  11. 结论

1. 概述

AUTOSAR是一种开放式汽车系统架构标准,旨在提供可重用、可扩展和互操作的汽车软件解决方案。BSW通信模块是AUTOSAR架构中的一部分,负责处理应用程序与车辆总线之间的数据通信。

2. COM模块

  • 作用与功能:COM模块是应用程序与通信模块之间的接口。它将应用层发送的数据传输到下一级通信模块,并将接收到的数据传递给应用层。
  • 接口:
    • sendData():应用层调用此接口将数据发送给COM模块。
    • receiveData():COM模块调用此接口将接收到的数据传递给应用层。

3. PDU Router模块

  • 作用与功能:PDU Router模块负责将COM模块下发的信号数据分配到相应的协议总线上,或将不同协议的数据转换为统一的信号发送给COM模块。
  • 接口:
    • routePDU():PDU Router模块通过此接口接收来自COM模块的信号数据。
    • sendPDU():PDU Router模块通过此接口将数据发送到不同的协议总线。

4. IPDU Mux模块

  • 作用与功能:IPDU Mux模块用于解析特殊协议(如CAN FD或用户自定义协议),提供统一的CAN ID,并处理不同信号布局。
  • 接口:
    • parsePDU():IPDU Mux模块通过此接口接收来自PDU Router模块的协议数据单元(PDU)。
    • mapPDU():IPDU Mux模块通过此接口将解析后的数据映射到统一的CAN ID。

5. CAN Tp模块

  • 作用与功能:CAN Tp模块用于处理分包数据传输和错误检测,在诊断过程中使用频率较高。
  • 接口:
    • transmitData():CAN Tp模块通过此接口将数据进行分包并传输。
    • receiveData():CAN Tp模块通过此接口接收传输的数据并进行错误检测。

6. CAN Interface模块

  • 作用与功能:CAN Interface模块与硬件无关,主要负责配置收发队列、帧组装(对于FlexRay)以及管理时间触发总线的调度表(对于LIN和FlexRay)。
  • 接口:
    • configureQueue():CAN Interface模块通过此接口配置收发队列。
    • assembleFrame():CAN Interface模块通过此接口对数据进行帧组装(仅适用于FlexRay)。
    • manageScheduleTable():CAN Interface模块通过此接口管理时间触发总线的调度表(适用于LIN和FlexRay)。

7. CAN Driver模块

  • 作用与功能:CAN Driver模块是对主芯片上的CAN模块进行驱动封装的模块。
  • 接口:
    • transmitMessage():CAN Driver模块通过此接口立即发送报文。
    • receiveMessage():CAN Driver模块通过此接口接收硬件中断并传递数据给CAN Interface模块。

8. Trcv Driver模块

  • 作用与功能:Trcv Driver模块用于驱动外置CAN收发器,与CAN Driver模块不同。
  • 接口:
    • transmitMessage():Trcv Driver模块通过此接口立即发送报文。
    • receiveMessage():Trcv Driver模块通过此接口接收硬件中断并传递数据给CAN Interface模块。

数据流程示例

以下是基于上述模块的数据流程示例:

发送数据流程:

  1. 应用层调用COM模块的sendData()接口发送数据。
  2. COM模块将数据写入PDU Buffer中。
  3. PDU Router模块立即或按周期发送PDU,并根据总线类型将PDU发送到不同的下级模块。
  4. Interface模块根据通道将报文写入不同的队列。
  5. Driver模块根据报文的优先级立即发送报文。

接收数据流程:

  1. 硬件接收报文。
  2. Driver模块发出Rx中断并通过RxIndication接口将数据传递给Interface模块。
  3. Interface模块将数据传递给PDU Router模块。
  4. PDU Router模块将数据传递给COM模块(如果SWCs使用Data ReceptionTrigger,则通知RTE;否则将数据暂存到Buffer中)。
  5. RTE读取信号数据,然后应用层读取数据。

接口列表

下面是BSW通信模块中各个模块的接口列表:

COM模块接口

  • sendData()

    • 输入:应用层数据
    • 输出:无
    • 功能:将应用层数据发送给通信模块
  • receiveData()

    • 输入:接收到的数据
    • 输出:无
    • 功能:将接收到的数据传递给应用层

PDU Router模块接口

  • routePDU()

    • 输入:来自COM模块的信号数据
    • 输出:无
    • 功能:将信号数据分配到相应的协议总线
  • sendPDU()

    • 输入:需要发送的PDU数据
    • 输出:无
    • 功能:将PDU数据发送到不同的协议总线

IPDU Mux模块接口

  • parsePDU()

    • 输入:来自PDU Router模块的PDU数据
    • 输出:无
    • 功能:解析特殊协议的PDU数据
  • mapPDU()

    • 输入:解析后的数据
    • 输出:无
    • 功能:将解析后的数据映射到统一的CAN ID

CAN Tp模块接口

  • transmitData()

    • 输入:需要传输的数据
    • 输出:无
    • 功能:将数据进行分包并传输
  • receiveData()

    • 输入:接收到的数据
    • 输出:无
    • 功能:接收传输的数据并进行错误检测

CAN Interface模块接口

  • configureQueue()

    • 输入:收发队列配置参数
    • 输出:无
    • 功能:配置收发队列
  • assembleFrame()

    • 输入:需要组装的数据
    • 输出:无
    • 功能:对数据进行帧组装(仅适用于FlexRay)
  • manageScheduleTable()

    • 输入:调度表管理参数
    • 输出:无
    • 功能:管理时间触发总线的调度表(适用于LIN和FlexRay)

CAN Driver模块接口

  • transmitMessage()

    • 输入:需要发送的报文
    • 输出:无
    • 功能:立即发送报文
  • receiveMessage()

    • 输入:接收到的硬件中断数据
    • 输出:无
    • 功能:将接收到的数据传递给CAN Interface模块

Trcv Driver模块接口

  • transmitMessage()

    • 输入:需要发送的报文
    • 输出:无
    • 功能:立即发送报文
  • receiveMessage()

    • 输入:接收到的硬件中断数据
    • 输出:无
    • 功能:将接收到的数据传递给CAN Interface模块

结论

本篇博客详细介绍了AUTOSAR BSW通信模块的各个模块及其功能和接口。从应用层到底层硬件,数据在通信模块中的传递流程清晰可见。通过COM模块,应用层可以与通信模块进行数据交换,无需关心数据是通过哪种总线传输的。PDU Router模块负责将信号数据分配到相应的协议总线上,同时也可以将不同协议的数据转换为统一的信号上传给COM模块。

IPDU Mux模块用于解析特殊协议的PDU数据,并将其映射到统一的CAN ID。CAN Tp模块处理分包数据传输和错误检测,在诊断过程中发挥重要作用。CAN Interface模块与硬件无关,负责配置收发队列、帧组装(对于FlexRay)以及管理时间触发总线的调度表(对于LIN和FlexRay)。

CAN Driver模块封装了主芯片上的CAN模块的驱动,用于发送和接收报文。Trcv Driver模块则是驱动外置CAN收发器的模块。

通过本篇博客,读者可以了解AUTOSAR BSW通信模块中各个模块的功能和接口,以及数据在模块之间的传递流程。这对于理解和开发基于AUTOSAR标准的通信系统具有重要的参考价值。

你可能感兴趣的:(autosar模块详细学习,mcu,c语言,经验分享,linux,git)