SciTech-EECS-Autosar(自动驾驶)

5: MCAL(微处理器抽象层)

微控制器抽象层位于AUTOSAR分层模型BSW最接近硬件设备的层,

包含内部驱动,可以直接访问微控制器和片内外设。

更进一步地,MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,

各部分又由具体的与微控制器硬件相对应的驱动模块组成。如下图所示。

微控制器驱动

微控制器驱动由四个部分组成:

  • 通用定时器驱动(General Purpose Driver,GPT Driver)、
  • 看门狗驱动(Watchdog Driver,WDG Driver)、
  • 微控制器单元驱动(Microcontroller Unit Driver,MCU Driver)
  • 内核测试(Core Test)。

后文详述:

  1. GPT Driver

    AUTOSAR有两类定时器,操作系统定时器 和 硬件定时器。

    该模块使用 通用定时器单元 的 硬件定时器通道,为 操作系统 或者 其他基础软件模块 提供 计时功能。

    GPT驱动的作用是:

    • 启动和停止硬件定时器;
    • 得到定时器数值;
    • 控制时间触发的中断;
    • 控制时间触发的中断唤醒。
  2. WDG Driver

    WDG Driver的功能主要是初始化和触发看门狗。

    WDG Driver有内部WDG Driver和外部WDG Driver。

    • 内部WDG Driver: 控制MCU的内部看门狗定时器,提供触发功能和模式选择服务;
    • 外部WDG Driver控制外部硬件看门狗,亦提供触发功能和模式选择服务。
  3. MCU Driver

    MCU Driver可以直接访问微控制器硬件,

    主功能是初始化、休眠、复位微控制器及提供其他MCAL软件模块所需的与 微控制器有关的特殊功能。

    MCU Driver还能够使能并设置MCU时钟,例如CPU时钟、外围器件时钟、预分频器等参数。
  4. Core Test

    Core Test(内核测试)模块包含周期性测试和启动测试。

    内核测试模块 可以对 CPU所有寄存器 进行测试,提供中断控制和异常检测。

    该模块还对 算术逻辑单元、存储保护单元 和 缓存控制器 等进行检测。

存储器驱动

存储器驱动由四部分组成:

  • 内部EEPROM驱动、
  • 内部Flash驱动、
  • RAM测试、
  • Flash测试。

后文详述:

1.内部EEPROM驱动

内部EEPROM驱动提供初始化服务,以及对内部EEPROM的读写、写、擦除等操作。

该驱动模块一次只能接受一个任务。

2.内部Flash驱动

内部Flash驱动提供内部Flash初始化服务,以及对内部Flash的读、写、擦除等操作。

该驱动还可以将Flash访问代码下载到RAM,如果需要也可以执行写、擦除操作。

3. RAM测试

RAM测试模块通过软件对RAM存储进行测试。

该模块包含 后台测试(异步服务) 和 前台测试(同步服务)。

4. Flash测试

flash测试模块提供算法来测试如数据/程序闪存、程序SRAM等非易失性存储器,

这些存储器可以是集成在微控制器内部的,也可以是外部映射到微控制器的存储器。

通信驱动

通信驱动由五部分组成:

  • 以太网(Ethernet)驱动、
  • FlexRay驱动、
  • CAN驱动、
  • LIN驱动、
  • SPI驱动。

