简洁AUTOSAR

一、先只记住 AUTOSAR 整体干什么

你可以把 AUTOSAR 先理解成一句话:

上层写业务,下层管硬件,中间用标准接口连起来。


AUTOSAR 四层总表

层级 你可以怎么理解 典型内容 主要干嘛
ASW / Application 业务层 车辆状态、扭矩控制、故障监控 SWC 写功能逻辑
RTE 中间翻译层 Rte_Read / Rte_Write / Rte_Call 连接应用和基础软件
BSW 基础软件层 COM、PduR、CanIf、DCM、DEM、OS、EcuM 提供通信、诊断、系统服务
MCAL 最底层驱动 Can、Adc、Spi、Dio、Mcu 直接操作 MCU 外设

一句话理解每层

  • ASW:我要做什么
  • RTE:怎么把上层和下层连起来
  • BSW:通用功能帮你做好
  • MCAL:真正操作芯片硬件

二、先把 CAN 通信这条线理清楚

你面试这个岗位,最重要的是这条链路:

发送链路

SWC
  ↓
RTE
  ↓
COM
  ↓
PduR
  ↓
CanIf
  ↓
CanDrv(MCAL Can)
  ↓
CAN 控制器
  ↓
CAN 总线

接收链路

CAN 总线
  ↓
CAN 控制器
  ↓
CanDrv
  ↓
CanIf
  ↓
PduR
  ↓
COM
  ↓
RTE
  ↓
SWC

三、你最容易混乱的词,我给你做成一个表

1)通信模块速查表

名字 全称 你就把它理解成 主要作用
COM Communication 信号打包/解包器 把 Signal 打包成 I-PDU,或把 I-PDU 解出 Signal
PduR PDU Router 路由器 把 PDU 从一个模块转给另一个模块
CanIf CAN Interface CAN 统一接口层 给上层提供统一 CAN 接口,屏蔽底层驱动差异
CanDrv CAN Driver CAN 驱动 真正操作 CAN 控制器发收报文
CanSM CAN State Manager CAN 状态管理员 管理 CAN 通信状态、Bus-Off 恢复
ComM Communication Manager 通信总管 决定当前 ECU 要不要通信、处于什么通信模式
CanNm CAN Network Management CAN 网络管理 节点休眠/唤醒、网络保持
CanTp CAN Transport Layer CAN 多帧传输层 大于 8 字节(或 FD 更大数据)时分段传输
DCM Diagnostic Communication Manager 诊断服务管理 处理 UDS 诊断请求
DEM Diagnostic Event Manager 故障事件管理 记录故障、DTC 状态
EcuM ECU State Manager ECU 上下电总管 管启动、关机、初始化流程

2)最关键的 4 个:COM / PduR / CanIf / CanDrv

这个你必须最清楚:

模块 它看什么数据 它关心什么 你可以怎么记
COM Signal / I-PDU 周期、超时、打包解包 管“信号”
PduR PDU 把数据送去哪 管“转发”
CanIf CAN L-PDU 哪个控制器、哪个 HTH/HRH 管“接口”
CanDrv CAN 控制器寄存器/邮箱/FIFO 波特率、中断、收发 管“硬件”

四、Signal、PDU、Frame 到底是什么

这是最容易绕晕的地方,我给你直接举例。

假设有一条电机报文:

CAN ID = 0x181
DLC = 8

Byte0~1:MotorSpeed
Byte2   :Enable
Byte3   :Mode
Byte4   :AliveCounter
Byte5   :Checksum
Byte6~7:Reserve

这几个概念怎么对应?

概念 是什么 在上面例子里是谁
Signal 一个业务信号 MotorSpeed、Enable、Mode
I-PDU 一组打包后的通信数据单元 这 8 个字节整体可以看成一个 I-PDU
Frame 真正在 CAN 总线上跑的一帧报文 CAN ID=0x181 这帧
DLC 数据长度编码 8
CAN ID 报文标识符 0x181

一句话记忆

  • Signal:业务含义的数据,比如“电机速度”
  • I-PDU:多个 Signal 打成一包
  • Frame:这包数据真正通过 CAN 发出去的报文帧

五、CanIf、I-PDU 到底在整个流程里是什么角色

这个你现在最乱,我专门解释一下。


1)I-PDU 是什么?

I-PDU = Interaction Layer Protocol Data Unit

你不用背全称,记一句就够:

I-PDU 就是 COM 这一层眼里的“一包通信数据”。

例如:

  • 电机速度 16bit
  • 使能 8bit
  • 模式 8bit
  • 校验 8bit

这些信号打包后,COM 看见的是一个 I-PDU。


2)CanIf 是什么?

你就把 CanIf 理解为:

