汽车电子学习笔记—AutoSAR之基础软件层(BSW)
- 1、概述
如之前autosar概述笔记中说明,BSW按照层级结构可以分为服务层、ECU抽象层、硬件抽象层(MCAL)和复杂驱动层(CDD)。
- 硬件抽象层(MCAL)
主要包含了相关的Driver,通过该层次可以访问MCU的资源,比如访问整个芯片的CAN,LIN等控制器,配置MCU的Port脚,配置MCU的时钟等。主要包含下面的内容: MCU,PORT,DIO,ADC,SPI,CAN,LIN,FLEXRAY,PWM,ICU,OCU等
- ECU抽象层
底层驱动的抽象,同时它也是外设的驱动,它提供了可以访问外设和底层MCU的接口,该层次主要包含了下面的内容:CanIf,Can Transceiver Driver, MemIf, Fee, Ea, External Flash/EEPROM Driver, WdgIf等
- 服务层
包含操作系统的功能、车辆网络通信管理服务、存储器服务(NVRAM管理)、诊断服务(包括UDS通信、错误存储和故障处理)、ECU状态管理,模式管理、逻辑和时间程序流监控(Wdg管理器)、密码服务(密码服务管理)、调度管理(Schedule Manager)
- 复杂驱动
跨越于微控制器硬件层和RTE之间,其主要任务是整合具有特殊目的且不能用MCAL进行配置的非标准功能模块,将该部分功能嵌入到AUTOSAR基础软件层中,从而实现处理复杂传感器以及执行器的特定功能和时间要求。复杂驱动程序跟单片机和ECU硬件紧密相关。其上层程序接口是根据AUTOSAR指定并且实施的;其下层程序接口受标准接口程序的限制。复杂驱动可以使用特定的中断或是复杂的微控制器外设(如PCP/TPU)来直接访问微控制器,从而实现对复杂传感器的评估和执行器的控制,比如喷油控制,电磁阀控制,增量位置检测等
- 2、详细描述
- I/O功能
功能包括了DIO(数字输入输出)、ADC和PWM等
- 1)I/O Signal Interface: 对输入数据的初步处理,比如输入去抖等
- 2)Driver for ext. ADC ASIC: 外置ADC的驱动,比如当有外部ADC采样芯片的时候,通过SPI通信,将数据传入主芯片
- 3)Driver for ext. I/O ASIC: 同上,只不过这里是I/O
- 4)SPI Handler: SPI处理驱动,将硬件中的SPI封装成API供上层调用
- 5)ADC PWM DIO: MCAL中的驱动,将硬件中的ADC、PWM、DIO分别封装成API供上层调用
- 6)SPI ADC PWM DIO(Hardware): 就是指芯片中的这些功能模块
实际例子流程
Adc_ReadGroup:是MCAL对上层开放的API函数,Read到的是ADC采样值(比如12位精度最大就是4095)
Get_SensorValue:IoHwAb中的一个服务函数,主要作用就是通过ADC采样值计算出实际的传感器阻值(多少欧姆)。Sensor SWC和IoHwAb是通过C/S接口相连,可以通过Rte_Call_Get_(port)_SensorValue调用
Send_Temperature:将欧姆值计算成实际的温度值,再传递给App SWC
- Communication功能
- 1)COM:主要就起了一个信号接口和网关的作用。从应用层传下来数据首先就进入这里,应用层无需关心收发的数据是通过什么总线传输的,只需要将它传输给COM即可
- 2)PDU Router: PDU——Protocol Data Unit,协议数据单元。这个模块的功能就是将COM下发的信号数据分配到相应的协议总线上去;或者将不同的协议变成同一信号上传给COM
- 3)IPDU Mux:用于解析一些特殊的协议,比如CAN FD或者用户自定义的一些协议。就是起了一个统一CAN ID,不同信号Layout的作用
- 4)CAN Tp:分包数据传输与错误检测,一般来说只有在诊断的时候才会使用
- 5)CAN Interface:主要配置收发队列;组帧(FlexRay);管理时间触发总线的调度表(LIN, FlexRay)
- 6)CAN Driver:MCAL中对主芯片上CAN模块的驱动封装
- 7)Trcv Driver:Transceiver driver,收发器驱动
通信流程:
-
发送流程
- 1)应用层Send一个数据进COM
- 2)COM写信号进PDU Buffer中
- 3)PDU被PDU Router立刻发送或按周期发送(每个PDU都有一个独立的ID),之后PDU Router辨认总线种类,并把PDU发向不同的下级模块
- 4)Interface根据不同的通道,把报文写入不同的队列
- 5)Driver根据报文的优先级立刻发送报文
-
接收流程
- 1)硬件接收报文
- 2)由Driver发出Rx中断(函数),之后通过RxIndication,数据被传递到Interface
- 3)传递到PDU Router
- 4)传递到COM(如果SWCs使用Data ReceptionTrigger,就通知RTE;否则暂存到Buffer中)
- 5)信号被RTE读取,然后应用层读取
- Memory功能
1)ROM存储方式
- EEPROM:可以按位操作
- FLASH仿EEPROM:相同大小容量下Flash相对便宜一些,但是只能按块擦写,不能按位擦写。想要让Flash做到按位擦写,就需要先将Flash原来的数据备份一份,再修改其中想要修改的位,再按块擦除,最后将改写好的数据再烧录回原块中
- 而存储可以是片内的,也可以是片外的
2)详细说明
-
NVRAM Manager:
a.应用层访问非易失性数据的唯一接口,提供非易失数据的管理服务
b.NVM模块上层是RTE,下层是对接Flash Driver或者EEPROM Driver的接口
c.NVM里面的数据读写有两种同步机制:Implicit synchronization(隐式同步)和Explicit synchronization(显式同步) -
Memory Abstraction Interface:主要作用是将需要读写的信息解耦,分别分派给EEPROM或FLASH
-
EEPROM Abstraction(EA):EEPROM的抽象层,主要作用就是进一步封装片外或片内EEPROM驱动,给上层提供统一的API接口
-
Flash EEPROM Emulation: 同上,此为Flash
-
External E² Drv:ECU抽象层中片外EEPROM的驱动,下面是SPI的驱动,由于片外的EEPROM要通过SPI通信才能访问。因此,片外EEPROM的驱动要放到ECU抽象层中
-
SPI Handler Drv:MCAL中对片上SPI的驱动
-
SPI EEPROM FLASH:片内的SPI、EEPROM和FLASH功能模块
-
External E² Memory:片外EEPROM,就是板载的EEPROM,需要通过SPI访问
流程:
- 片内存储
- 片外存储
- Watchdog功能
- WdgM: 为应用层提供安全相关的服务
- WdgIf: 看门狗接口,主要功能是触发硬件看门狗
- Wdg Drv: Mcal中看门狗的驱动
- Diagnostics功能
一般故障处理过程,如ECU故障发生了,要将故障的内容记录到EEP或者Flash中,communication模块把故障信息传输到CAN或者LIN上,故障发生后需要对故障功能做出应急处理
- FIM: Function Inhibition Manager,功能禁止管理,当一些error出现的时候,禁止一些功能。比如当检测到控制器过电流的时候,关闭MOS或IGBT,防止炸管
- DEM:Diagnostic Event Manager,诊断事件管理。就是用来记录和存储诊断事件的,下面连接NVRAM Manager,就是将这些诊断事件记录到EEP或者Flash中
- DCM:Diagnostic Communication Manager,诊断通信管理。实现诊断通信协议,我们通常说的UDS协议(即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准
流程:
- 对故障做出快速响应的功能:
首先由应用层传输数据到DEM,DEM判断出是哪个故障,之后发送给FIM;FIM立即做出判断,通过回调函数通知SWC或者轮询的方式禁止SW - 将故障记录的功能:
故障由应用层传输数据到DEM,DEM一边是发送给FIM,另一边是发送给NVRAM Manager,然后将故障记录到EEP或者Flash中,方便以后维修诊断
- AutoSAR OS
OS可以配置为四个等级:SC1、SC2、SC3、SC4 (SC:Scalability Classes,可伸缩的类型)
- SC1: 包含标准OSEK OS标准,除此之外还定义了标准的计数器接口和轮询式的调度表
- SC2= SC1 + 时间保护。也就是说,当一个任务执行时间过长,它会被停止;SC2同时还定义了时间监控。防止因为一个任务时间过长而影响其他任务的实时性
- SC3: SC3 = SC1 + 内存保护。针对未经授权访问安全相关软件组件的内存区域的防护
- SC4: SC4 = SC1 + 时间保护 + 内存保护 = SC2 | SC3
- Mode Management功能
模式管理,可以理解为对状态的管理(比如ECU的上电、下电和休眠;CAN通讯的开启和关闭都是状态)。主要管理的对象有ECU、BSW和COM(通信中又可以细分很多)
-
ECU State Manager(EcuM)
ECU状态机,主要作用是管理的是ECU的上下电功能(还包括休眠、重启等)。
具体有以下四个功能:- 1)单片机初始化时,初始化OS所需的BSW模块
- 2)为单片机的休眠(Sleep)模式和唤醒(wake up)模式做准备
- 3)执行关机命令和重启命令
- 4)通过唤醒验证协议验证已发生的唤醒
-
Basic Software Mode Manager(BswM):
主要作用是定义一系列规则。一旦满足规则,就执行相应的动作。主要有Communication Control、Ecu State Handing和Module Initialization -
Communication Manager(ComM):主要功能是管理通信的启用和关闭
-
Network Management(Nm If, Bus NM):主要功能是保持总线唤醒和协调总线关闭
-
Bus State Manager(Bus SM):切换Bus的状态,比如CAN SM是切换该CAN的启动和关闭(注意把CAN和COM区分开,COM更高一层,COM不光包含CAN)