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(诊断事件管理)模块交互,用于错误报告
模块间通信路径:
-
通信服务层到CAN收发器:
- ComM → CanSM → CanIf → CanTrcv
- 负责通信模式管理和转换
-
CAN收发器到ECU管理:
- CanTrcv → EcuM
- 负责唤醒事件通知
-
CAN收发器到硬件:
- CanTrcv → Dio/SPI/ICU → CAN收发器硬件
- 负责硬件控制和状态读取
功能亮点:
- 支持多种唤醒模式(NOT_SUPPORTED和POLLING)
- 支持选择性唤醒功能(部分网络),实现精确的低功耗唤醒管理
2. 状态机
2.1 状态机概述
CAN收发器驱动实现了一个状态机来管理收发器的不同操作模式,确保模式转换的正确性和可靠性。
2.2 状态机图解
2.3 状态机详细说明
主要状态描述:
-
POWER_ON:
- 电源接通初始状态
- 收发器物理上已通电但软件未初始化
- 通过
CanTrcv_Init()
函数离开该状态
-
NOT_ACTIVE:
- 收发器未激活状态
- 由
CanTrcv_DeInit()
函数进入 - 表示驱动已注销,不再控制硬件
-
ACTIVE:活动状态,包含三个子状态:
-
CANTRCV_TRCVMODE_NORMAL:
- 正常模式,支持全功能CAN通信
- CAN总线通信激活
- 唤醒功能可启用或禁用
-
CANTRCV_TRCVMODE_STANDBY:
- 待机模式,低功耗状态
- CAN总线通信停止
- 唤醒功能激活
- 可支持选择性唤醒(部分网络功能)
-
CANTRCV_TRCVMODE_SLEEP:
- 睡眠模式,超低功耗状态
- CAN总线通信停止
- 仅可由CAN总线唤醒
- ECU可能断电,实现最大化节能
-
状态转换路径:
-
初始化路径:
- POWER_ON → CANTRCV_TRCVMODE_NORMAL/STANDBY/SLEEP(取决于配置)
-
正常运行路径:
- CANTRCV_TRCVMODE_NORMAL ⟷ CANTRCV_TRCVMODE_STANDBY
- CANTRCV_TRCVMODE_STANDBY ⟷ CANTRCV_TRCVMODE_SLEEP
-
反初始化路径:
- 任何子状态 → NOT_ACTIVE(通过
CanTrcv_DeInit()
)
- 任何子状态 → NOT_ACTIVE(通过
-
唤醒路径:
- CANTRCV_TRCVMODE_SLEEP → CANTRCV_TRCVMODE_STANDBY(由唤醒事件触发)
注意事项:
- 状态转换时可能存在等待状态,以满足收发器硬件的时序要求
- 在STANDBY模式下,如果支持部分网络功能,可通过特定CAN帧实现选择性唤醒
3. 数据类型
3.1 数据类型概述
CanTrcv模块定义了一系列数据类型,用于描述收发器状态、配置和操作参数,确保接口规范和类型安全。
3.2 数据类型图解
3.3 数据类型详细说明
核心枚举类型:
-
CanTrcv_TrcvModeType:
- 定义收发器的操作模式
CANTRCV_TRCVMODE_NORMAL
(0x00):正常通信模式CANTRCV_TRCVMODE_STANDBY
:待机模式CANTRCV_TRCVMODE_SLEEP
:睡眠模式
-
CanTrcv_TrcvWakeupModeType:
- 定义唤醒通知的控制模式
CANTRCV_WUMODE_ENABLE
(0x00):启用唤醒通知CANTRCV_WUMODE_DISABLE
(0x01):禁用唤醒通知CANTRCV_WUMODE_CLEAR
(0x02):清除唤醒事件
-
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):系统错误唤醒
-
CanTrcv_PNActivationType:
- 定义部分网络激活状态
PN_DISABLED
:部分网络功能禁用PN_ENABLED
:部分网络功能启用
配置结构体:
-
CanTrcv_ConfigType:
- 模块初始化数据结构
- 包含指向收发器特定配置的指针
-
CanTrcv_TransceiverType:
- 单个收发器通道的配置
- 包含通道ID、唤醒源引用、初始状态等
-
CanTrcv_PartialNetworkType:
- 部分网络(选择性唤醒)配置
- 定义唤醒帧CAN ID、ID掩码和数据掩码
错误类型:
-
开发错误:
- 如无效参数、未初始化调用等
- 使用DET模块报告
-
运行时错误:
- 如与收发器通信错误
- 使用DET模块报告
-
生产错误:
- 如总线错误
- 使用DEM模块报告
API函数集:
主要包括初始化、模式控制、唤醒管理等功能函数,为上层软件提供统一的接口。
4. 交互序列
4.1 交互序列概述
CAN收发器驱动与其他模块之间存在复杂的交互关系,下面的序列图展示了典型使用场景中的模块间通信流程。
4.2 交互序列图解
4.3 交互序列详细说明
初始化流程:
-
EcuM初始化基础模块:
- EcuM →
Dio_Init()
- EcuM →
Spi_Init()
- EcuM →
CanTrcv_Init(ConfigPtr)
- EcuM →
-
CanTrcv初始化动作:
- 读取配置,访问硬件
- 如检测到唤醒事件,调用
EcuM_SetWakeupEvent()
- 通知CanIf初始状态:
CanIf_TrcvModeIndication()
模式转换流程:
-
进入正常通信模式:
- App → ComM → CanSM → CanIf → CanTrcv
CanTrcv_SetOpMode(CANTRCV_TRCVMODE_NORMAL)
- 设置硬件,完成后通知:
CanIf_TrcvModeIndication()
-
进入低功耗模式:
- App → ComM → CanSM → CanIf → CanTrcv
- 先切换到待机:
CanTrcv_SetOpMode(CANTRCV_TRCVMODE_STANDBY)
- 再切换到睡眠:
CanTrcv_SetOpMode(CANTRCV_TRCVMODE_SLEEP)
- 每次切换完成后通知:
CanIf_TrcvModeIndication()
唤醒场景(POLLING模式):
-
周期性检查唤醒:
CanTrcv_MainFunction()
定期执行- 读取唤醒标志状态
-
唤醒处理流程:
- 检测到唤醒→
CanTrcv_CheckWakeup()
→EcuM_SetWakeupEvent()
- EcuM→ComM→CanSM→CanIf→CanTrcv
- 切换回正常模式:
CanTrcv_SetOpMode(CANTRCV_TRCVMODE_NORMAL)
- 检测到唤醒→
部分网络(选择性唤醒)场景:
-
启用部分网络功能:
- CanSM→CanIf→
CanTrcv_SetPNActivationState(PN_ENABLED)
- 配置唤醒帧ID和数据掩码
- CanSM→CanIf→
-
选择性唤醒处理:
- 收发器接收到匹配的唤醒帧
- 设置唤醒标志→
CanTrcv.CheckWakeFlag()
→CanIf_CheckTrcvWakeFlagIndication()
- CanIf→
CanTrcv_ClearTrcvWufFlag()
→CanIf_ClearTrcvWufFlagIndication()
关键交互特点:
- 层级化通知机制:状态变化层层通知,确保系统协调一致
- 回调函数广泛应用:使用回调实现异步通知
- 严格的状态转换顺序:确保硬件状态安全可靠转换
5. 总结
5.1 模块价值
AUTOSAR CanTrcv驱动通过硬件抽象和标准化接口,实现了车辆电子系统中的高效功耗管理和可靠通信控制。作为MCAL层关键组件,它解决了CAN物理层与软件层的桥接问题,为整车电子架构提供了坚实基础。
5.2 应用场景
- 汽车网络系统:管理CAN物理层,确保ECU间可靠通信
- 功耗管理系统:优化车辆不同运行状态下的能源利用
- 选择性唤醒:支持部分网络激活,实现精确功能域控制
- 诊断与监控:提供总线状态监控和故障管理能力
5.3 设计亮点
- 模块化设计:清晰的接口定义和严格的层次结构
- 全面的功耗控制:支持正常、待机和睡眠多级功耗状态
- 灵活配置系统:适应多种收发器硬件和应用需求
- 完善的错误处理:三级错误分类和处理机制
- 精确的状态管理:确保可预测的模式转换和系统行为