小白也能懂的车软 AutoSAR 入门指南

欢迎联系我WX:AutoButo,领取AUTOSAR学习资料

一、AutoSAR 是什么

咱们先从一个真实场景说起。假设你是一家新能源车企的研发负责人,现在要开发一款搭载 L2 + 级辅助驾驶的电动汽车。

首先,电池管理系统(BMS)得找专业的电池厂商做,他们用的是基于 ARM Cortex-M4 的芯片;电机控制器要交给电机巨头,他们的硬件平台是 PowerPC 架构;自动驾驶模块更复杂,可能得和算法公司合作,他们习惯用 x86 的嵌入式平台。

等所有模块开发完,问题来了:电池厂商的软件用 CANoe 做通信仿真,电机团队用的是 Vector 的工具链,算法公司甚至自己开发了一套通信协议。当这些模块要集成到整车时,光是通信接口适配就花了三个月 ——A 厂商的报文格式和 B 厂商的波特率冲突,C 厂商的软件居然不支持整车的诊断协议。

更头疼的是后期升级。用户反馈续航计算不准,想优化 BMS 算法,结果改完之后发现电机控制器报故障了 —— 原来两者的能量回收策略存在隐性耦合。这种 “牵一发而动全身” 的困境,在电动化、智能化浪潮下越来越普遍。

这就是 AutoSAR 诞生的背景:当汽车从 “机械产品” 变成 “带轮子的计算机”,软件复杂度呈指数级增长,传统 “各自为战” 的开发模式已经完全跟不上节奏。

简单说,AutoSAR(Automotive Open System Architecture)就是汽车行业的 “通用语言” 和 “标准化接口”。它像一套乐高积木的通用说明书,规定了不同模块的拼接方式,让电池、电机、自动驾驶等不同供应商的软件能无缝对接,同时实现 “硬件无关性”—— 就像手机 APP 能在不同品牌手机上运行一样,汽车软件也能在不同硬件平台上移植。

二、AutoSAR 的架构解析

(一)基础软件层(BSW)

基础软件层相当于汽车软件的 “地基”,直接和硬件打交道。它就像智能家居的网关,把各种硬件的 “方言” 翻译成通用语言。

比如当传感器检测到刹车信号时,硬件驱动模块会把电信号转换成数字信号;通信模块负责按照 CAN/LIN/Ethernet 等协议打包数据;诊断模块则记录所有故障信息,方便售后用诊断仪读取。

举个具体例子:当你踩下制动踏板,BSW 中的 IO 驱动模块会立即捕获这个信号,经 ECU 抽象层处理后,通过通信栈发送给 ESP(电子稳定程序)—— 整个过程就像快递分拣系统,从收件到运输再到派件,每个环节都有明确分工。

(二)运行时环境(RTE)

RTE 是 AutoSAR 最精妙的设计,相当于软件世界的 “交通枢纽”。它解决了一个核心问题:应用层软件不用关心底层硬件是什么。

比如自动驾驶的 “紧急制动请求” 这个功能,应用层只需要调用 “RequestEmergencyBrake ()” 这个接口,RTE 会自动判断该用 CAN 还是 Ethernet 发送信号,该优先调用哪个硬件的资源。这就像你用外卖 APP 点餐,不用关心骑手骑的是电动车还是摩托车,平台会自动调度最优资源。

同时,RTE 还负责任务调度。当多个功能同时请求硬件资源时(比如导航语音和倒车雷达警报同时触发),它会按照预设的优先级进行排序,确保关键功能优先执行。

(三)应用层

应用层是汽车功能的 “呈现者”,由一个个独立的软件组件(SWC)组成。比如自适应巡航控制(ACC)组件、电池均衡管理组件、车道保持组件等。

这些组件就像手机里的 APP,彼此独立又能协同工作。比如 “自动泊车” 功能,就是由超声波传感器组件、转向控制组件、车速控制组件通过 RTE 相互通信完成的。你可以单独升级某个组件,比如优化超声波传感器的算法,而不会影响其他功能 —— 这也是为什么现在车企能通过 OTA 升级特定功能。

三、AutoSAR 学习流程

(一)必备软件工具介绍

