Android 车载应用开发指南 - CAN Bus 协议详解

一 概述

1.1 背景

汽车工业蓬勃发展,汽车的电子控制单元逐渐增多。各电控单元之间的信号交换导致汽车线束的级数增加,复杂粗大的线束与汽车有限的布线空间之间矛盾越来越突出,繁多的线束导致电气系统可靠性下降,同时增加了重量。

CAN Bus 将汽车内部各电控单元之间连接成一个局域网络,实现了信息的共享,大大减少了汽车的线束,如下图所示:

4f1a97df8cc9361b8fbcf7821a3cf749.jpeg

5b9563f0d8227192d44fb00e453764f6.jpeg

CAN Bus 可以满足子系统数据传输的需求,可以实现汽车内互联系统由传统的点对点互联向总线式系统的进化,大大降低汽车内电子系统布线的复杂度

1.2 什么是 CAN Bus

CAN(Control Area Network)Bus ,控制器局域网总线,是一种串行通信协议,能够让设备之间可靠而高效地传输数据。它广泛应用于车辆领域,像神经系统一样连接车辆内部的各个电子控制单元。

CAN Bus 最初由德国跨国工程技术巨头博世公司(Robert Bosch )为汽车应用而设计。它是一种多主、多从、半双工、具有容错能力的协议,非常适合汽车领域的需求。它简单、低成本、可靠,能够在恶劣的环境中工作CAN Bus 为车辆中所有电子控制单元提供了一个统一的接入点,方便进行连接和诊断。

1.3 CAN Bus 发展简史

CAN Bus 由博世在 20 世纪 80 年代初开发,旨在为汽车应用提供一种高效的通信系统,主要目的是简化车辆内部线束的复杂程度。

1986 年,博世发布了首个 CAN 协议,由于其可靠性健壮性,很快受到了汽车制造商的青睐。1993 年,它成为 ISO-11898 国际标准。该协议演进过程大致如下:

outside_default.png

  • CAN 之前的版本: 汽车 ECU 是复杂的点对点布线

  • 1986 年: 博世开发了 CAN 协议作为解决方案

  • 1991 年: 博世发布了 CAN 2.0(CAN 2.0A:11 位,2.0B:29 位)

  • 1993 年: CAN 被采用为国际标准(ISO 11898)

  • 2003 年: ISO 11898 成为标准系列

  • 2012 年: 博世发布了 CAN FD 1.0

  • 2015 年: CAN FD 协议标准化(ISO 11898-1)

  • 2016 年: CAN 物理层,数据速率高达 5 Mbit / s,已通过 ISO 11898-2 标准化

outside_default.png

除了汽车领域外,CAN Bus 协议还逐渐应用于其它行业,例如工业自动化系统(CANopen)和船用电子设备(NMEA 2000)。它的广泛应用主要得益于它能够在恶劣的条件下稳定运行,并且实施成本较低。

1.4 CAN Bus 优点

CAN Bus 标准已被广泛接受,几乎用于所有车辆和多种设备。这主要由于其具备以下多种优点:

95d63eaaeb6191663a6df7c0e98c4e88.jpeg

  • 简单且低成本:ECU 通过单个 CAN 系统进行通信,而不是直接的复杂模拟信号线通信,这样减少了错误,重量,接线和成本

  • 完全集中:CAN 总线提供了“一个进入点”,可以与所有网络 ECU 进行通信——支持集中诊断,数据记录和配置

  • 极其稳健:CAN 总线具有强大的抗电干扰和抗电磁干扰能力,非常适合对安全要求严格的应用(例如车辆)

  • 非常高效:CAN 帧按 ID 号划分优先级。最优先的数据可以立即访问总线,而不会造成其他帧的中断

当需要对复杂系统进行分布式控制时,CAN 是一种理想的协议。它减少了繁重的布线,从而降低了成本和重量。芯片的成本较低,并且由于协议设计简洁,实现 CAN 相对容易。

二 CAN Bus 工作原理

2.1 物理连接及协议工作原理

34fabc2e964e6599f958eac340c6529d.jpeg

CAN Bus 是一种分布式的通信协议。它的分布式特点使它非常适合对可靠性实时性有较高要求的应用,如汽车和工业系统。

在 CAN 网络中,所有的节点都通过双绞线或光纤相连。每个节点都有自己的微控制器,负责处理收到的消息和发送的消息。数据由节点在共享总线上广播,所有其它节点都能收到。通信过程的几个关键阶段包括:

  1. 仲裁: 为了避免多个节点同时发送数据产生冲突,CAN 采用了一种基于消息优先级的仲裁过程。消息的标识符值越小,优先级越高

  2. 错误检测: 内置的错误检测机制保证了 CAN 网络中数据的完整性。这些机制包括循环冗余校验(CRC)、帧校验序列(FCS)以及接收节点确认位

  3. 故障界定: 如果节点在传输过程中检测到错误或故障,它会进入“被动错误”状态,直到问题解决。这种机制可以防止故障对整个系统功能造成干扰

