AUTOSAR CAN通信介绍

本文介绍了AUTOSAR中CAN通信的网络架构、硬件组成、协议栈层级结构,详细讲解了CAN Transceiver Driver、CAN Driver和CAN Interface的功能,包括CAN通信的错误检测、唤醒方案及重要API。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

在AUTOSAR的分层和模块化架构中,使用PduR(Protocal Data Unit Router)将总线或者网络数据进行抽象,使得上层应用不用关心信号的来源。本文从PduR下层的CAN Interface、CAN Driver和CAN Transceiver Driver模块介绍CAN总线在AUTOSAR架构中的工作机制以及信号的收发等功能。PduR以及COM等上层模块的介绍可以参考公众号内发布的历史文章。

CAN通信网络架构

在车辆中,CAN通信是一种基于信号的通信。如下图参考的车辆E/E架构,多个域总线,比如车身CAN、动力CAN等连接在中央网关上,网关负责路由不用总线的数据,实现不同总线上节点ECU的数据交互。信号的发送一般是基于事件和周期的属性,常见的周期有20ms,50ms,100ms,200ms等,发送方ECU在信号更新或者改变时发送信号,而不关心其他接收方ECU是否需要该信号。CAN信号的发送是采用广播形式,也就是说同一总线上,一个节点发送的报文都会被其他节点接收到,类似于在一个教室里,一个同学发言,其他同学都可以听到。如下图,在车身CAN这条总线上,当车门ECU发送一条车门打开的消息时,灯光、空调、座椅以及网关这些节点都可以收到该消息。同一总线上不允许多个ECU节点发送相同CAN ID的消息,这样会导致总线冲突。当多个节点同时发送数据时,会进行优先级仲裁,CAN ID小的优先级高。

### 关于 AUTOSAR CanIf 的规范和实现细节 #### CAN 接口 (CanIf) 功能概述 CAN接口(CanIf)作为AUTOSAR通信栈的一部分,负责管理上层协议与底层驱动之间的交互。CanIf提供了标准化的应用程序编程接口(API),使得高层网络协议能够通过统一的方式访问不同的硬件控制器。 #### 不变内存支持的特性 不变内存可以由多种存储介质构成,如程序闪存、程序SRAM、锁定缓存和ROM[^1]。这些不同类型的存储器可能影响到CanIf模块配置参数的位置及其加载方式。 #### 可选子功能依赖条件 某些特定的功能选项仅当属性`CanIfPublicPnSupport`被激活时才可利用[^2]。这表明对于部分高级特性的启用与否取决于具体的项目需求及ECU资源分配情况。 #### 数据传输路径管理实例 在一个具有单物理以太网通道并划分成两个VLAN以及三个局部网络集群(ECUs内部逻辑分区)的例子中展示了如何管理和分组路由路径[^3]。虽然此描述针对的是更广泛的车载网络架构设计原则,但对于理解CanIf怎样与其他组件协作来处理复杂的拓扑结构同样重要。 #### 配置容器说明 该容器包含了AUTOSAR CanTp(Transport Layer over CAN)模块的所有配置参数及相关子容器定义[^4]。尽管这里提到的具体内容是关于运输层而非直接涉及CanIf本身,但两者紧密相连;因此了解这类关联设置有助于全面掌握整个通讯体系的工作机制。 #### 实现注意事项 考虑到汽车电子控制系统中的实时性和可靠性要求,在开发过程中应当特别注意避免由于调度算法不当引起的问题,比如曾经发生在火星探路者号上的优先级反转现象[^5]。为了确保稳定运行,建议遵循最佳实践指南来进行CanIf的设计与编码工作。 ```c // 示例代码片段展示了一个简单的CanIf初始化函数 void CanIf_Init(const CanIf_ConfigType* ConfigPtr){ // 初始化过程... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

钢琴上的汽车软件

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值