首页 » 智能 » CAN协议详解-01_暗记_旗子

CAN协议详解-01_暗记_旗子

少女玫瑰心 2025-01-17 20:26:03 0

扫一扫用手机浏览

文章目录 [+]

CAN 总线协议已经成为汽车打算机掌握系统和嵌入式工业掌握局域网的标准总线,并且拥有以CAN 为底层协议专为大型货车和重工机器车辆设计的 J1939 协议。
近年来,它具有的高可靠性和良好的缺点检测能力受到重视,被广泛运用于汽车打算机掌握系统和环境温度恶劣、电磁辐射强及振动大的工业环境。

我们来贴图一个车载网络构想图

CAN协议详解-01_暗记_旗子 CAN协议详解-01_暗记_旗子 智能

1.2 CAN 物理层

CAN协议详解-01_暗记_旗子 CAN协议详解-01_暗记_旗子 智能
(图片来自网络侵删)

与 I2C、SPI 等具有时钟旗子暗记的同步通讯办法不同,CAN 通讯并不因此时钟旗子暗记来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条旗子暗记线,共同构成一组差分旗子暗记线,以差分旗子暗记的形式进行通讯。
我们来看一个示意图

1.2.1 闭环总线网络

CAN 物理层的形式紧张有两种,图中的 CAN 通讯网络是一种遵照 ISO11898 标准的高速、短间隔“闭环网络”,它的总线最大长度为 40m,通信速率最高为 1Mbps,总线的两端各哀求有一个“120 欧”的电阻。

1.2.2 开环总线网络

图中的是遵照 ISO11519-2 标准的低速、远间隔“开环网络”,它的最大传输间隔为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,哀求每根总线上各串联有一个“2.2千欧”的电阻。

1.2.3 通讯节点

从 CAN 通讯网络图可理解到,CAN 总线上可以挂载多个通讯节点,节点之间的旗子暗记经由总线传输,实现节点间通讯。
由于 CAN 通讯协议不对节点进行地址编码,而是对数据内容进行编码的,以是网络中的节点个数理论上不受限定,只要总线的负载足够即可,可以通过中继器增强负载。

CAN 通讯节点由一个 CAN 掌握器及 CAN 收发器组成,掌握器与收发器之间通过 CAN_Tx 及CAN_Rx 旗子暗记线相连,收发器与 CAN 总线之间利用 CAN_High 及 CAN_Low 旗子暗记线相连。
个中CAN_Tx 及 CAN_Rx 利用普通的类似 TTL 逻辑旗子暗记,而 CAN_High 及 CAN_Low 是一对差分旗子暗记线,利用比较特殊的差分旗子暗记,下一小节再详细解释。

当 CAN 节点须要发送数据时,掌握器把要发送的二进制编码通过 CAN_Tx 线发送到收发器,然后由收发器把这个普通的逻辑电平旗子暗记转化成差分旗子暗记,通过差分线 CAN_High 和 CAN_Low 线输出到 CAN 总线网络。
而通过收发器吸收总线上的数据到掌握器时,则是相反的过程,收发器把总线上收到的 CAN_High 及 CAN_Low 旗子暗记转化成普通的逻辑电平旗子暗记,通过 CAN_Rx 输出到掌握器中。

例如,STM32 的 CAN 片上外设便是通讯节点中的掌握器,为了构成完全的节点,还要给它外接一个收发器,在我们实验板中利用型号为 TJA1050 的芯片作为 CAN 收发器。
CAN 掌握器与 CAN收发器的关系犹如 TTL 串口与 MAX3232 电平转换芯片的关系, MAX3232 芯片把 TTL 电平的串口旗子暗记转换成 RS-232 电平的串口旗子暗记,CAN 收发器的浸染则是把 CAN 掌握器的 TTL 电平旗子暗记转换成差分旗子暗记 (或者相反) 。

目前有以下CAN电平转换芯片(不全)

我们来用TJA1050来看下事理图:

1.2.4 差分旗子暗记

差分旗子暗记又称差模旗子暗记,与传统利用单根旗子暗记线电压表示逻辑的办法有差异,利用差分旗子暗记传输时,须要两根旗子暗记线,这两个旗子暗记线的振幅相等,相位相反,通过两根旗子暗记线的电压差值来表示

逻辑 0 和逻辑 1。
见图,它利用了 V+ 与 V-旗子暗记的差值表达出了图下方的旗子暗记。

相对付单旗子暗记线传输的办法,利用差分旗子暗记传输具有如下优点:

• 抗滋扰能力强,当外界存在噪声滋扰时,险些会同时耦合到两条旗子暗记线上,而吸收端只关心两个旗子暗记的差值,以是外界的共模噪声可以被完备抵消。

举一个例子,正常的单线假设逻辑1是3.3V,逻辑0假设是0V,但是如果有噪声,把3.3V弄成了0V(极度),把0V弄成了-3.3V,此时就逻辑缺点,但是有Can高/Can低一样平常都浸染于两根线,以是两个虽然都有噪声影响,但是差值还是不变的

