| 编辑推荐: |
本文系统讲解BSW的四大组成部分——服务层、ECU抽象层、MCAL和复杂驱动层,并深入剖析OS、COM、DCM、DEM、NvM等核心模块的工作机制与模块间协作关系。希望对你的学习有帮助。
本文来自于微信公众号从零学嵌入式 ,由火龙果软件Alice编辑,推荐。 |
|
摘要:在AUTOSAR架构中,基础软件层(BSW)是连接应用软件与硬件的桥梁。本文系统讲解BSW的四大组成部分——服务层、ECU抽象层、MCAL和复杂驱动层,并深入剖析OS、COM、DCM、DEM、NvM等核心模块的工作机制与模块间协作关系。
一、引言
在汽车电子嵌入式软件开发领域,AUTOSAR(Automotive Open System Architecture)已经成为行业公认的软件架构标准。AUTOSAR的核心设计理念是软硬件解耦,通过分层架构实现应用软件与底层硬件的完全分离,使软件组件能够在不同硬件平台上复用,极大地提升了开发效率和产品质量。
在AUTOSAR分层架构中,基础软件层(Basic Software Layer,BSW)是连接应用软件与硬件的桥梁,承担着硬件抽象、系统服务、通信管理、诊断服务等核心功能。理解BSW层的模块划分与工作机制,是每一位汽车嵌入式软件工程师的必备技能。
本文将系统性地讲解BSW层的四大组成部分——服务层(Service Layer)、ECU抽象层(ECU
Abstraction Layer)、微控制器抽象层(MCAL) 和复杂驱动层(Complex Drivers,CDD),并重点剖析其中最核心的模块:OS(操作系统)、COM(通信管理)、DCM(诊断通信管理)、DEM(诊断事件管理)和NvM(非易失性存储管理)。
a▲ 图1:AUTOSAR BSW 分层架构全景图
二、BSW分层架构全景
2.1 四层结构概述
BSW层自下而上划分为四个层次,每一层都有其明确的职责边界和访问规则:
| 层级 |
名称 |
核心职责 |
| L5 |
服务层Service Layer |
OS、COM、DCM、DEM、NvM、WDGM等系统级服务 |
| L4 |
ECU抽象层 ECU Abstraction |
CanIf、PduR、CanSM、EcuM等外设抽象 |
| L3 |
MCAL 微控制器抽象层 |
Can、Lin、Spi、Dio、Adc、Pwm、Mcu等片内外设驱动 |
| L2 |
微控制器 Microcontroller |
CPU内核、片内外设、寄存器、时钟、中断控制器 |
分层原则:每一层只能调用其直接下层提供的接口,跨层访问被严格禁止。这种强制的分层依赖关系保证了架构的清晰性和可维护性。
2.2 各层职责定位
微控制器抽象层(MCAL)是BSW的最底层,直接与MCU硬件交互。包含GPIO驱动、SPI驱动、CAN驱动、ADC驱动、PWM驱动等。MCAL将芯片的具体硬件细节封装为标准化的接口,是硬件相关代码的唯一驻留层。
ECU抽象层(ECU Abstraction Layer)位于MCAL之上,负责对ECU级别的硬件进行抽象。统一了外部存储器、通信收发器、电源管理芯片等外设的访问接口,使上层软件无需关心硬件的具体实现细节。
服务层(Service Layer)是BSW中最接近应用软件的层次,提供系统级的后台服务,包括操作系统(OS)、通信服务(COM/PduR/NM)、诊断服务(DCM/DEM/FIM)、存储服务(NvM/MemIf/FEE)等。
复杂驱动层(CDD)用于处理那些无法被标准AUTOSAR接口完全抽象的复杂硬件或实时性要求极高的场景。典型应用包括:摄像头接口驱动、雷达信号处理、发动机控制的高精度定时等。
三、服务层核心模块详解
3.1 OS——汽车实时操作系统
AUTOSAR OS是基于OSEK/VDX标准发展而来的实时操作系统,是整个ECU软件运行的调度中枢。
任务调度管理:AUTOSAR OS支持多优先级抢占式调度,任务(Task)可分为:
- 基础任务(Basic Task):仅包含一个执行步骤
- 扩展任务(Extended Task):可通过WaitEvent机制实现内部等待状态
中断管理:
- Category 1中断:不受OS管辖,中断处理完成后控制权直接返回
- Category 2中断:由OS管理,ISR可以调用OS服务
计数器与报警器:计数器基于硬件定时器产生tick,报警器将计数器与特定动作(激活任务、设置事件、调用回调)关联,实现精确的周期性调度。
3.2 COM——通信管理模块
AUTOSAR COM是车载网络通信的核心枢纽,位于RTE与下层通信协议栈之间,负责信号的打包、解包、路由和传输模式管理。
信号与信号组(Signal & Signal Group):COM管理两种数据单元——单个Signal(如一个uint16的温度值)和由多个Signal组成的Signal
Group。Signal可配置初始值(ComSignalInitValue)和数据无效值(ComSignalDataInvalidValue)。
字节序转换(Endianness):COM支持大端(Big Endian) 和小端(Little
Endian)两种格式自动转换,确保异构系统间的数据正确解析。
传输模式选择(Transmission Mode Selection, TMS):发送模式包括:
- Direct/N-Times:Signal更新立即触发I-PDU发送,发送N次
- Periodic:按固定周期发送,Signal更新仅更新数据缓冲
- Mixed:混合模式,兼具直接发送和周期发送特性
- None:不自发发送,仅响应TriggerTransmit请求
信号过滤机制:COM提供8种信号过滤算法(ALWAYS、NEVER、MASKED_NEW_EQUALS_X、MASKED_NEW_DIFFERS_X、MASKED_NEW_DIFFERS_MASKED_OLD、NEW_IS_WITHIN、NEW_IS_OUTSIDE、ONE_EVERY_N),用于在接收端过滤无效信号,或在发送端计算TMC。
3.3 DCM——诊断通信管理
DCM模块实现了UDS(Unified Diagnostic Services,ISO 14229)诊断协议中的通信管理功能,是整车诊断和软件更新的核心通道。
诊断会话管理:
- 默认会话(Default Session):提供基础诊断服务
- 扩展会话(Extended Session):解锁更多安全敏感的诊断操作
- 编程会话(Programming Session):用于引导加载程序中的软件刷新
典型UDS诊断服务:
| SID |
服务名称 |
功能描述 |
| 0x10 |
诊断会话控制 |
切换ECU诊断会话状态 |
| 0x11 |
电控单元复位 |
执行硬复位、软复位等操作 |
| 0x27 |
安全访问 |
请求种子并解锁对应安全等级 |
| 0x2E |
写入数据 |
写入DID(Data Identifier)数据 |
| 0x3E |
待机握手 |
保持非默认会话的激活状态 |
3.4 DEM——诊断事件管理
DEM模块负责汽车电子系统的故障诊断与事件管理,是功能安全体系的关键组成部分。DEM使用UDS 4字节DTC格式,DTC状态通过8位状态掩码(StatusOfDTC)表示:
| Bit |
标志名称 |
含义 |
| Bit0 |
testFailed |
当前操作周期内测试失败标志 |
| Bit1 |
testFailedThisOperationCycle |
本操作周期内测试失败 |
| Bit2 |
pendingDTC |
确认失败前的待定状态 |
| Bit3 |
confirmedDTC |
已确认故障(需达到确认阈值) |
| Bit5 |
testFailedSinceLastClear |
自上次清除后测试失败 |
| Bit7 |
warningIndicatorRequested |
请求点亮故障指示灯 |
故障老化(Aging)机制:对于已确认的故障,当其在连续多个操作周期内不再出现时,DEM可自动清除(age)该故障状态,释放故障历史记录。
与FIM的协作:DEM将故障事件状态通知功能禁止管理器(Function Inhibition Manager,FIM),FIM据此禁止或限制受影响的功能模块。例如,当检测到某个传感器故障时,FIM可以禁止依赖该传感器的自适应巡航功能。
3.5 NvM——非易失性存储管理
NvM模块管理ECU的非易失性存储(Flash、EEPROM),为上层应用提供统一的数据持久化接口,是汽车电子中配置参数、标定数据和故障记忆存储的核心基础设施。
Block类型划分:
- NVRAM Block:需要数据校验(如CRC)和一致性保护的数据块,包含RAM镜像和ROM镜像
- NV Block:存储在非易失性介质中的实际数据区
操作类型:
- Write:将数据从RAM写入非易失性存储
- Read:将数据从非易失性存储读入RAM
- Restore:用ROM中的默认值填充RAM镜像
- Invalidate:标记数据块为无效
- Erase:擦除数据块内容
错误处理策略:当检测到存储数据损坏时,NvM支持RETRY(自动重试)、USE_FIRST_FAILING(使用首次失败数据)、USE_BLOCK_DEFAULT(使用ROM默认值)三种错误恢复策略。
四、ECU抽象层与MCAL模块
4.1 ECU抽象层
ECU抽象层位于MCAL之上,通过标准化的接口屏蔽了下层硬件的具体实现,为服务层提供统一的硬件访问能力。核心模块包括:
- PduR(PDU Router):协议数据单元路由器,负责在BSW内部路由I-PDU,支持通信接口路由(1:1或1:N)和传输协议路由
CanIf(CAN Interface):向上对PduR提供标准化的CAN控制器抽象,向下调用MCAL中的Can
Driver
CanSM(CAN State Manager):管理CAN控制器的通信模式和波特率切换
EcuM(ECU State Manager):管理ECU的全局状态——启动(STARTUP)、运行(UP)、休眠(SLEEP)和关闭(SHUTDOWN)
4.2 MCAL微控制器抽象层
MCAL是整个AUTOSAR架构中与硬件耦合度最高的层次,由芯片厂商提供实现,包含以下核心驱动模块:
| 驱动类别 |
模块名称 |
主要功能 |
| 微控制器驱动 |
Mcu Driver |
时钟初始化(PLL)、复位控制、低功耗模式 |
| GPT Driver |
通用定时器,为OS提供系统时钟基准 |
| Wdg Driver |
看门狗驱动,支持快速/慢速/关闭三种模式 |
| 通信驱动 |
Can Driver |
片内CAN控制器驱动,硬件对象配置与报文收发 |
| Lin Driver |
LIN主机驱动,帧头发送与响应处理 |
| Spi Handler |
SPI总线驱动,支持多Job/Sequence的异步传输 |
| Eth Driver |
以太网MAC驱动,MII/RMII接口管理 |
| 存储驱动 |
Fls Driver |
内部Flash驱动,程序写入/数据存储/擦除 |
| Eep Driver |
内部/外部EEPROM驱动 |
| I/O驱动 |
Port Driver |
管脚复用配置(方向、功能模式) |
| Dio Driver |
数字GPIO读写 |
| Adc Driver |
模数转换,支持单次/连续/硬件触发 |
| Pwm Driver |
脉宽调制输出 |
| Icu Driver |
输入捕获,支持边沿检测与时间测量 |
五、BSW模块交互实例:CAN报文收发
为帮助读者建立完整的系统认知,以下以CAN报文发送和CAN报文接收两条路径,说明BSW各模块间的协作流程:
5.1 CAN报文发送路径
发送路径:
发送路径: 应用层SWC → RTE → COM模块 → PduR → CanIf → Can Driver(MCAL) → CAN收发器 → CAN总线
关键API:Rte_Write_Signal() → Com_MainFunction_Tx() → PduR_ComTransmit() → CanIf_Transmit() → Can_Write()
|
5.2 CAN报文接收路径
接收路径:
接收路径: CAN总线 → CAN收发器 → Can Driver(MCAL) → CanIf → PduR → COM模块 → RTE → 应用层SWC
关键API:Can_RxIndication() → CanIf_RxIndication() → PduR_RxIndication() → Com_RxIndication() → Rte_Write()
|
六、总结与工程实践建议
BSW层是AUTOSAR架构中规模最大、复杂度最高的组成部分,涵盖了从底层寄存器访问到上层系统服务的全栈功能。
工程实践要点 分层意识:严格遵守分层访问规则,不要在服务层直接调用MCAL接口 模块耦合:明确各模块的上下游关系——DCM依赖COM、PduR;DEM依赖NvM 配置先行:BSW的绝大多数行为通过配置工具(DaVinci Developer、EB tresos等)定义 异常处理:充分利用DET和DEM的诊断能力,在开发阶段尽早暴露问题 实时性考量:对于时间敏感的场景,优先使用CDD直接访问硬件
|
掌握BSW层,是每一位汽车嵌入式软件工程师从初级迈向高级的必经之路。
|