can总线技术入门?

如题所述

大家好,我是小麦,最近在调试一个CAN总线的设备遇到一些问题,简单总结一下。本文会对CAN总线进行简单介绍,CAN的硬件链路层,协议层,以及调试的一些心得。

什么是CAN总线?
Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的串行总线标准,最早的CAN控制芯片在奔驰车上应用并量产,因为支持多主机,多从机的优点,所以一辆车所有控制器,传感器,电子设备直接的通信只需要两条线就够了,大大优化了整车的布线。

随着技术的不断发展,CAN发布了相应的标准,国际化标准组织,公布了CAN的不同标准;

物理层差分信号
这里我们介绍一下物理层,什么是物理层呢?就是CAN的电信号的传输过程。CAN是串行异步通讯,只有CAN_HIGH和CAN_LOW两条差分信号线,数据通过差分信号的方式进行通讯,其优点就是可以增加信号的抗干扰能力,抑制共模信号的干扰;

具体如下图所示;

所以,信号在变成一个字节一个字节的数字信号之前,就是按照这种差分形式的模拟信号来传输的。

我们可以简单地理解一下,当CAN_HIGH减去CAN_LOW大于某个阈值的时候,可以把它当做逻辑高,反之,当小于某一个阈值时,就变成逻辑低。

下面我们再来看看CAN总线设备之间是如何连接的。

连接方式
CAN总线支持多个节点挂载在总线上,比较类似I2C总线,可以在SCL和SDA上挂载多个从机,具体如下图所示;

不过CAN总线其实没有主从的概念,每个设备都是一个节点(Node),节点直接可以相互通讯,相较于I2C总线,CAN总线设置了终端电阻,常见的一种闭环连接模式,相对的还有开环的连接模式。

不同的连接模式,他们的通讯速率也大不相同,这里也就是高速CAN和低速CAN的区别。

两条电线组成一条双绞线,并且接有120Ω的特性阻抗。ISO 11898-2,也称为高速度CAN。它在总线的两端均接有120Ω电阻。使用了120Ω终端电阻(这是CAN的ISO标准里规定的),这种模式的最高通讯速率可以达到1Mbps,下面是传输距离和传输速度的关系;

高速CAN的拓扑结构具体如下所示;

还有一种是低速CAN,或者也叫做容错CAN,低速容错 CAN 总线将通讯的最大带宽从1 Mbps 降低到 125 Kbps,并且不再在总线的起点和终点使用两个终端电阻,而是将电阻分布在每个节点上。具体如下图所示;

由于高速CAN和低速CAN的拓扑结构不同,另外终端电阻的分布也不同,所以CAN_HIGH和CAN_LOW上的电平是不相同的,这里有隐性电平和显性电平。

硬件上的连接基本上都搞清楚了,下面就是如何去实现一个具体的CAN节点。我们来简单地介绍一下。

CAN节点
CAN节点通常分为三个部分;

通常一些单片机内部就集成了相应的CAN控制器外设,比如我们比较常用的单片机——STM32,所以我们常见的结构一般是这样子的。

所以整体的流程是这样的,如下:

那么,对于单片机开发者而言,需要关注的就是最终CAN控制器传输给MCU的数据,如何去配置CAN控制器,以及使用CAN控制进行数据的读取和发送。

既然这样,我们就不得不去了解一下CAN总线的通信原理,如何寻址,上层协议如何规定的。

CAN协议
CAN协议和网络协议比较类似,进行了分层的设计思想;

按照我的理解;

如何寻址?
CAN总线上的每个节点不需要设置节点的地址,而是通过消息的标识符(Identifier)来区别信息。因为CAN总线的消息是广播的(就是大家都可以收到消息),比如总线上有节点A,节点B,节点C,那么节点A发消息,节点B和节点C都会收到消息;

节点B 和 节点C 会根据消息中的标识符,以及B和C中的消息过滤规则进行比较,如果不满足规则,就不接受这条信息。

这里需要注意的是:

在这里我们已经了解如何寻址,下面就看一下消息帧了。

帧类型
CAN有4种帧类型:

这里我们有必要重点了解一下数据帧,下面继续介绍各种帧之间的区别。

数据帧
数据帧分为标准帧和扩展帧两种格式;

数据帧的结构具体如下所示;

