一、BSW层

AUTOSAR BSW(基础软件层)的协作开发,并不是大家同时动手写代码,而是更像一条分工明确、依次传递的“流水线”。这条流水线的核心逻辑就是“上层依赖下层,下层服务上层”,通过标准化的接口和ARXML配置文件,将不同团队的工作紧密地串联起来。

我们可以把BSW的三个主要子层——微控制器抽象层(MCAL)、ECU抽象层(ECUAL)和服务层(Service Layer),看作一个三层“服务栈”。它们的协作开发通常遵循以下流程:

🧱 第一步:底层“翻译官”的工作——MCAL层的适配

这是整个协作链条的起点。当项目确定了具体的硬件平台(例如英飞凌的TC377或者恩智浦的S32K系列)后,MCAL工程师就要开始行动了。

  • 核心任务:他们的工作最贴近芯片,需要根据电路图和硬件设计,为当前ECU精准配置MCAL(微控制器抽象层) 模块。这包括配置通用输入输出(GPIO)的引脚功能、模数转换器(ADC)的采样通道、脉宽调制(PWM)的输出频率,以及CAN、SPI等通信外设的具体参数。
  • 输入:除了硬件设计文档,他们还会收到来自上层系统设计(OEM或Tier1)的 ECU Extract(ECU提取文件),这个文件里包含了该ECU需要处理的信号、报文等需求信息。
  • 产出物:经过专用工具(如EB tresos Studio)的配置和代码生成,MCAL工程师会产出一套与该芯片强相关的底层驱动库和配置文件。这就像是给这颗芯片的每一个硬件功能都配上了标准化的“开关”和“说明书”,让上层软件可以通过统一的API来操作它们,无需关心底层复杂的寄存器。

⚙️ 第二步:板级“管家”的工作——ECU抽象层的集成

当底层驱动就位后,接力棒就传到了ECU抽象层工程师手中。他们的工作与具体的PCB板卡设计紧密相连。

  • 核心任务:他们负责开发或配置ECU抽象层(ECUAL)。这一层的主要作用是“封装外部设备”。比如,ECU板上可能通过SPI总线外挂了一个专用的电源管理芯片(System Basis Chip, SBC)或是一个加速度传感器。ECU抽象层的工程师就需要编写相应的驱动,将这些“外部设备”也封装成标准的服务,让上层觉得它们就像是MCU内部的一部分一样。
  • 输入:MCAL工程师提供的底层驱动,以及板级硬件(如外部芯片)的数据手册。
  • 产出物:一套屏蔽了板级硬件细节的配置文件。举个例子,无论你用MCU内部的ADC还是外部的ADC芯片来采集电压,通过ECU抽象层,上层服务层调用一个标准的Adc_Read()函数就能得到结果,完全不用关心电压值到底是从哪儿来的。

🚦 第三步:系统“服务生”的工作——服务层的整合

这是BSW配置中承上启下的关键一步,通常由最懂AUTOSAR标准的服务层工程师集成工程师来完成。

  • 核心任务:他们负责配置服务层(Service Layer),这是BSW中最复杂的部分。服务层提供的是ECU运行所需的各类核心“服务”,主要包括四大块:
    1. 通信服务:配置CAN协议栈(如CanIf, CanNm, PduR, Com等),定义好报文是如何打包、发送和接收的。
    2. 存储服务:配置非易失性存储器管理(NvM),规划好数据在EEPROM或Flash中的存储地址、大小和校验方式。
    3. 诊断服务:配置诊断模块(Dem, Dcm),定义ECU支持哪些UDS诊断服务、故障码(DTC)如何管理和上报。
    4. 系统服务:配置操作系统(OS)、ECU状态管理器(EcuM)、看门狗管理器(WdgM)等,定义任务如何调度、ECU如何唤醒和睡眠。
  • 输入:上层系统设计文件(如DBC诊断描述文件、通信矩阵)、MCAL和ECU抽象层生成的配置文件。
  • 产出物:经过层层配置后,最终会生成一份完整的、包含所有BSW模块参数的ARXML配置文件。这份文件是所有BSW模块协作的“总谱”。

