图解AUTOSAR_SWS_CANTransceiverDriver

AUTOSAR CAN收发器驱动模块详解

AUTOSAR标准中CAN收发器驱动的架构、状态机、数据类型与序列图分析

目录


1. 模块架构

1.1 架构概述

CAN收发器驱动(CanTrcv)是AUTOSAR微控制器抽象层(MCAL)的一个重要组件,它负责抽象CAN收发器硬件,为上层软件提供统一的接口。

1.2 架构图解

在这里插入图片描述

1.3 架构详细说明

CanTrcv模块在AUTOSAR分层架构中的位置:

  • 位于微控制器抽象层(MCAL),是底层硬件与上层软件的桥梁
  • 下连硬件:通过Dio、SPI等driver与CAN收发器硬件通信
  • 上接ECU抽象层:主要与CanIf(CAN接口)模块交互
  • 横向连接:与DET(开发错误跟踪)和DEM(诊断事件管理)模块交互,用于错误报告

模块间通信路径:

  1. 通信服务层到CAN收发器

    • ComM → CanSM → CanIf → CanTrcv
    • 负责通信模式管理和转换
  2. CAN收发器到ECU管理

    • CanTrcv → EcuM
    • 负责唤醒事件通知
  3. CAN收发器到硬件

    • CanTrcv → Dio/SPI/ICU → CAN收发器硬件
    • 负责硬件控制和状态读取

功能亮点:

  • 支持多种唤醒模式(NOT_SUPPORTED和POLLING)
  • 支持选择性唤醒功能(部分网络),实现精确的低功耗唤醒管理

2. 状态机

2.1 状态机概述

CAN收发器驱动实现了一个状态机来管理收发器的不同操作模式,确保模式转换的正确性和可靠性。

2.2 状态机图解

在这里插入图片描述

2.3 状态机详细说明

主要状态描述:

  1. POWER_ON

    • 电源接通初始状态
    • 收发器物理上已通电但软件未初始化
    • 通过CanTrcv_Init()函数离开该状态
  2. NOT_ACTIVE

    • 收发器未激活状态
    • CanTrcv_DeInit()函数进入
    • 表示驱动已注销,不再控制硬件
  3. ACTIVE:活动状态,包含三个子状态:

    • CANTRCV_TRCVMODE_NORMAL

      • 正常模式,支持全功能CAN通信
      • CAN总线通信激活
      • 唤醒功能可启用或禁用
    • CANTRCV_TRCVMODE_STANDBY

      • 待机模式,低功耗状态
      • CAN总线通信停止
      • 唤醒功能激活
      • 可支持选择性唤醒(部分网络功能)
    • CANTRCV_TRCVMODE_SLEEP

      • 睡眠模式,超低功耗状态
      • CAN总线通信停止
      • 仅可由CAN总线唤醒
      • ECU可能断电,实现最大化节能