后文详述:

  1. Ethernet驱动

    Ethernet驱动模块为以太网提供统一的接口。

    该驱动模块对所使用的以太网控制器的硬件特性进行抽象。

    以太网接口模块使用以太网驱动层访问某些控制器。

    以太网驱动层 由若干个 以太网驱动模块 组成。如下图所示。

  2. FlexRay驱动

    FlexRay驱动用来抽象不同的FlexRay通信控制器及其硬件相关的特性。

    通信控制器的FlexRay协议强制特性经过封装后只能通过统一的API进行访问。

    API提供映射到基于实际通信控制器的硬件访问序列的抽象功能操作。

    因此,使用FlexRay驱动可以保证FlexRay接口独立于硬件。

    对内部或外部FlexRay通信控制器的驱动来说,需要进行下列处理:

    • FlexRay控制器的初始化;
    • 配置数据处理单元;
    • 控制指令向通信控制器的传递;
    • 从协议引擎到控制器主接口状态数据的规定;
    • 通信控制器和主处理机之间信息数据的传输。
  3. CAN驱动

    CAN驱动针对的是微控制器内部的CAN控制器,它可以实现以下功能:

    • 对CAN控制器进行初始化;
    • 发送和接收报文;

      *对报文的数据和功能进行通知(对接收报文的指示、对发送报文的确认);
    • 溢出和错误处理;
    • 唤醒检测。

    此外,CAN驱动还具有以下特性:单个或多个CAN通道、CAN驱动的多重实例化、对接收报文的中断/轮询模式。

    CAN驱动是MCAL的一部分,可以执行硬件访问、向上层提供独立于硬件的API,

    而仅有的能够访问CAN驱动的上层是CAN接口(CAN Interface)。

    CAN驱动也可以为数据传输的初始化和通知接收事件的回调函数提供服务,该服务也是独立于硬件的。

    此外,CAN驱动也可以控制属于同一个CAN硬件单元的CAN控制器的行为和状态。

  4. LIN驱动

    LIN驱动使用标准的通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)或者串行通信接口(Serial Communication Interface,SCI)进行通信。

    该模块可以完成下列任务:

    • LIN硬件的初始化;
    • 调度表的处理;
    • LIN报文的发送(通过标志位和函数接口确认);
    • LIN报文的接收(通过标志位和函数接口指示);
    • 睡眠和唤醒;
    • 协议差错的处理;
    • 报文的超时监测。

    LIN驱动也是MCAL的一部分,可以执行 访问硬件、向上层提供独立于硬件的API。

    仅有的能够访问LIN驱动的上层是LIN接口(LIN Interface)。

    一个LIN驱动可以支持多个通道,但是这些通道要属于同一个LIN硬件单元。

  5. SPI驱动

    SPI驱动模块 是 微控制器内部 同步通信串行接口 的驱动。

    SPI驱动 为 SPI总线上不同的设备(如EEPROM/Watchdog等)提供读写访问服务。

    一个SPI设备可以被所使用的SPI硬件和相关的片选信号识别。

    该模块可以在主、从或者主-从模式下运行。

    配置SPI驱动应遵循以下步骤:

    • 选择SPI驱动的功能级别,配置可选择的功能特性;
    • 根据数据用途来定义SPI通道,它们可以是SPI驱动的内部缓冲器,或者是由用户提供的外部缓冲器;
    • 根据硬件属性来定义SPI任务,它们会包含一系列使用这些属性的通道;
    • 定义任务序列,以优先级排序的方式来传递数据。

I/O驱动

I/O驱动由PORT驱动、DIO驱动、ADC驱动、PWM驱动、ICU驱动、OCU驱动六部分组成。

  1. PORT驱动

    PORT驱动初始化就是对微控制器的整个PORT模块进行初始化配置。

    很多端口和管脚被分配有多种不同的功能,即可以进行引脚功能复用,

    比如通用I/O、模数转换、脉宽调制等功能。

    因此,对PORT必须有一个整体的配置和初始化,对各管脚的具体配置和使用取决于微控制器和ECU的引脚功能分配。

    PORT初始化数据应当尽可能高效地写到每个端口。

    DIO驱动所用到的端口的配置和初始化都是在PORT驱动模块完成的。

    因此,在使用DIO功能之前,应先进行PORT的初始化。
  2. DIO驱动

    DIO驱动对微控制器硬件管脚的访问进行抽象,除此之外,还可以对管脚进行分组。

    该模块通过DIO通道、DIO端口以及DIO通道组来读写数据,而且这类操作是同步的。
  3. ADC驱动

    ADC驱动对微控制器内部模数转换单元进行初始化和控制。

    它可以提供启动和停止模数转换的服务,分别用来开启和禁用模数转换的触发源。
  4. PWM驱动

    PWM驱动为微控制器PWM模块提供初始化和控制服务,

    可生成周期和占空比都可变的脉冲。
  5. ICU驱动

    ICU驱动控制的是微控制器的输入捕获单元(Input Capture Unit),

    有两种模式:正常模式和休眠模式。

    ICU驱动可以提供一下服务:

    • 信号边沿检测及通知;
    • 中断唤醒;
    • 周期性信号时间的测量;
    • 边沿时间戳捕获;
    • 边沿/脉冲计数
  6. OCU驱动

    OCU驱动的作用是对微控制器内部的输出比较单元(Output Compare Unit)进行初始化和控制。

    当计数器的值到达某个阈值时,OCU模块会自动开始比较并执行相应的操作。

    OCU驱动还可以为下列功能提供服务:

    • 启动或停止输出通道;
    • 设定某个阈值;
    • 启用或禁用某个通道的通知函数;
    • 获取计数器数值;