这些特性相互配合,使得 CAN Bus 能够高效运行,确保车辆或工厂自动化设备等复杂系统中各个组件之间的可靠通信。

2.2 消息结构

在 CAN Bus 系统中,消息结构对于设备间的高效通信非常重要。CAN 总线的通信是通过 CAN 报文完成的。

消息长度有两种变体:标准长度扩展长度

下图是带有 11 位标识符(CAN ID)的标准帧(CAN 2.0A),这是大多数汽车中使用的类型。

扩展的 29 位标识符(CAN ID)报文(CAN 2.0B)除了更长的 ID 外,其它部分都是相同的。它主要在重型车辆的 J1939 协议 中使用。

outside_default.png

CAN Bus 的 8 个报文字段
FIELDBITSDESCRIPTION
SOF1帧开始是“显性 0”,告诉其他节点 CAN 节点打算进行通信
ID11ID 是帧标识符 – 较低的值具有较高的优先级
RTR1远程传输请求指示节点是否发送数据或向另一个节点请求专用数据
Control6控制包含标识符扩展位 (IDE),它是 11 位的“显性 0”。它还包含 4 位数据长度代码 (DLC),指定要传输的数据字节的长度(0 到 8 个字节)
Data0 - 64数据包含数据字节,也称为有效负载,其中包括可以提取和解码信息的 CAN 信号
CRC16循环冗余校验用于确保数据完整性
ACK2ACK 槽指示节点是否已确认并正确接收数据
EOF7EOF 标记 CAN 帧的结束

仲裁字段包含消息标识号和远程传输请求位。越重要的消息具有越低的 ID 号。

如果多个节点同时传输,它们会启动同时仲裁。具有最低消息 ID 号的节点获得优先权。

显性位会覆盖 CAN 总线上的隐性位。消息标识符的长度可以是 11 位 (标准 CAN,2048 个不同的消息标识符)或 29 位(扩展 CAN,5.37 亿个不同的消息标识符)。远程传输请求位占主导地位,表示正在传输数据。

在大多数系统中,逻辑 1 代表高电平,逻辑 0 代表低电平。但在 CAN 总线上则相反。因此,CAN 收发器通常在驱动器输入和接收器输出上使用上拉电阻,以便设备默认为隐性总线状态。

2.3 CAN Bus 的种类

ISO 11898 标准 定义 了 CAN 的多个版本。汽车行业使用的主要 CAN 类型有:

低速 CAN

低速 CAN,也叫做容错 CAN 或 ISO 11898-3,最高传输速度为 125 kbps。它适用于像车身控制模块、门锁、窗户控制等不太重要的系统,这些系统对数据传输速度的要求不高。它的主要特点是即使总线中的一根线断了,也能继续正常工作。

高速 CAN

高速 CAN,或 ISO 11898-2,传输速度最高可达 1 Mbps。通常用于需要高更新率和高数据准确性的关键子系统之间的通信(例如防抱死制动系统、电子稳定控制、安全气囊、发动机控制单元等)。高速 CAN 比低速更快,但是,它没有低速网络的容错能力。

CAN FD

CAN FD 由博世在 2012 年推出,是高速网络的扩展版,具有更高的数据传输速度,最高可达 8 Mbps,同时向后兼容现有高速设备。这项技术的主要优势在于它比传统的 CAN 能更有效地传输更大的载荷,使其非常适合现代车辆日益复杂的电子系统。

000aff3d00984b29ff7d35fd3007c6bc.jpeg

CAN FD 还向后兼容,支持 CAN 2.0 通信协议以及 SAE J1939 等特殊协议,其中 CAN 输出用作只读。CAN FD 本质上是 ISO 11898-1 中指定的原始 CAN 标准的扩展,并且与经典 CAN 系统完全兼容。

CAN FD 是向前迈出的重要一步,因为它允许 ECU 动态改变其传输速率并根据实时要求选择更大或更小的消息大小。它现在已出现在高性能车辆中,但随着 ECU 性能的提高和 CAN FD 硬件成本的下降,CAN FD 进入几乎所有车辆只是时间问题。

三 CAN 在车载开发中的应用

3.1 车载中的总线协议

目前汽车上普遍采用的汽车总线有局部互联协议 LIN控制器局域网 CAN,正在发展中的汽车总线技术还有高速容错网络协议 FlexRay、用于汽车多媒体和导航的 MOST 以及与计算机网络兼容的蓝牙、无线局域网等无线网络技术。