学习 AutoSAR 离不开工具链的支持,主流工具可分为 “设计与配置工具”“仿真与测试工具” 和 “开发硬件平台” 三类,新手入门建议优先掌握以下组合:

  • Vector DaVinci 系列:AutoSAR 开发的 “瑞士军刀”,包含 DaVinci Developer(负责应用层软件组件设计)、DaVinci Configurator(配置基础软件层 BSW)和 DaVinci Interface Designer(定义接口信号),支持从需求到代码生成的全流程。

  • EB tresos Studio:博世旗下的基础软件配置工具,尤其擅长 BSW 模块的精细化配置,自带丰富的底层驱动模板,适合深入学习硬件抽象层(MCAL)。

  • CANoe:汽车总线仿真神器,能模拟 CAN/LIN/Ethernet 通信环境,用于验证 AutoSAR 软件的通信功能,比如发送虚拟的传感器信号测试控制逻辑。

  • 开发硬件:推荐 NXP S32K144 开发板(约 2000 元),自带 AutoSAR 官方认证的 MCAL 驱动,配套有完整的例程和调试工具,是入门级性价比之选。

(二)基于灯光控制例程的分层配置实践

以 “汽车灯光控制” 为例(通过 CAN 信号控制近光灯、远光灯的开关,同时反馈灯光状态),手把手教你用工具链完成从应用层到底层的全流程配置。

1. 应用层配置(DaVinci Developer)

应用层的核心是定义软件组件(SWC)和接口,步骤如下:

  • 创建软件组件:新建 “LightControlSWC”,添加两个端口 ——“LightCommand”(接收灯光控制命令,属于 Client-Server 接口)和 “LightStatus”(发送灯光状态,属于 Sender-Receiver 接口)。
  • 定义接口信号:在 LightCommand 中添加操作 “SetHeadLight”,参数为 “LightType”(枚举类型:近光灯 / 远光灯)和 “State”(布尔类型:开 / 关);在 LightStatus 中定义信号 “HeadLightState”,包含当前灯光类型和状态。
  • 设计内部行为:用状态机描述逻辑 —— 当接收到 “SetHeadLight (近光灯,开)” 命令时,触发 “TurnOnLowBeam” 函数,并通过 LightStatus 发送状态 “近光灯已开启”。

完成后导出 ARXML 文件(AutoSAR 标准数据格式),这是后续配置的基础。

2. 中间层(RTE)配置(工具自动生成)

RTE 无需手动编写代码,而是由工具根据应用层和底层的配置自动生成,关键步骤:

  • 在 DaVinci Configurator 中导入应用层 ARXML 文件,工具会自动识别接口信号和软件组件。
  • 配置 RTE 的调度策略:设置 “LightControlSWC” 的运行周期为 10ms(每 10ms 检查一次控制命令),优先级设为中等(高于娱乐系统,低于安全相关组件)。
  • 绑定接口与总线:将 “LightCommand” 映射到 CAN ID 为 0x123 的报文,“LightStatus” 映射到 CAN ID 为 0x124 的报文,工具会自动生成信号与报文的打包 / 解包代码。

点击 “Generate RTE”,工具会生成约 5000 行 C 代码,包含接口函数、任务调度和信号路由逻辑。

3. 底层(BSW)配置(DaVinci Configurator + EB tresos)

底层配置分为 “硬件抽象层(MCAL)” 和 “服务层”,以控制开发板上的 LED 灯为例:

  • MCAL 配置(EB tresos)
    • 配置 GPIO 驱动:将开发板的 PTC12 引脚(接 LED 灯)设为输出模式,命名为 “LowBeamPin”。
    • 配置 CAN 控制器:设置波特率为 500kbps,接收过滤器仅允许 0x123 报文通过(减少无关信号干扰)。
    • 生成驱动代码:导出 MCAL 的 ARXML 文件和 C 代码,包含 GPIO 初始化、CAN 发送 / 接收函数。
  • 服务层配置(DaVinci Configurator)
    • 配置诊断模块(Diagnostic Manager):添加 “灯光故障码”(如 0x1001 表示近光灯短路),支持 UDS 协议的 19 服务(读取故障码)。
    • 配置操作系统(OS):创建两个任务 ——“LightControlTask”(调用 RTE 生成的接口函数)和 “CanReceiveTask”(处理 CAN 报文接收),设置任务栈大小和超时时间。

4. 集成与测试(CANoe + 开发板)

  • 硬件连接:用 J-Link 将开发板与电脑连接,通过 USB 转 CAN 工具将开发板接入 CANoe 仿真环境。
  • 下载程序:将 RTE、应用层和底层代码合并编译,生成.hex 文件,通过 NXP 的 S32 Design Studio 下载到开发板。
  • 仿真测试:在 CANoe 中发送报文 0x123(数据域为 0x01 0x01,代表 “开启近光灯”),观察开发板上的 LED 是否点亮,同时查看 CANoe 是否接收到 0x124 报文(数据域为 0x01 0x01,反馈近光灯开启状态)。

