前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux应用程序开发之CAN编程

Linux应用程序开发之CAN编程

原创
作者头像
韦东山
修改于 2020-06-30 02:00:53
修改于 2020-06-30 02:00:53
3.4K0
举报
文章被收录于专栏:韦东山嵌入式韦东山嵌入式

14.1  CAN介绍

14.1.1  CAN是什么?

CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。

最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。

一个由 CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件 的电气特性所限制。例如,当使用 Philips P82C250 作为CAN收发器时,同一网络中允许挂接110个节点。

CAN可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。

14.1.2 CAN的起源

CAN最初出现在 80 年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,由于消费者对于汽车功能的要求越来越多,而这些功能的实现大多是基于电子操作的,这就使得电子装置之间的通讯越来越复杂同时意味着需要更多的连接信号线。

提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。

1993 年,CAN已成为国际标准ISO11898(高速应用)和 ISO11519(低速应用)。 CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。

当信号传输距离达到 10Km 时,CAN 仍可提供高达 50Kbit/s 的数据传输速率。由于 CAN 总线具有很高的实时性能,因此,CAN 已经在汽车工业、航空工业、工业控制、安全防护等领 域中得到了广泛应用。

14.1.3 CAN传输模型

CAN 通讯协议主要描述设备之间的信息传递方式。CAN 层的定义与开放系统互连模型(OSI)一致。每 一层与另一设备上相同的那一层通讯。实际的通讯发生在每一设备上相邻的两层,而设备只通过模型物理层的物理介质互连。

CAN 的规范定义了模型的最下面两层:数据链路层和物理层。下表中展示了 OSI 开放 式互连模型的各层。应用层协议可以由 CAN 用户定义成适合特别工业领域的任何方案。已在工业控制和制造业领域得到广泛应用的标准是 DeviceNet,这是为 PLC 和智能传感器设计的。在汽车工业,许多制造商都应用他们自己的标准。

虽然CAN传输协议参考了OSI 七层模型,但是实际上CAN协议只定义了两层“物理层”和“数据链路层”,因此出现了各种不同的“应用层”协议,比如用在自动化技术的现场总线标准DeviceNet,用于工业控制的CanOpen,用于乘用车的诊断协议OBD、UDS(统一诊断服务,ISO14229),用于商用车的CAN总线协议SAEJ1939。

14.1.4 CAN网络拓扑

CAN总线是一种分布式的控制总线。CAN总线作为一种控制器局域网,和普通以太网一样,它的网络很多CAN节点构成。其网络拓扑结构如下图所示:

CAN网络的每个节点非常简单,均由一个MCU(微控制器)、一个CAN控制器和一个CAN收发器构成,然后使用双绞线连接到CAN网络中。

14.1.5 CAN物理特性

CAN总线遵循国际标准ISO11898,如ISO11898-1,ISO11898-2,ISO11898-3,ISO11898-4标准。

CAN 能够使用多种物理介质,例如双绞线、光纤等。最常用的就是双绞线。信号使用差分电压传送,两条信号线被称为“CAN_H”和“CAN_L”。静态时CAN_H和CAN_L均是 2.5V 左右,此时状态表示为逻辑“1”,也可以叫做 “隐性”。用 CAN_H 比 CAN_L 高表示逻辑“0”,称为“显形”,此时,通常电压值为:CAN_H = 3.5V 和 CAN_L = 1.5V 。

目前实际常用的CAN收发器有如下几种型号:

目前实际常用的CAN控制器有如下几种型号:

14.1.6 CAN报文帧

14.1.6.1 CAN报文格式

标准 CAN 的标志符长度是 11 位,而扩展格式 CAN 的标志符长度可达 29 位。CAN 协议的 2.0A 版本 规定 CAN 控制器必须有一个 11 位的标志符。同时,在 2.0B 版本中规定,CAN 控制器的标志符长度可以是 11 位或 29 位。遵循 CAN2.0B 协议的 CAN 控制器可以发送和接收 11 位标识符的标准格式报文或 29 位标识符的扩展格式报文。标准帧&扩展帧对比:

14.1.6.2 CAN报文帧类型

CAN报文类型又分如5种帧类型:数据帧:主要用于发送方向接收方传输数据的帧;遥控帧:主要用于接收方向具有相同ID的发送方请求数据的帧;错误帧:主要用于当检测出错误时向其他节点通知错误的帧。过载帧:主要用于接收方通知其他尚未做好接收准备的帧。间隔帧:主要用于将数据帧及遥控帧与前一帧分隔开来的帧。

其中数据帧是使用最多的帧类型,这里重点介绍以下数据帧。数据帧如下图所示:

由上图所示,数据帧包括:

(1)帧起始。表示数据帧开始的段。

(2)仲裁段。表示该帧优先级的段。

(3)控制段。表示数据的字节数及保留位的段。

(4)数据段。数据的内容,一帧可发送0~8个字节的数据。

(5)CRC段。检查帧的传输错误的段。

(6)ACK段。表示确认正常接收的段。

(7)帧结束。表示数据帧结束的段。

具体介绍可以查看”CAN2.0A”、”CAN2.0B”详细介绍。

我们主要关注我们编程所需要关注的几个段:ID:  CAN报文ID;IDE: 为0是标准帧,为1是扩展帧;RTR: 为0是数据帧,为1是远程帧;DLC: CAN报文数据长度,范围0~8字节;Data:数据,0~8个字节;

未完待续...关于CAN,还有很多内容(70多页),剩下内容:

添加微信13923404017,免费获取完整版;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CAN总线传输协议[通俗易懂]
一、控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线、同轴电缆或光纤来传输信号,因其高性能、高可靠性和高实时性等特点,已经成为了世界上应用最广泛的现场总线之一。公元1991年,CAN总线技术规范(CAN Version2.0)制定并发布,该技术规范共包括A和B两部分,称为CAN2.0A和CAN2.0B。其中CAN2.0A给出了CAN报文的标准格式,CAN2.0B给出了标准格式和扩展格式两种。CAN总线最高传输速率可达1Mbps(通信距离最长40m),如果降低传输速率,其直接通信的最远距离可达10km(速率5Kbps以下),其总线上的节点数可达110个。
全栈程序员站长
2022/09/14
4.2K0
CAN总线传输协议[通俗易懂]
详解CAN总线:什么是CAN总线?
在之前的博文中分享过一系列一文搞懂:SPI协议、I2C协议、PID算法、Modbus协议等文章,也考虑过是否可以出一篇介绍CAN总线协议的文章,但是在之后的学习研究中,发觉CAN总线协议比较庞大和复杂,做为刚刚进入汽车电子行业的开发小白,一篇文章难以讲解清晰,所以决定在汽车电子专栏中连载分享关于CAN总线协议的相关知识。
不脱发的程序猿
2022/08/07
5K0
详解CAN总线:什么是CAN总线?
秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4 CAN!
CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下:
全栈程序员站长
2022/09/14
3.8K0
秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4 CAN!
初识CAN与CANOpen及相关内容
我之前学习CANOpen的时候,网上有用的资料极少,走了不少弯路。到目前为止,网上关于CANOpen的资料依然很少。所以,特地写下该系列教程,帮助初学者跨过这道坎。
用户1605515
2019/09/12
1.5K0
CAN信号质量评估的专业解析
CAN总线是一种基于差分信号的通信协议,广泛应用于汽车电子、工业控制和智能交通等领域。
不脱发的程序猿
2025/04/07
1980
CAN信号质量评估的专业解析
CAN现场总线基础知识总结,看这一篇就理清了(CAN是什么,电气属性,CAN通协议等)
原文链接:https://blog.csdn.net/w464960660/article/details/129127589
Winter_world
2023/02/27
3.1K0
CAN现场总线基础知识总结,看这一篇就理清了(CAN是什么,电气属性,CAN通协议等)
CAN协议详解
1、随着车用电气设备增加,对应的电气节点剧增(高档车节点有上千之多),一般的通信协议需要的线束太多。需要减少线束,支持更多节点的协议。
全栈程序员站长
2022/09/14
1.6K0
CAN协议详解
【CAN公开课】对面的猿猿你看过来
这个周末,各位猿友过的怎么样呢?对面的猿猿你CAN过来,CAN过来,这里的内容很精彩,请不要假装不理不睬。今天我们开始来学习CAN总线,今天先来简单介绍下一些基础知识。 1 CAN总线简介 CAN(Controller AreaNetwork)总线最早由BOSCH博世公司开发,控制器局域网(CAN)为串行通讯协议,最早知识应用在汽车电子领域,但随着技术的发展,应用的需要,由于其高性能、高可靠性、及独特的设计,CAN越来越受到人们的重视。 CAN 的应用已经拓展到很多领域,像传动控制,变频器,楼宇控制,农
用户1605515
2018/04/10
8000
【CAN公开课】对面的猿猿你看过来
CAN通信协议(一)
因为工作,需要研究CAN总线。博主的CAN学习参考正点原子和野火的教程。虽然没有买板子,不过对于博主现在来说,感觉开发板都差不多吧!毕竟工作中开发板肯定是不一样的!
全栈程序员站长
2022/07/21
1.7K1
CAN总线技术详解与测试【硬件】
CAN总线在硬件系统中占有一席之地,国际上应用最广泛的现场总线之一,与我们讲过的SPI、UART不同,属于“高端高效”系列。
瓜大三哥
2020/05/29
3.6K0
CAN总线技术详解与测试【硬件】
Linux应用开发【第十三章】CAN编程应用开发
​ CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。
韦东山
2021/12/15
5.8K0
Linux应用开发【第十三章】CAN编程应用开发
CAN知识集合
1.隐性和显性位 显性数值表示逻辑0,隐性数值表示逻辑1 CAN总线为隐性(逻辑1)时,CAN_H和CAN_L的电平都为2.5V(电位差为0V);
心跳包
2020/08/28
5550
CAN通信详解(全)
本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯,并将结果显示在TFTLCD模块上。本章分为如下几个部分:
全栈程序员站长
2022/07/21
4.1K0
CAN通信详解(全)
MCU常见通信总线串讲(五)—— CAN总线协议
首先明确一个概念,关于MCU中通信总线和通信协议,通信总线是一种用于连接各种外设和模块的物理接口,它可以传输数据和控制信息。通信协议则是指在通信总线上传输数据时所遵循的规则和约定,以确保不同设备之间能够正确地交换信息,我们也可以把他叫做通信总线协议。
秋名山码神
2023/11/15
9730
单片机各种通信协议详解
I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
DS小龙哥
2022/01/07
4K0
单片机各种通信协议详解
基于FPGA的CAN总线控制器的设计(上)
今天给大侠带来基于FPGA的CAN总线控制器的设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,CAN 总线协议解析以及 CAN 通信控制器程序基本框架。话不多说,上货。
FPGA技术江湖
2020/12/30
1.2K0
详解CAN总线:高速CAN总线和低速CAN总线的特性
在ISO 11898-2和ISO 11898-3中分别规定了两种CAN总线结构(在BOSCH CAN2.0规范中,并没有关于总线拓扑结构的说明):高速CAN总线和低速CAN总线,区别表如下所示:
不脱发的程序猿
2022/09/21
4.3K0
详解CAN总线:高速CAN总线和低速CAN总线的特性
一文带你了解 CAN 总线
CAN:Controller Area Network,控制局域网络,最早由德国 BOSCH(博世)开发,,目前已经是国际标准(ISO 11898),是当前应用最广泛的现场总线之一。
Jasonangel
2022/05/24
3K0
一文带你了解 CAN 总线
CAN总线(一)
原文出处:http://www.cnblogs.com/jacklu/p/4729638.html
用户7043923
2020/03/12
1K0
CAN总线协议
  CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在北美和西欧,CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。
全栈程序员站长
2022/09/14
4.7K0
CAN总线协议
相关推荐
CAN总线传输协议[通俗易懂]
更多 >
LV.1
深圳百问网科技有限公司技术总监
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档