跳至内容

【autosar】Classic CanIf 模块详解

AUTOSAR Classic CanIf 模块详解:作用、原理、配置项、收发流程,以及与 CAN、PduR、COM 的关系。

AUTOSAR Classic CanIf 模块详解:作用、原理、配置与接口关系

CanIf(CAN Interface) 是 AUTOSAR Classic 通信栈里连接上层 PDU 路由与底层 CAN Driver 的接口层。它的核心任务不是理解业务信号,而是把上层的 PDU 请求映射到具体的 CAN 控制器、发送邮箱和接收邮箱上。

1. CanIf 的作用

  • 屏蔽底层 CAN Driver 的差异
  • 统一上层收发接口
  • 维护 PDU 到 HTH / HRH 的映射
  • 处理控制器模式、PDU 模式、发送确认和接收指示

2. CanIf 在通信栈中的位置

flowchart TB
    SWC[SWC / 应用层] --> COM[COM]
    COM --> PDUR[PduR]
    PDUR --> CANIF[CanIf]
    CANIF --> CAN[CAN Driver]
    CAN --> HW[CAN 控制器 / 邮箱]
    HW --> BUS[(CAN 总线)]

3. 工作原理

发送时,COM 先把信号打包成 I-PDU,PduR 再把 I-PDU 路由到 CanIf;CanIf 根据配置找到对应的 HTH,调用 Can_Write() 交给 CAN Driver。接收时,CAN Driver 收到帧后通过 CanIf_RxIndication() 往上通知,再经由 PduR 分发给 COM 或其他模块。

sequenceDiagram
    participant COM as COM
    participant PduR as PduR
    participant CanIf as CanIf
    participant Can as CAN Driver

    COM->>PduR: I-PDU 发送请求
    PduR->>CanIf: CanIf_Transmit()
    CanIf->>Can: Can_Write(HTH)
    Can-->>CanIf: Can_TxConfirmation()
    CanIf-->>PduR: 发送确认
    PduR-->>COM: 发送完成

4. 典型配置项及作用

常见/典型名称 作用
CanIfDevErrorDetect 开发错误检测
CanIfVersionInfoApi 版本信息接口
CanIfPublicTxBuffering 发送缓冲/排队
CanIfCancelTransmitSupport 支持取消发送
CanIfCtrlCfg 控制器配置
CanIfHthCfg 发送硬件对象配置
CanIfHrhCfg 接收硬件对象配置
CanIfTxPduCfg 发送 PDU 映射
CanIfRxPduCfg 接收 PDU 映射
CanIfTxPduCanId 发送 CAN ID
CanIfRxPduCanId 接收 CAN ID
CanIfTxPduHthRef 发送句柄引用
CanIfRxPduHrhRef 接收句柄引用
CanIfPduMode PDU 在线/离线模式
CanIfControllerMode 控制器模式管理

5. 常见使用场景

  • 周期报文发送
  • 诊断与刷写通信
  • 网络管理报文
  • 多 CAN 控制器 ECU 的报文映射
  • 低功耗唤醒与 Bus-Off 管理

6. 与 CAN、PduR、COM 的关系

CanIf 是中间适配层:上游接 PduR / COM / CanTp / CanNm,下游接 CAN Driver。COM 负责信号,PduR 负责路由,CanIf 负责把抽象 PDU 翻译成具体 CAN 硬件操作。

 

8. 小结

CanIf 的定位可以记成一句话:把上层 PDU 翻译成 CAN 硬件听得懂的东西,再把硬件收到的帧翻译回上层 PDU。

发送评论