SciTech-EECS-Autosar(自动驾驶)-5: MCAL(微处理器抽象层)的更多相关文章

  1. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  2. 华为MDC自动驾驶

    华为MDC自动驾驶 智能驾驶汽车中,包含四个核心子系统:传感器.计算平台.执行器与应用算法,华为MDC( Mobile Data Center: 移动数据中心)定位为智能驾驶的计算平台.此平台集成了华 ...

  3. NXP开源自动驾驶计算平台Bluebox 打造现实无人汽车

    知名半导体制造商恩智浦NXP已经准备好了自家的自动驾驶计算开源平台Bluebox,将为汽车制造商提供现成的一体化自动 驾驶计算解决方案.专为自动驾驶设备的BlueBox中央计算引擎.不仅能够为无人驾驶 ...

  4. 深度学习与自动驾驶领域的数据集(KITTI,Oxford,Cityscape,Comma.ai,BDDV,TORCS,Udacity,GTA,CARLA,Carcraft)

    http://blog.csdn.net/solomon1558/article/details/70173223 Torontocity HCI middlebury caltech 行人检测数据集 ...

  5. 波音,自动驾驶bug未修复,致346人丧生!5个月内两次坠毁!其中,包括8名中国公民

    一,波音737 MAX再次坠毁 继2018年10月29日,印尼波音737MAX飞机坠入爪哇海,导致178名乘客不幸遇难后,时隔不足5月,上周日,埃塞俄比亚航空公司一架波音737MAX客机在飞往肯尼亚途 ...

  6. 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)

    使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶. 下图是通过神经网络学习实现自动驾驶的图例讲解: 左下角是汽车所看到的前方的路况图像.左上图,可以看到一条水平的菜单栏(数字4所指示方向) ...

  7. 自动驾驶系统 bfs

    一家科技公司有一块试验地用于测试自动驾驶系统.试验地由n×m个格子组成,从上到下依次编号为第1到n行,从左到右依次编号为第1到m列.试验车位于其中的某个格子上,每次自动驾驶系统可以控制汽车往上下左右移 ...

  8. [原]JSBSim 自动驾驶(浅出)

    jsbsim的脚本文件分为几大类: 1.系统脚本: systems  包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml  和 自动飞行的算法控件:GNCUtilities.x ...

  9. <转载> 从算法上解读自动驾驶是如何实现的?

     科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...

  10. Waymo在美国推出自动驾驶汽车共享服务

    导读 经过数月的测试和数百万英里的无人驾驶汽车技术开发,Waymo 正式在美国推出了具有商业性质的自动驾驶汽车的共享服务. 该公司的 Waymo One 项目将为客户提供 24 小时自动驾驶汽车服务. ...

随机推荐

  1. liunx git 免密码登录

    vscode远程git或在linux环境使用git时,每次clone都要输入帐号密码,很不方便,可以使用下面一行命令,系统会记录你输入的下一次帐号密码.(明文记录,注意规避风险)   # 执行   g ...

  2. ctf.show刷题记录_web(1-10)

    ctf平台(ctfshow) `https://ctf.show/ 1.签到 解题:base64解码 ctfshow{0da357d0-359b-47e1-80dc-5c02212725e5} 2.w ...

  3. Spring纯注解的事务管理

    Spring纯注解的事务管理 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  4. 解密AI知识库

    许多人对AI知识库的理解是:只需将所有资料拖入AI客户端(如Cherry Studio),AI便会自动阅读并生成完美结论. 但实际体验后,大家发现AI知识库效果远不如预期,经常出现各种问题. 技术原理 ...

  5. 深挖diff算法:揭开代码版本控制神器的神秘面纱

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  6. windows安装node.js加配置淘宝镜像

    下载:https://nodejs.org/en/download/ 一路默认,或者选自己的路径,装好后打开cmd, 输入 node --version 显示版本. 是的,环境自己就配置好了! 配置淘 ...

  7. VSCode将本地项目代码上传到gitee中

    1.创建远程仓库,这个就是该仓库的地址   2.查看git的版本 git --version 3.使用git init命令初始化git 4.使用git status命令来查看文件是否被修改  : gi ...

  8. java练习题之String字符串

    1 编写程序将"jdk" 全部变成大写  并输出到屏幕 截取"DK"并输出到屏幕 1 package com.lv.study.am.first; 2 3 pu ...

  9. NAT的两种模式SNAT和DNAT介绍

    一.简单介绍 NAT(Network Address Translation):网络地址转换,是将IP数据包头中的IP地址转换为另一个IP地址的过程.在实际的应用中,NAT主要用于实现私有网络访问公共 ...

  10. RabbitMQ中间件

    RabbitMQ 配置环境 安装 erlang环境以及RabbitMQ RabbitMQ端口号: 5672 去官网下载 https://www.rabbitmq.com 然后重启RabbitMQ服务 ...