上层想发 CAN,不直接碰底层驱动,而是先找 CanIf。

CanIf 干的事情包括:

  • 接收上层的发送请求
  • 知道这个 PDU 应该发到哪个 CAN 控制器
  • 知道使用哪个发送硬件对象
  • 接收底层收到的报文,再往上通知

所以它是一个接口适配层。


3)为什么不能让 COM 直接操作 CanDrv?

因为 AUTOSAR 要分层。

如果 COM 直接碰硬件,那上层通信逻辑和底层 MCU 强耦合,后面换芯片、换控制器就麻烦。

所以中间放:

  • PduR:负责转发
  • CanIf:负责 CAN 接口统一
  • CanDrv:负责具体硬件

六、你可以这样理解 AUTOSAR 的 CAN 发送过程

假设你的应用要发“目标扭矩”。

简化版流程

步骤 模块 干什么
1 SWC 算出目标扭矩
2 RTE 把数据交给下层
3 COM 把扭矩等信号打包成 I-PDU
4 PduR 把这个 PDU 路由给 CanIf
5 CanIf 选用哪个 CAN 控制器和发送对象
6 CanDrv 写入发送邮箱
7 CAN 控制器 真正发到总线上

七、你可以这样理解 AUTOSAR 的 CAN 接收过程

假设电机发来速度报文。

步骤 模块 干什么
1 CAN 控制器 收到报文
2 CanDrv 从硬件 FIFO 里取出来
3 CanIf 识别这是哪条 RxPdu
4 PduR 路由到 COM
5 COM 解包出 MotorSpeed 信号
6 RTE 提供给应用读取
7 SWC / Runnable 读到最新电机速度

八、状态管理模块怎么区分

这个也很容易混。

模块 你可以怎么理解 主要问题
ComM 通信模式总管 这个 ECU 现在要不要通信?
CanSM CAN 状态管理员 CAN 控制器当前是不是 Full Communication?Bus-Off 怎么恢复?
CanNm 网络管理 整个 CAN 网络要不要睡眠/唤醒?
BswM 模式仲裁器 根据各种状态切换执行相应动作

最简单记法

  • ComM:我要不要通信
  • CanSM:CAN 现在能不能正常通信
  • CanNm:大家这个网络要不要睡觉/唤醒
  • BswM:根据模式来协调动作

九、诊断相关模块再压缩一下

模块 作用 你可以怎么记
DCM 处理诊断请求(UDS) 诊断“服务员”
DEM 管理故障事件/DTC 故障“档案员”
CanTp 多帧传输 诊断“大包裹搬运工”
NvM 非易失存储 故障和配置保存

十、你现在最该背的“极简记忆版”

如果你时间不多,就只背下面这个。


1)AUTOSAR 四层

层 作用
ASW 业务逻辑
RTE 接口桥梁
BSW 基础功能
MCAL 硬件驱动

2)CAN 四大通信模块

模块 一句话
COM 信号打包解包
PduR PDU 路由转发
CanIf CAN 统一接口
CanDrv CAN 硬件驱动

3)三个数据概念

名字 一句话
Signal 一个业务信号
I-PDU 一包打好的通信数据
Frame 一帧真正上总线的 CAN 报文

4)一句话总流程

发送

SWC → RTE → COM → PduR → CanIf → CanDrv → CAN Bus

接收

CAN Bus → CanDrv → CanIf → PduR → COM → RTE → SWC


十一、我建议你面试时就这样解释

如果面试官问你:

“你怎么理解 AUTOSAR 通信架构?”

你可以简洁回答:

AUTOSAR 我现在的理解是,上层 SWC 只关心业务逻辑,通过 RTE 与基础软件交互。
在 CAN 通信这条链路里,COM 负责信号打包解包,PduR 负责 PDU 路由,CanIf 提供统一的 CAN 接口,CanDrv 负责具体的硬件收发。
对我来说,最重要的是把 Signal、I-PDU 和 CAN Frame 区分清楚,以及理解发送链路和接收链路的分层关系。

这段就已经很像一个靠谱的回答了。


十二、最后我帮你做一个“别再混了”的对照表

你容易混的词 其实它是什么
CanIf CAN 接口层,不是最底层驱动
CanDrv 最底层 CAN 驱动
COM 处理 Signal 和 I-PDU
PduR 转发 PDU,不负责解析业务信号
Signal 具体业务数据
I-PDU 信号打包后的通信单元
Frame 真正发到总线上的帧
RTE SWC 和 BSW 之间的桥
Runnable SWC 内可执行单元,不等于线程
SWC 应用软件组件
博客内容均系原创,未经允许严禁转载!
您可以通过 RSS 订阅本站文章更新,订阅地址:https://blognas.hwb0307.com/feed/。什么是 RSS ?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