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 与数据包

小结:通信栈之间的关系

  • CANLTFR 共用同一套高层协议栈(Com、PduR、DCM等)。通过 PduR统一路由,差异由底层接口层(CanIf/LinIf/FrIf/EthIf)隔离。
  • 诊断以 PduR 为桥梁:DCM 通过 PduR 将诊断请求发送到 CanTp(或 LinTp、EthPdu),实现诊断跨总线。
  • 网络管理(NM) 与 ComM 交互,实现 ECU 网络状态的转换。

下一篇:System Services(OS、看门狗、内存服务等系统服务)。

posted @ 2026-08-02 19:18  mengjie_9  阅读(1)  评论(0)    收藏  举报