通过这个例程,你会直观感受到:应用层专注 “做什么”(逻辑),底层专注 “怎么做”(硬件),RTE 则是连接两者的 “翻译官”—— 这正是 AutoSAR 分层架构的核心优势。

四、总结与展望

学习 AutoSAR 就像学一门编程语言,初期理解概念会很痛苦,但一旦掌握了架构思维,就能看透汽车软件的本质。它不仅是一套技术规范,更是一种 “标准化、模块化” 的开发哲学 —— 这在软件定义汽车的时代,是每个汽车软件工程师的必备素养。

未来,AutoSAR 还会向更灵活、更智能的方向发展。比如 AutoSAR Adaptive 平台专门为高性能计算场景设计,支持面向服务的架构(SOA),能更好地适配自动驾驶的需求。

如果你想在汽车软件领域深耕,现在开始学 AutoSAR 一点都不晚。从基础概念到工具操作,再到项目实战,一步一个脚印,半年后你会发现,曾经觉得神秘的汽车软件黑盒,已经变得清晰可见。

欢迎与大家交流AUTOSAR技术,WX:AutoButo

这里的NM主要是针对Can协议的网路管理。 AUTOSAR CanNM的核心思想主要归纳为以下两条: 1.  如果节点需要保持通信,则节点需要周期的发送NMPDUs,否则停止发送NMPDUs 2.     如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。   工作模式和状态   CanNm一共有三个工作模式 1.  Network Mode 2.  PrepareBus-Sleep Mode 3.  Bus-Sleep Mode 模式的改变应该通过回调函数通知上层。 下面单独说每种模式   (1)Network Mode Network Mode又包括三个内部状态 1. Repeat Message State 2. Normal Operation State 3. Ready Sleep State ①Repeat Message State 这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点发现。这个状态可以用来检测总线上的节点。 当进入Repeat Message State时,节点应该开始传送NMPDUs。 在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。 当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。   ②Normal Operation State 这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该发送NMPDUs。 在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。   ③ReadySleep State 这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。 如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。 如果该节点需要使用总线,则节点进入Nomal Operation State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。 (2)PrepareBus-Sleep Mode   这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为发送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。 当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。 在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。   (3)Bus-SleepMode   Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。 当进入Bus-Sleep Mode时候,应该通知上层应用。 在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。 如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。 ———————————————— 版权声明:本文为CSDN博主「cococenstar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cococenstar/article/details/84096689
### 关于AutoSAR的学习资源 对于希望深入了解AutoSAR的开发者来说,选择合适的培训资源至关重要。以下是几种推荐的学习途径及其特点: #### 自学与博客资料 许多初学者通过网络上的免费资源开始了他们的AutoSAR学习旅程。然而,正如提到的一样,部分博客内容质量参差不齐,可能无法满足深入理解的需求[^1]。因此,在筛选这些资源时需格外注意其权威性和实用性。 #### 系统化课程 针对更全面的理解,《AutoSAR入门到精通实战系列》提供了从小白到专家级别的指导,不仅涵盖了基础理论还涉及具体工具(如EB/Davinci)的操作指南,并且通过对源码的设计分析加深学员对内部机制的认识[^2]。这种类型的课程适合那些希望通过结构化教学快速掌握核心技术的人群。 #### 官方文档与其他专业书籍 VECTOR所提供的AUTOSAR入门与实践培训材料是一份非常有价值的参考资料,它面向不同层次的技术人员,无论是新手还是有一定经验者都可以从中受益匪浅[^3]。官方文档通常是最可靠的信息来源之一,因为它们直接来源于标准制定机构,能够确保信息准确性的同时也反映了最新版本的变化情况。 #### 实践操作建议 除了理论知识外,实际动手能力同样重要。可以尝试搭建简单的项目环境来进行练习,比如使用开源平台或者模拟器来实现基本功能模块开发。这样不仅可以巩固所学到的概念还能提高解决问题的能力。 ```python # 示例代码:简单展示如何加载一个BswM模块配置文件(假设存在相应API) def load_bswm_config(config_file_path): try: with open(config_file_path, 'r') as file: config_data = json.load(file) # 假设配置是以JSON格式存储 initialize_module(config_data) # 初始化BSWM模块函数调用 except Exception as e: print(f"Error loading BSW-M configuration: {e}") load_bswm_config("/path/to/bswm_configuration.json") ``` 以上是一个简化版关于加载某个特定汽车件组件(BswM)配置的例子,展示了在真实环境中可能会遇到的一些编程任务。 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值