LINCANCAN FDFLEXRAYMOSTETHERNET
Speed10-20 kbps1 Mbps8 Mbps10 Mbps150 Mbps (shared)100 Mbps (per node)
Data size8 B8B64 B254 B370 B1500 B
CablingSingle wireUTP*UTPUTPUTP or fiber opticUT
TopologyBusBusBus / passive starBus / Star / MixedRingStar / Tree / Ring
Where UsedSensors, Actuators (lights, mirrors, etc.)Backbone, Body, Chassis, PowertrainBody, Powertrain, Distributed Control, ChassisHigh-performance powertrain, Backbone, Drive-by-wire, ChassisInformation & Entertainment SystemsDiagnostics, ECU Programming, Information & Entertainment
Error Detection8-bit CRC15-bit CRC17 or 21-bit CRC24-bit CRCCRC32-bit CRC
RedundancyN/AN/AN/AYesYesN/A
DeterminismN/AN/AN/AYesYesNot inherent
Cost$$$$$$$$$$$$$

Notes: * UTP = unshielded twisted pair(非屏蔽双绞线)

与任何联网和互操作系统一样,汽车总线的选择最好以需求为导向,同时关注成本和预期的行业要求和趋势。显然,如果有更好的总线可供选择,而且部署成本相当或更低,那么汽车制造商就不会在新设计中采用旧总线。

3.2 CAN Bus 在车载开发中的应用

作为 Android 应用开发你可能会问:CAN Bus 属于底层的东西,我们掌握了能有什么用?

其实,CAN 报文与应用开发也息息相关,学习并掌握 CAN Bus 协议是必要的! 以下就举例一个车载空调应用开发的场景,解释为什么应用开发也需要掌握 CAN Bus。

熟悉手机应用开发的同学都知道,在代码开发完成后需要进行实机调试,而调试环境其实搭建起来很简单,基本只需要有对应 Android 版本的工程机就可以在自己的工位前模拟调试大部分场景。如果你连实机都没有!用 Android 模拟器也能覆盖大部分调试场景。

但是,对于车载应用开发而言,想在实车上的车载系统调试其实是很奢侈的事。因为实车资源少,所以大部分时候只能在自己工位旁的模拟车载系统上开发调试。而模拟车载系统通常只有主机显示屏等外设,汽车上的传感器、天线等各种 ECU 是不具备的。

那么对于车载空调应用开发,其环境温度、出风口角度、出风速度等变量都无法动态反馈到车载系统中,进而影响调试。这时候就轮到 CAN Bus 出场了。可以通过 CAN 分析仪连接车载系统主机,使用 ZCANPRO 等信号模拟软件 读取上行 CAN 信号或者模拟发出下行信号。只有对 CAN 信号中的帧结构熟悉,才能读懂和模拟收发信号。

e1452ee4359d23629945966f9341f566.jpeg

6998bf3ef051835e63824652abd19746.jpeg

VHAL 通过 CAN 总线或其他车辆专用总线系统与车辆 ECU 建立通信。这些专用互连网络充当车辆内组件通信的骨干网。为了检索车辆数据(例如速度),车载信息娱乐 (IVI) ECU 与其他 ECU 交互,并且车辆 HAL 精心地将提取的信息存储为车辆属性。Android 框架将数据传输协议和网络选择(包括车载网络)留给 VHAL 的实现。这种灵活性不仅允许 CAN 总线集成,还允许连接到本地互连网络 (LIN) 等内部网络和未来的车载通信标准。

作者:话唠扇贝
链接:https://juejin.cn/post/7369470562144305162

关注我获取更多知识或者投稿

bbb4b6e4c6cb056b5f7b930323941d41.jpeg

76f765967ab5ae5e66ea49b5e9ce5b55.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能硬件开发指南---基于yocto project pdf下载,是一本指导智能硬件开发的电子书,提供了基于yocto project的开发方法和步骤。该书主要包括以下几个方面的内容。 首先,该指南介绍了yocto project的基本概念和原理。yocto project是一个开源项目,旨在为嵌入式Linux系统的构建提供一个开放、灵活和可定制的开发平台。它提供了一套工具链和脚本,可以自动化构建和定制Linux操作系统。 其次,该指南详细介绍了基于yocto project的硬件开发流程。它包括了从准备阶段到部署阶段的各个环节,如环境搭建、配置系统、选择和集成驱动、编译和调试等。通过遵循这些步骤,开发人员可以高效地完成硬件开发工作。 此外,该指南还提供了一些实用的开发技巧和经验分享。比如,如何有效管理软件包依赖关系、如何优化系统性能、如何进行远程调试等。这些技巧和经验对于提高开发效率和减少开发风险非常有帮助。 最后,该指南给出了一些实际案例和示例项目,供开发人员参考和借鉴。这些案例涵盖了各种不同的硬件平台和应用场景,包括工业控制、智能家居、车载娱乐等。通过学习这些案例,开发人员可以更好地理解和应用yocto project。 总之,智能硬件开发指南---基于yocto project pdf下载是一本非常实用的指导书,对于从事智能硬件开发的人员来说具有很高的参考价值。无论是初学者还是有经验的开发人员,都可以通过学习这本指南提高自己的开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值