状态转换路径:

  1. 初始化路径:

    • POWER_ON → CANTRCV_TRCVMODE_NORMAL/STANDBY/SLEEP(取决于配置)
  2. 正常运行路径:

    • CANTRCV_TRCVMODE_NORMAL ⟷ CANTRCV_TRCVMODE_STANDBY
    • CANTRCV_TRCVMODE_STANDBY ⟷ CANTRCV_TRCVMODE_SLEEP
  3. 反初始化路径:

    • 任何子状态 → NOT_ACTIVE(通过CanTrcv_DeInit()
  4. 唤醒路径:

    • CANTRCV_TRCVMODE_SLEEP → CANTRCV_TRCVMODE_STANDBY(由唤醒事件触发)

注意事项:

  • 状态转换时可能存在等待状态,以满足收发器硬件的时序要求
  • 在STANDBY模式下,如果支持部分网络功能,可通过特定CAN帧实现选择性唤醒

3. 数据类型

3.1 数据类型概述

CanTrcv模块定义了一系列数据类型,用于描述收发器状态、配置和操作参数,确保接口规范和类型安全。

3.2 数据类型图解

在这里插入图片描述

3.3 数据类型详细说明

核心枚举类型:

  1. CanTrcv_TrcvModeType

    • 定义收发器的操作模式
    • CANTRCV_TRCVMODE_NORMAL (0x00):正常通信模式
    • CANTRCV_TRCVMODE_STANDBY:待机模式
    • CANTRCV_TRCVMODE_SLEEP:睡眠模式
  2. CanTrcv_TrcvWakeupModeType

    • 定义唤醒通知的控制模式
    • CANTRCV_WUMODE_ENABLE (0x00):启用唤醒通知
    • CANTRCV_WUMODE_DISABLE (0x01):禁用唤醒通知
    • CANTRCV_WUMODE_CLEAR (0x02):清除唤醒事件
  3. CanTrcv_TrcvWakeupReasonType

    • 定义唤醒原因
    • CANTRCV_WU_ERROR (0x00):唤醒错误
    • CANTRCV_WU_NOT_SUPPORTED (0x01):不支持唤醒
    • CANTRCV_WU_BY_BUS (0x02):总线唤醒
    • CANTRCV_WU_INTERNALLY (0x03):内部唤醒
    • CANTRCV_WU_RESET (0x04):复位唤醒
    • CANTRCV_WU_POWER_ON (0x05):上电唤醒
    • CANTRCV_WU_BY_PIN (0x06):引脚唤醒
    • CANTRCV_WU_BY_SYSERR (0x07):系统错误唤醒
  4. CanTrcv_PNActivationType

    • 定义部分网络激活状态
    • PN_DISABLED:部分网络功能禁用
    • PN_ENABLED:部分网络功能启用

配置结构体:

  1. CanTrcv_ConfigType

    • 模块初始化数据结构
    • 包含指向收发器特定配置的指针
  2. CanTrcv_TransceiverType

    • 单个收发器通道的配置
    • 包含通道ID、唤醒源引用、初始状态等
  3. CanTrcv_PartialNetworkType

    • 部分网络(选择性唤醒)配置
    • 定义唤醒帧CAN ID、ID掩码和数据掩码

错误类型:

  1. 开发错误

    • 如无效参数、未初始化调用等
    • 使用DET模块报告
  2. 运行时错误

    • 如与收发器通信错误
    • 使用DET模块报告
  3. 生产错误

    • 如总线错误
    • 使用DEM模块报告

API函数集
主要包括初始化、模式控制、唤醒管理等功能函数,为上层软件提供统一的接口。


4. 交互序列

4.1 交互序列概述

CAN收发器驱动与其他模块之间存在复杂的交互关系,下面的序列图展示了典型使用场景中的模块间通信流程。

4.2 交互序列图解

在这里插入图片描述

4.3 交互序列详细说明

初始化流程:

  1. EcuM初始化基础模块

    • EcuM → Dio_Init()
    • EcuM → Spi_Init()
    • EcuM → CanTrcv_Init(ConfigPtr)
  2. CanTrcv初始化动作

    • 读取配置,访问硬件
    • 如检测到唤醒事件,调用EcuM_SetWakeupEvent()
    • 通知CanIf初始状态:CanIf_TrcvModeIndication()

模式转换流程:

  1. 进入正常通信模式

    • App → ComM → CanSM → CanIf → CanTrcv
    • CanTrcv_SetOpMode(CANTRCV_TRCVMODE_NORMAL)
    • 设置硬件,完成后通知:CanIf_TrcvModeIndication()
  2. 进入低功耗模式

    • App → ComM → CanSM → CanIf → CanTrcv
    • 先切换到待机:CanTrcv_SetOpMode(CANTRCV_TRCVMODE_STANDBY)
    • 再切换到睡眠:CanTrcv_SetOpMode(CANTRCV_TRCVMODE_SLEEP)
    • 每次切换完成后通知:CanIf_TrcvModeIndication()

唤醒场景(POLLING模式):

  1. 周期性检查唤醒

    • CanTrcv_MainFunction()定期执行
    • 读取唤醒标志状态
  2. 唤醒处理流程

    • 检测到唤醒→CanTrcv_CheckWakeup()EcuM_SetWakeupEvent()
    • EcuM→ComM→CanSM→CanIf→CanTrcv
    • 切换回正常模式:CanTrcv_SetOpMode(CANTRCV_TRCVMODE_NORMAL)

部分网络(选择性唤醒)场景:

  1. 启用部分网络功能

    • CanSM→CanIf→CanTrcv_SetPNActivationState(PN_ENABLED)
    • 配置唤醒帧ID和数据掩码
  2. 选择性唤醒处理

    • 收发器接收到匹配的唤醒帧
    • 设置唤醒标志→CanTrcv.CheckWakeFlag()CanIf_CheckTrcvWakeFlagIndication()
    • CanIf→CanTrcv_ClearTrcvWufFlag()CanIf_ClearTrcvWufFlagIndication()

关键交互特点:

  • 层级化通知机制:状态变化层层通知,确保系统协调一致
  • 回调函数广泛应用:使用回调实现异步通知
  • 严格的状态转换顺序:确保硬件状态安全可靠转换

5. 总结

5.1 模块价值

AUTOSAR CanTrcv驱动通过硬件抽象和标准化接口,实现了车辆电子系统中的高效功耗管理和可靠通信控制。作为MCAL层关键组件,它解决了CAN物理层与软件层的桥接问题,为整车电子架构提供了坚实基础。

5.2 应用场景

  • 汽车网络系统:管理CAN物理层,确保ECU间可靠通信
  • 功耗管理系统:优化车辆不同运行状态下的能源利用
  • 选择性唤醒:支持部分网络激活,实现精确功能域控制
  • 诊断与监控:提供总线状态监控和故障管理能力

5.3 设计亮点

  1. 模块化设计:清晰的接口定义和严格的层次结构
  2. 全面的功耗控制:支持正常、待机和睡眠多级功耗状态
  3. 灵活配置系统:适应多种收发器硬件和应用需求
  4. 完善的错误处理:三级错误分类和处理机制
  5. 精确的状态管理:确保可预测的模式转换和系统行为
autosar_sws_timesyncovercan是AUTOSAR标准中定义的基于CAN总线的时间同步服务。 在汽车电子系统中,不同的控制单元(ECU)需要按照统一的时间基准进行操作,以确保各个控制单元之间的协调和同步。autosar_sws_timesyncovercan就是为了满足这个需求而被定义的。 autosar_sws_timesyncovercan使用了CAN总线作为通信的介质,通过CAN总线将时间同步消息发送到各个控制单元。通过时间同步消息,各个控制单元可以获取精确的时间信息,并根据这个时间信息进行各种操作,例如数据传输、事件触发等。 autosar_sws_timesyncovercan实现了基于Master-Slave架构的时间同步机制。其中,Master节点负责发送时间同步消息,而Slave节点则负责接收并进行时间同步。Master-Slave架构确保了整个系统中所有控制单元之间的时间保持一致。 autosar_sws_timesyncovercan定义了不同的时间同步模式,包括周期同步模式和非周期同步模式。周期同步模式适用于需要周期性执行任务的应用场景,而非周期同步模式适用于一次性任务的应用场景。 autosar_sws_timesyncovercan还规定了时间同步消息的格式和传输方式,确保消息的可靠性和准确性。同时,还定义了时间同步相关的接口和API,方便控制单元的开发和集成。 总之,autosar_sws_timesyncovercan是一种以CAN总线为基础的时间同步服务,通过统一的时间基准来协调和同步汽车电子系统中的各个控制单元,实现系统的高效运行和协作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值