AUTOSAR BSW通信模块详解
本篇博客将详细介绍AUTOSAR(Automotive Open System Architecture)中的BSW(Basic Software)通信模块,着重解释其功能和模块之间的接口。我们将以基于Vector DaVinci工具链的实例进行说明。以下是博客的目录:
- 概述
- COM模块
- PDU Router模块
- IPDU Mux模块
- CAN Tp模块
- CAN Interface模块
- CAN Driver模块
- Trcv Driver模块
- 数据流程示例
- 接口列表
- 结论
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模块。
数据流程示例
以下是基于上述模块的数据流程示例:
发送数据流程:
- 应用层调用COM模块的
sendData()
接口发送数据。 - COM模块将数据写入PDU Buffer中。
- PDU Router模块立即或按周期发送PDU,并根据总线类型将PDU发送到不同的下级模块。
- Interface模块根据通道将报文写入不同的队列。
- Driver模块根据报文的优先级立即发送报文。
接收数据流程:
- 硬件接收报文。
- Driver模块发出Rx中断并通过RxIndication接口将数据传递给Interface模块。
- Interface模块将数据传递给PDU Router模块。
- PDU Router模块将数据传递给COM模块(如果SWCs使用Data ReceptionTrigger,则通知RTE;否则将数据暂存到Buffer中)。
- 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标准的通信系统具有重要的参考价值。