• 能有效抑制它对外部的电磁滋扰,同样的道理,由于两根旗子暗记的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。

举一个例子,假设一根是10V,一根是-10V,单跟都会对外部造成电磁滋扰,但是CAN可以把线拧在一起,跟编麻花一样,可以相互抵消电子滋扰

• 时序定位精确,由于差分旗子暗记的开关变革是位于两个旗子暗记的交点,而不像普通单端旗子暗记依赖高低两个阈值电压判断,因而受工艺,温度的影响小,能降落时序上的偏差,同时也更适宜于低幅度旗子暗记的电路。

由于差分旗子暗记线具有这些优点,以是在 USB 协议、485 协议、以太网协议及 CAN 协议的物理层中,都利用了差分旗子暗记传输。

1.2.5 CAN 协议中的差分旗子暗记

CAN 协议中对它利用的 CAN_High 及 CAN_Low 表示的差分旗子暗记做了规定,见表及图。
以高速 CAN 协议为例,当表示逻辑 1 时 (隐性电平) ,CAN_High 和 CAN_Low 线上的电压均为 2.5v,即它们的电压差 VH-V:sub:L=0V;而表示逻辑 0 时 (显性电平) ,CAN_High 的电平为 3.5V,CAN_Low 线的电平为 1.5V,即它们的电压差为 VH-V:sub:L=2V。
例如,当 CAN收发器从 CAN_Tx 线吸收到来自 CAN 掌握器的低电平旗子暗记时 (逻辑 0),它会使 CAN_High 输出3.5V,同时 CAN_Low 输出 1.5V,从而输出显性电平表示逻辑 0 。

在 CAN 总线中,必须使它处于隐性电平 (逻辑 1) 或显性电平 (逻辑 0) 中的个中一个状态。
假如有两个 CAN 通讯节点,在同一韶光,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字便是这样来的,即可以认为显性具有优先的意味。

由于 CAN 总线协议的物理层只有 1 对差分线,在一个时候只能表示一个旗子暗记,以是对通讯节点来说,CAN 通讯是半双工的,收发数据须要分时进行。
在 CAN 的通讯网络中,由于共用总线,在全体网络中同一时候只能有一个通讯节点发送旗子暗记,别的的节点在该时候都只能吸收。

1.3 CAN 协议层

1.3.1 CAN 的波特率及位同步

由于 CAN 属于异步通讯,没有时钟旗子暗记线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间利用约定好的波特率进行通讯,特殊地, CAN 还会利用“位同步”的办法来抗滋扰、接管偏差,实现对总线电平旗子暗记进行精确的采样,确保通讯正常。

1.3.2 位时序分解

为了实现位同步,CAN 协议把每一个数据位的时序分解成如图 所示的 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个 CAN 数据位的长度。
分解后最小的韶光单位是 Tq,而一个完全的位由 8~25 个 Tq 组成。
为方便表示,图 中的高低电平直接代表旗子暗记逻辑 0 或逻辑 1(不是差分旗子暗记)。

该图中表示的 CAN 通讯旗子暗记每一个数据位的长度为 19Tq,个中 SS 段占 1Tq, PTS 段占 6Tq, PBS1段占 5Tq, PBS2 段占 7Tq。
旗子暗记的采样点位于 PBS1 段与 PBS2 段之间,通过掌握各段的长度,可以对采样点的位置进行偏移,以便准确地采样。

各段的浸染如先容下:

• SS 段 (SYNC SEG)

SS 译为同步段,若通讯节点检测到总线上旗子暗记的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。
SS 段的大小固定为 1Tq。

• PTS 段 (PROP SEG)

PTS 译为传播韶光段,这个韶光段是用于补偿网络的物理延时时间。
是总线上输入比较器延时和输出驱动器延时总和的两倍。
PTS 段的大小可以为 1~8Tq。

• PBS1 段 (PHASE SEG1),

PBS1 译为相位缓冲段,紧张用来补偿边沿阶段的偏差,它的韶光长度在重新同步的时候可以加长。
PBS1 段的初始大小可以为 1~8Tq。

• PBS2 段 (PHASE SEG2)

PBS2 这是另一个相位缓冲段,也是用来补偿边沿阶段偏差的,它的韶光长度在重新同步时可以缩短。
PBS2 段的初始大小可以为 2~8Tq。

1.3.3 通讯的波特率

总线上的各个通讯节点只要约定好 1 个 Tq 的韶光长度以及每一个数据位霸占多少个 Tq,就可以确定 CAN 通讯的波特率。

例如,假设上图中的 1Tq=1us,而每个数据位由 19 个 Tq 组成,则传输一位数据须要韶光 T1bit=19us,从而每秒可以传输的数据位个数为:1x10次方/19 = 52631.6 (bps)

这个每秒可传输的数据位的个数即为通讯中的波特率。

1.3.4 同步过程剖析

