AUTOSAR-BSW层概述
ECU上面除了主芯片MCU,还有很多外围设备,比如外置Flash,外置电源管理芯片等等。是对MCU 芯片的抽象和封装,由于Autosar Cp 是基于MCU 的软件架构,所以该层主要是实现MCU 外设驱动,比如I/O驱动、Flash 驱动、Can 驱动、看门狗驱动、定时器驱动等等。这里可以看到 BSW 主要提供了:看门狗服务 ,存储服务,通信和诊断服务,OS服务,I/O 功能,BswM 和 Ecu
一.什么是BSW
BSW层全称为Basic Software (基础软件层),顾名思义,该层主要是为应用层提供基础服务。
这里可以看到 BSW 主要提供了:看门狗服务 ,存储服务,通信和诊断服务,OS服务,I/O 功能,BswM 和 EcuM 等模式管理功能
看门狗服务:提供看门狗功能,检测MCU,当MCU挂死的时候可以进行复位重启。
存储服务:提供读写数据到 EEPROM的功能。 通信和诊断服务:提供 Can、Lin、Eth 等通信和诊断功能。
I/O 功能:提供通用GPIO读写功能,ADC、PWM等特殊 Port 外设功能。
OS 服务:提供基础OS服务,任务周期运行、调度等功能。
BswM:管理整个Bsw的模块。
EcuM:管理 Ecu上下电等功能。
二.BSW结构介绍
MCAL层(微控制抽象层 MicroController Abstraction Layer)是对MCU 芯片的抽象和封装,由于Autosar Cp 是基于MCU 的软件架构,所以该层主要是实现MCU 外设驱动,比如I/O驱动、Flash 驱动、Can 驱动、看门狗驱动、定时器驱动等等。这一层是需要和硬件打交道的,这一层高度依赖MCU 硬件,如果项目换MCU 芯片,只需要修改这一层代码适配驱动即可。
ECU 抽象层(ECU Abstraction Layer)是对ECU的抽象和封装,ECU上面除了主芯片MCU,还有很多外围设备,比如外置Flash,外置电源管理芯片等等。这 一层就是实现了整个ECU 所有设备的封装。外围设备也是MCU 主芯片控制的, 这一层会使用到Mcal 的接口。作为抽象层,屏蔽了下层驱动实现细节,将统一 接口API 暴露给上层以实现功能。该层从上层抽象Mcal 层,并提供用于访问外 部和内部的驱动程序的API。
服务层(Service Layer)是向应用层提供服务的,这一层将底层提供的服务封装起来供应用层使用。比如通信服务、存储服务、os操作系统服务等。
CDD (Complex Device Drivers)复杂驱动指的是有些模块不适用于Autosar协议栈,通过手写代码自己封装成CDD模块,在项目开发中会经常有一些模块直接作为CDD使用。
三.通信服务
Mcal 包含了收发器驱动和总线控制器驱动,Mcal 向上提供驱动接口供总线接口层(CanIf LinIf EthIf)调用。
总线接口层(CanIf LinIf EthIf)也就是通信硬件抽象层,主要任务包括向上层模块提供与硬件无关的统一接口,屏蔽下层控制器收发器实现细节。
Bus Tp 层: Tp(Transport Layer)是通信传输层,主要是为诊断使用的,当can Lin 总线需要传输大于 8byte 数据,就需要Tp层进行多帧传输。
PduR 层: Pdu Router 也就是 Pdu 路由层,所有的通信收发都会到这一层进行PDU 路由。 Autosar 中包含了 Can、 Lin、 Eth 等通信,每个通信报文都可以描述成一个 PDU(protocal data unit)协议数据单元,通过 PduR 这一层统一管理每个 Pdu 收发去处。
IPDU Mux: IPDU 多路复用功能,指的是使用同一个 I-PDU 的同一种 PCI,其SDU 有多个不同的布局。
COM:通信报文会到这里。 从 PDUR 接收上来的 I-PDU 到这里会转成具体信号数据给到应用层使用, 应用层通过 RTE 传下来的信号首先到这里转成 I-PDU发到 PduR。应用层无需关注收发数据是通过什么总线传输的,这些收发的数据通过 DBC 文件或者 ARXML 文件事先定义好。 COM 主要起到信号接口和网关作用。
DCM:诊断报文会到这里,根据诊断要求做具体诊断服务。
L-PDU:(Data Link Layer PDU)数据链路层 PDU,可以理解就是一帧总线报文
N-PDU:(Network Layer PDU )网络层(也就是传输 TP 层)PDU,一般诊断报文会走 TP层,通信报文直接从 IF 层转到 PduR 层,当诊断是多帧传输的时候,一个IPDU就会被分段成多个 N-PDU
I-PDU: (Interaction Layer PDU) 交互层 PDU, PDUR 路由转发 I-PDU。
三种 PDU 代表在通信协议栈不同分层的协议数据单元, I-PDU就包含了数据buffer 指针、数据长度、和 I-PDU ID,本质就是一个结构体。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)