简单介绍一下数据帧的细节;

远程帧
一般地,数据是由发送单元主动向总线上发送的,但也存在接收单元主动向发送单元请求数据的情况。远程帧的作用就在于此,它是接收单元向发送单元请求发送数据的帧。远程帧与数据帧的帧结构类似,如上图X所示。远程帧与数据帧的帧结构区别有两点:

远程帧的DLC 块表示请求发送单元发送的数据长度(Byte)。当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 RTR 位是显性的,数据帧将在仲裁中赢得总线控制权。

错误帧
用于在接收和发送消息时检测出错误时,通知错误的帧。错误帧由错误标志和错误界定符构成。错误帧的帧结构如图11示。

过载帧
过载帧是用于接收单元通知发送单元它尚未完成接收准备的帧。在两种情况下,节点会发送过载帧:

每个节点最多连续发送两条过载帧。过载帧由过载标志和过载界定符(8 个隐性位)构成。数据帧的帧结构如图12所示。

这里基本把帧介绍完了,但是每个节点之间的通讯,我们如何知道这一帧开始接收了,这一帧已经接收结束了呢?下面就需要了解一下消息的时序和消息同步的方法。

消息时序以及同步位时序
在讲CAN消息时序和同步之前,我们可以对照一下UART串口的传输协议,他有起始位和停止位,然后大家都规定使用相同的通讯速率(波特率);

其实CAN通讯也是类似的方式,它属于异步通讯,没有时钟信号线,所以所有节点之间要约定好使用相同的波特率来传输数据。

在总线空闲一段时间后,在(起始位) 进行硬同步,同步方式是将每一位划分成多个称为量子的时间段(time quanta),并分配一定数量的量子到位中的四个阶段完成的。

这四个阶段分别为:

具体如下图所示;

波特率
如何计算波特率,需要知道每个量子时间的长度(time quanta),以及每一位需要多少个量子时间,

假设这里time quanta = 1us ,并且1 bit = 8 tq,那么上图中的波特率就应该是:

[公式]

消息过滤器
前面有提到消息在CAN总线上是广播式的,但并不是所有节点都会对总线上所有消息感兴趣。节点通过控制器中过滤码(Filter Code )和掩码(Mask Code),再检验总线上消息的标识符,来判断是否接收该消息(Message Filtering)。

对于掩码,“1”表示该位与本节点相关,“0”表示该位与本节点不相关。举例如下:

**例1:**仅接收消息标识符为00001567(十六进制)的帧

节点检测消息的标识符的所有位(29位),如果标识符为00001567接收,否则舍弃。

**例2:**接收消息标识符为00001567 到0000156F 的帧

节点检测消息的标识符的高25位,最低的4位则不care。如果标识符最高25位相同则接收,否则舍弃。

**例3:**接收消息标识符为00001560 到 00001567 的帧

节点检测消息的标识符的高26位,最低的3位则不care。如果标识符最高26位相同则接收,否则舍弃。

**例4:**接收所有消息帧帧

节点接收总线上所有消息。

如何配置?
上面介绍了帧类型,那么如何基于MCU进行配置呢?这里以STM32F407为硬件平台,使用HAL库进行初始化,看一下都对哪些地方进行了配置。一般来说,我们需要配置CAN的波特率,消息过滤器等等,下面是简单的配置的代码;

下面是CAN发送的函数,我们需要自己构建相应的消息帧格式,通常需要设置消息帧的ID格式,消息长度,具体如下;

上述代码设置发送消息:

整体可以参考前面介绍的消息帧格式,篇幅有限,这里就先简单的介绍一下。

总结
本文对CAN总结进行了简单的介绍,CAN通讯的特点可以总结如下;

参考
本文很多是基于个人在项目中学习和总结的经验,所以文中难免存在错误和不足,请各位不吝赐教,及时指出,如果文章帮到了你,请帮忙点个赞,点个在看吧。欢迎关注 @小麦大叔
温馨提示:内容为网友见解,仅供参考
无其他回答

can总线技术入门?
CAN总线支持多个节点挂载在总线上,比较类似I2C总线,可以在SCL和SDA上挂载多个从机,具体如下图所示;不过CAN总线其实没有主从的概念,每个设备都是一个节点(Node),节点直接可以相互通讯,相较于I2C总线,CAN总线设置了终端电阻,常见的一种闭环连接模式,相对的还有开环的连接模式。不同的连接模式,他们的通讯速率也大不相...