波特率只是约定了每个数据位的长度,数据同步还涉及到相位的细节,这个时候就须要用到数据位内的 SS、PTS、PBS1 及 PBS2 段了。
根据对段的运用办法差异, CAN 的数据同步分为硬同步和重新同步。
个中硬同步只是当存在“帧起始旗子暗记”时起浸染,无法确保后续持续串的位时序都是同步的,而重新同步办法可办理该问题,这两种办法详细先容如下:

(1) 硬同步

若某个 CAN 节点通过总线发送数据时,它会发送一个表示通讯起始的旗子暗记 (即下一小节先容的帧起始旗子暗记),该旗子暗记是一个由高变低的低落沿。
而挂载到 CAN 总线上的通讯节点在不发送数据时,会时候检测总线上的旗子暗记。
见图 ,可以看到当总线涌现帧起始旗子暗记时,某节点检测到总线的帧起始旗子暗记不在节点内部时序的 SS 段范围,以是判断它自己的内部时序与总线不同步,因而这个状态的采样点采集得的数据是禁绝确的。
以是节点以硬同步的办法调度,把自己的位时序中的 SS 段平移至总线涌现低落沿的部分,得到同步,同步后采样点就可以采集得精确数据了。

(2) 重新同步

前面的硬同步只是当存在帧起始旗子暗记时才起浸染,如果在一帧很长的数据内,节点旗子暗记与总线旗子暗记相位有偏移时,这种同步办法就无能为力了。
因而须要引入重新同步办法,它利用普通数据位的高至低电平的跳变沿来同步 (帧起始旗子暗记是分外的跳变沿)。
重新同步与硬同步办法相似的地方是它们都利用 SS 段来进行检测,同步的目的都是使节点内的 SS 段把跳变沿包含起来。
重新同步的办法分为超前和滞后两种情形,以总线跳变沿与 SS 段的相对位置进行区分。
第一种相位超前的情形如图 ,节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前 2Tq,这时掌握器不才一个位时序中的 PBS1 段增加 2Tq 的韶光长度,使得节点与总线时序重新同步。

第二种相位滞后的情形如图 ,节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后 2Tq,这时掌握器在前一个位时序中的 PBS2 段减少 2Tq 的韶光长度,得到同步。

在重新同步的时候,PBS1 和 PBS2 中增加或减少的这段韶光长度被定义为“重新同步补偿宽度SJW (reSynchronization Jump Width)”。
一样平常来说 CAN 掌握器会限定 SJW 的最大值,如限定了最大 SJW=3Tq 时,单次同步调整的时候不能增加或减少超过 3Tq 的韶光长度,若有须要,掌握器会通过多次小幅度调度来实现同步。
当掌握器设置的 SJW 极限值较大时,可以接管的偏差加大,但通讯的速率会低落

1.3.5 CAN 的报文种类及构造

在 SPI 通讯中,片选、时钟旗子暗记、数据输入及数据输出这 4 个旗子暗记都有单独的旗子暗记线,I2C 协议包含有时钟旗子暗记及数据旗子暗记 2 条旗子暗记线,异步串口包含吸收与发送 2 条旗子暗记线,这些协议包含的旗子暗记都比 CAN 协议要丰富,它们能轻易进行数据同步或区分数据传输方向。
而 CAN 利用的是两条差分旗子暗记线,只能表达一个旗子暗记,简洁的物理层决定了 CAN 一定要配上一套更繁芜的协议,如何用一个旗子暗记通道实现同样、乃至更强大的功能呢?CAN 协议给出的办理方案是对数据、操作命令 (如读/写) 以及同步旗子暗记进行打包,打包后的这些内容称为报文。

1.3.5.1 报文的种类

在原始数据段的前面加上传输起始标签、片选 (识别) 标签和掌握标签,在数据的尾段加上 CRC校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以用一个通道表达各种旗子暗记了,各种各样的标签就犹如 SPI 中各种通道上的旗子暗记,起到了协同传输的浸染。
当全体数据包被传输到其它设备时,只要这些设备按格式去解读,就能还原出原始数据,这样的报文就被称为 CAN 的“数据帧”。

为了更有效地掌握通讯,CAN 一共规定了 5 种类型的帧,它们的类型及用场解释如表

1.3.5.2 数据帧的构造

数据帧是在 CAN 通讯中最紧张、最繁芜的报文,我们来理解它的构造,见图

数据帧以一个显性位 (逻辑 0) 开始,以 7 个连续的隐性位 (逻辑 1) 结束,在它们之间,分别有仲裁段、掌握段、数据段、CRC 段和 ACK 段。

2.1 CAN 掌握内核

框图中标号处的 CAN 掌握内核包含了各种掌握寄存器及状态寄存器,我们紧张讲解个中的主掌握寄存器 CAN_MCR 及位时序寄存器 CAN_BTR。

2.1.1 主掌握寄存器 CAN_MCR

主掌握寄存器 CAN_MCR 卖力管理 CAN 的事情模式,它利用以下寄存器位实现掌握。

2.1.2 位时序寄存器 (CAN_BTR) 及波特率

代码清单 CAN 初始化构造

CAN 发送及吸收构造体

CAN 筛选器构造体

标签:

相关文章