AUTOSAR 学习笔记(二):通信栈 Communication Stack
通信栈是 AUTOSAR 中负责 ECU 之间以及 ECU 内部的报文/信号通信的完整软件栈。它是整个 BSW 中最核心、最复杂的一部分,覆盖多种车载总线:CAN、LIN、FlexRay、Ethernet 以及 Socket Adapter(SOME/IP)。
2.1 CANStack(CAN 通信栈)
CAN 通信栈是 AUTOSAR 中最经典、用于覆盖 CAN(以及 CAN-FD)总线的分层通信栈。
分层结构(自上而下)
┌───────────────────────────────┐
│ COM (通用通信模块) │ PDU 报文<->上层对信号/报文组装的接口
├───────────────────────────────┤
│ CAN_TP (传输层) │ Can 报文分段/重组(CAN-TP)
├───────────────────────────────┤
│ PduR (PDU 路由器) │ 报文路由,对应到 COM/CAN 模块
├───────────────────────────────┤
│ CanSM(状态管理) │ CAN 网络管理状态机(切换 PDU/manage)
├───────────────────────────────┤
│ CanNM(CAN 网络管理) │ CAN NM 报文处理(节点网络管理)
│ CanTp(CAN 传输层)等 │
├───────────────────────────────┤
│ CanIf (接口层) │ Can 接口,抽象驱动
├───────────────────────────────┤
│ Can (CAN 驱动) │ 直接操作 MCU CAN 控制器(MCAL)
└───────────────────────────────┘
关键模块职责
- Can(MCAL):直接控制 MCU CAN 控制器寄存器,收发 CAN 帧,提供硬件发送/接收回调。
- CanIf(CAN 接口层):为上层提供透明访问 Can 驱动的接口,管理多个 CAN 控制器的复用;包含发送通知、接收回调。
- CanTp(CAN 传输协议):实现 ISO 15765-2 的分段/重组,用于传输超长 CAN 报文(如诊断请求/响应
通过 + 优先)。 - CanNm(CAN 网络管理):负责总线网络管理(应用 App 层面的 NM 报文处理,对应 AUTOSAR NM 总线的 3 状态)。
- CanSM(CAN 状态管理):控制 ComM 的 Can 通道状态机(
NO_COMMUNICATION/BLOCKED/FULL_COMMUNICATION)。 - Com(以太网/传统 CAN COM):将应用层的信号转换为总线报文(PDU),并提供信号的封装/解析。
- PduR(PDU Router):在不同的协议栈/端口间路由报文(如从 CanTp 到 CanSM/Com,或诊断路由到 Dcm)。
2.2 LINStack(LIN 通信栈)
LIN(Local Interconnect Network)是低成本、低速(最高 20 kbps)的单主多从总线。
- 分层:
- LinDriver(MCAL):直接驱动 LIN UART。
- LinIf(LIN 接口):管理调度表、帧处理。
- LinTp(LIN 可选,很少用):LIN 传输层(如诊断用)。
- Com/LinSM:面向逻辑信号。
- 特点:LIN 以一个主节点(Master)控制,从节点(Slave)响应主机发起的帧;支持调度表(Schedule Table),帧 ID 决定优先级。
- LIN 常与小成本传感器、座椅、车窗、车门等从节点相连,作为 CAN 的子网络。
2.3 EthStack(Ethernet 通信栈)
AUTOSAR 4.x 之后的以太网栈专为车载以太网(如 AVB、SOME/IP、DoIP)而设计。
分层:
┌──────────────────────────────────────────────┐
│ SoAd(Socket Adaptor) 协议适配层 │
├──────────────────────────────────────────────┤
│ UDPNS / SOME/IP 网络服务(Sd) │
├──────────────────────────────────────────────┤
│ TcpIp(TCP/IP 协议栈,如 lwIP/BsdNet) │
├──────────────────────────────────────────────┤
│ EthTp(双)tcp/IP 分段 │
├──────────────────────────────────────────────┤
│ EthIf(接口层) │
├──────────────────────────────────────────────┤
│ EthSwt(以太网交换机) │
├──────────────────────────────────────────────┤
│ Eth(MCAL 以太网驱动) │
└──────────────────────────────────────────────┘
关键特性:
- Sd(Service Discovery):AUTOSAR 服务发现,动态发现 "数据提供者服务"。
- Socket Adaptor(SoAd):将 TCP/UDP Socket 映射到 AUTOSAR 的逻辑通道(PDU/UDPNSM)。
- SomeIp:用于面向服务的通信(SOA,Service-Oriented Architecture),是 AP 采用的核心模式,同样可移植到 CP(SOME/IP - so-called SOME/IP over UDP / TCP)。
5 FlexRay
FlexRay 是高速(最高 10 Mbps)高可靠性(确定性 + 容错拓扑,双通道)的车载总线,早期用于底盘/动力系统(如 x-by-wire)与高端网关。
- 时间确定性:采用时分多址(TDMA)、静态时隙 + 动态时隙 的调度机制。
- 分层:Fr(MCAL 驱动)/ FrIf(接口)/ FrTp(传输层)/ FrNm / Com。
- 适用于对时间确定性要求高的场景(x-by-wire, ADAS/底盘)。
2.5 SocketAdapter(SoAd/以太网 Socket 适配)
Socket Adapter(SoAd)是 AUTOSAR 4.x 提供的模块,用于在以太网和上层之间建立连接抽象:
- 为上层提供 Server 端口 / 客户 Socket的抽象;
- 将 TCP/UDP 的 Socket 绑定到具体局域网端点(local UDP/TCP port);通过 P 支持 TcpIp 回调;转换 PDU 与数据包。
小结:通信栈之间的关系
- CAN 与 LT、FR 共用同一套高层协议栈(Com、PduR、DCM等)。通过 PduR统一路由,差异由底层接口层(CanIf/LinIf/FrIf/EthIf)隔离。
- 诊断以 PduR 为桥梁:DCM 通过 PduR 将诊断请求发送到 CanTp(或 LinTp、EthPdu),实现诊断跨总线。
- 网络管理(NM) 与 ComM 交互,实现 ECU 网络状态的转换。
下一篇:System Services(OS、看门狗、内存服务等系统服务)。

浙公网安备 33010602011771号