CAN总线基础
CAN总线网络主要挂在CAN_H和CAN_L线,通过这两条线实现信号的串行差分传输。CAN收发器负责逻辑电平和物理信号之间的转换,将逻辑信号转换成物理信号(差分电平),或者将物理信号转换成逻辑电平。为了避免信号的反射和干扰,需要在CAN_H和CAN_L之间接上不同阻值的终端电阻,这取决于电缆的特性阻抗。CAN标...

CAN总线轻松入门与实践内容简介
本书《CAN总线轻松入门与实践》以51单片机为讲解对象,理论与实践并重,逐步解析CAN总线系统。从第1章至第3章,深入讲解CAN总线底层协议规范、应用层协议,以及控制器和驱动器,为系统设计提供坚实基础。接下来的第4章至第9章,重点讲解硬件设计与程序设计,帮助学习者熟悉硬件资源,同时,通过自发收、两点...

CAN总线基础知识
总的来说,CAN总线凭借其高效、灵活的特性,已深深嵌入现代工业和汽车系统。深入理解其原理和规范,对于工程实践和故障诊断至关重要。后续的学习资料如CAN学习模块和相关标准,将帮助我们进一步探索这一技术的深度与广度。参考资料:1. CAN总线基础入门教程2. 深入解析汽车CAN网络架构3. CAN通信原理与实践4...

CAN总线轻松入门与实践书籍目录
接着,深入解读CAN总线的性质与特点,从总线的定义、传输介质、拓扑结构与设备组成等方面进行详细描述。章节还覆盖了报文传输的关键要素,包括帧类型、帧格式、帧优先级仲裁机制,以及报文的滤波与校验技术,以及编码方式中的位填充原理。错误处理与故障界定部分则着重介绍了错误类型识别、节点错误处理方法,...

请问can总线入门知识都有哪些呢?
说到CAN总线的入门知识,那也真的不是一句两句能够说得完的,因为太多了,这需要你去具体查阅各种和CAN总线相关的文字资料来明白了。不过,如果你想要正常使用CAN总线相关设备的话,有三点基础知识一定要明白:1、CAN高连CAN高,CAN低连CAN低。2、总线最远两端连上120欧姆电阻,如果设备直接有,那就不...

我想问下进行can总线入门学习,都应该至少了解哪些信息呢?
CAN总线是目前大多数汽车的标准通讯总线,此外还被应用在有轨电车控制,消防主机联网等若干个领域里,具有广阔的发展前景。如果您想学习CAN总线知识,那么需要购买专门的书籍进行系统的学习。但如果您只是想要使用一些CAN总线分析仪等工具的话,掌握一些CAN入门知识即可,比如说在CAN总线最远的两个节点之间安装...

初学CAN总线,从哪里入手才好呢?
CAN总线的入门书通常会介绍一个CAN帧的组成,还有一些相关的开发例程。而CAN分析仪可以用来连接CAN总线,抓取到正在运行的CAN总线系统中的数据并进行解析,从而加速您的学习进程。购买分析仪时一定要注意,目前采用ARM芯片的高速CAN分析仪通常在260元以上,1百多元的CAN分析仪往往采用老式的USB转串口芯片或没...

CANopen实时总线的基本概念与知识讲解,看完你就明白了
CAN总线全称为Controller AreaNetwork,即控制器局域网,是国际上应用广泛的现场总线之一。它广泛应用于汽车制造、机械制造、包装机械、烟草等行业。CAN总线由德国BOSCH公司于80年代初开发,用于解决现代汽车中众多控制与测试仪器之间的数据交换问题。它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导...

CAN总线轻松入门与实践书籍简介
本书以轻松入门的方式,详细介绍了CAN总线的基本概念、工作原理、应用实例和实践技巧,旨在帮助读者快速掌握CAN总线技术,适用于初学者和有一定基础的读者。书中涵盖了CAN总线的基础知识,如信号传输、帧结构、错误检测与处理等,还介绍了CAN总线在汽车电子、工业自动化、通信系统等领域的应用案例。此外,还...

相似回答
大家正在搜