🧩 第四步:最后的“粘合剂”——RTE生成与最终集成

最后,所有BSW层的配置成果会汇聚到RTE(运行时环境)生成器中,由RTE/集成工程师完成最后一击。

  • 核心任务:运行RTE生成器工具(如Vector DaVinci、ETAS ISOLAR),它会读取最终的BSW配置和应用层软件组件(SWC)的描述文件,自动生成RTE(运行时环境) 的代码。
  • 神奇的一刻:RTE就像一块“智能电路板”,它根据配置信息,自动将应用层软件组件(SWC)的“虚脚”(端口)和BSW层提供的服务(通信、存储等)“焊接”在一起。例如,它会生成代码,使得SWC调用一个发送数据的函数时,数据能自动通过之前配置好的CAN协议栈发送出去。
  • 最终产物:RTE代码生成后,所有的应用层代码、RTE代码、BSW代码(包括MCAL)就形成了一个完整的工程。集成工程师将所有代码整合到IDE中,进行编译、链接,最终生成可烧录到ECU中的HEX或ELF文件。

总的来说,这种分层协作模式的核心魅力在于“解耦”:MCAL工程师可以不懂上层诊断,服务层工程师也无需关心底层寄存器,只要大家遵循AUTOSAR定义好的接口和ARXML数据格式,就能各自独立开发,最终无缝集成。这正是现代汽车软件开发能够大规模并行、高效协同的关键所在。

二、ASW层与BSW层是如何通讯的

应用层软件组件(SWC)与基础软件层(BSW)的协作,并不是直接"对话"的,而是全部通过一个名叫运行时环境(RTE) 的"中间人"来进行的。

可以把RTE想象成一个高度智能的"总机接线员"。SWC想要发送数据、读取传感器、或者存储信息,都只需要告诉RTE,然后由RTE负责找到对应的BSW模块并把事情办妥。这种机制实现了应用层和硬件层的彻底解耦。

下面我们来具体看看这个协作过程是如何实现的。

1. 核心机制:端口与接口的"虚拟连接"

在AUTOSAR的架构里,SWC和BSW之间的协作不是凭空发生的,而是通过一种"设计时约定"和"运行时执行"的方式来实现的。

  • 设计时的约定(通过工具配置)
    在开发前期,工程师会使用AUTOSAR开发工具完成以下定义:

    1. SWC定义端口:每个需要与硬件交互的SWC,都会定义自己的端口(Port)。端口分为两类:
      • 需求端口(RS port):表示这个SWC"需要"某种数据或服务。例如,一个车速显示SWC会有一个需求端口,表示它"需要"当前车速信号。
      • 提供端口(PS port):表示这个SWC"提供"某种数据或服务。例如,一个计算平均油耗的SWC会有一个提供端口,表示它能"提供"计算出的油耗值。
    2. 定义接口类型:每个端口都必须关联一个接口(Interface)。接口定义了端口之间交互的内容和方式。对于SWC与BSW的交互,主要用到以下几种接口:
      • 发送-接收接口(Sender-Receiver Interface,S/R):用于数据的广播和接收,比如传感器值、车辆状态信号。这是最常用的接口。
      • 客户端-服务器接口(Client-Server Interface,C/S):用于功能的调用,比如请求执行某个诊断服务、请求写入一段数据到EEPROM。
    3. 将SWC的端口连接到BSW的"虚拟端口":在工具中,工程师会将SWC的需求端口(比如"我需要车速")连接到BSW提供的对应服务上(比如"通信模块的CAN信号车速")。这个"连接"动作,最终会被记录在系统的配置描述文件(ARXML)中。
  • 运行时的执行(通过RTE代码)
    当RTE生成器读取了上述所有配置信息后,它就会自动生成代码。这些代码实现了设计时的"虚拟连接"。

0 条评论

发表回复

您的电子邮箱地址不会被公开。