CAN学习笔记(1)

编程入门 行业动态 更新时间:2024-10-14 14:20:19

CAN<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记(1)"/>

CAN学习笔记(1)

笔者学习主要根据野火的学习资料,还有些是正点原子和网上查找的,自己略微整理了下,作为自己的学习记录,也供大家学习指教

一、CAN协议简介

​ CAN: Controller Area Network 控制器局域网络。

二、CAN构成

1.物理层
	CAN 的物理层标准主要约定了CAN通讯的主要电气特性,具体电气特性如下所述。
(1)CAN物理层形式

​ CAN物理层的形式主要有两种,分别是闭环总线网络(ISO11898)和开环总线网络(ISO11519-2)。

①闭环总线网络

②开环总线网络

(2)通讯节点

​ 由上述可知,CAN通讯节点由一个CAN控制器器和CAN收发器组成,控制器与收发器之间通过CAN_Tx和CAN_Rx信号相连,收发器与CAN总线之间通过CAN_High和CAN_Low信号相连。

​ 其中CAN_Tx和CAN_Rx使用的是普通的类似TTL逻辑信号,而CAN_High和CAN_Low使用的是一对差分信号。

(3)差分信号

​ 差分信号又称为差模信号,使用差分信号进行传输时,需要两根振幅相等,相位相反的信号线,通过这两根信号线间的电压差来表示逻辑0和逻辑1。

​ 以高速CAN为例(闭环总线网络),当CAN总线需要表示逻辑1时(隐性电平),CAN_High和CAN_Low线上的电平均为2.5V,此时他们的电压差VH-VL=0V。而当CAN总线需要表示逻辑0时(显性电平),CAN_High线上的电平为3.5V,CAN_Low线上的电平均为1.5V,此时他们的电压差VH-VL=2V。

​ 由于CAN总线上会同时存在多个节点,如果同一时间内,不同节点上传的逻辑信号不一致,CAN协议会根据类似“线与”的原则进行筛选判断。其中“线与”逻辑可以简述为,两个输出端(包括两个以上)直接互连就可以实现“AND”的逻辑功能。那么如果在同一时间内,CAN总线上出现了一个逻辑1(隐性电平)和一个逻辑0(显性电平),根据“线与”逻辑使得此时电平信号为逻辑0(显性电平)电平状态,从而使得显性电平逻辑优先级更高。

​ 同时由于CAN通讯使用的逻辑判断是利用差分信号,即某一时刻只能表示一个信号,这也导致了在进行CAN通讯的半双工特性,也就是收发数据需要分时进行。如果CAN通讯使用了多个节点,那么当其中一个节点在发送数据时,其他节点在该时刻都只能接收。

2.协议层

​ CAN 的协议层标准主要约定了CAN通讯的通讯逻辑,具体通讯逻辑如下所述。

(1)位同步

​ 由于CAN通讯没有时钟信号线,属于异步通讯,所以连接在同一总线上的各个节点约定好个固定的波特率进行传输通讯,这点和串口及485通讯类似。特别地,CAN通讯还会使用“位同步”的方式来进行抗干扰、吸收误差,实现对总线电平信号的正确采样,确保通讯的正常。

​ 图1 CAN 位时序分解图

​ 如图1所示,CAN通讯总线电平的一位数据被分成了 19Tq,其中 SS 段占 1TqPTS 段 占 6TqPBS1 段占 5TqPBS2 段占 7Tq。信号的采样点位于 PBS1 段与 PBS2 段之间。而通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样。

​ 其中各段的意义和作用如下所述:

①SS 段

SS 段译为同步段(Synchronization Segement),他的作用是为多个连接在总线上的单元通过此段实现时序调整,同步进行接收和发送的工作。若通讯节点检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。SS 段的大小固定为 1Tq

②PTS 段

PTS 段译为传播时间段(Propagation Time Segment),他的作用是用于吸收网络上的物理延迟的段。所谓的网络的屋里延迟指的是发送单元的输出延迟、总线上信号的船舶延迟、接收单元的输入延迟。这个段的时间为以上各延迟时间的和的两倍。PTS 段的大小可以为 1~8Tq

③PBS1段和PBS2段

PBS1 段译为相位缓冲段1(Phase Buffer Segment1),PBS2段译为相位缓冲段2(Phase Buffer Segment2),他们的作用是当信号边沿不能被包含与SS段中时,可在此段进行补偿。由于各单元以各自独立的时钟工作,细微的时钟误差会累计起来,PBS段可用于吸收此误差。PBS1段的大小为 18Tq**,**PBS1**段的大小为**28Tq

④SJW段

​ 额外的,还会有SJW段,即再同步补偿宽度(reSynchronization Jump Width),因时钟频率偏差、传送延迟等,各单元有同步误差,SJW段是通过对相位缓冲段加减来进行吸收误差。

(2)波特率

​ 由上述内容可以得知,一位数据位的主要由SS 段+PTS 段+PBS1 段+PBS2段,通过确定Tq的时间长度和一位数据位占据了多少个Tq,即可确定传输一个数据位所需要的时间,进而根据每秒可以传输的数据位的个数来确定通讯中的波特率。

(3)同步过程分析

​ 由位同步可以得知,要保证CAN通讯数据采样正确,需要保证采样点正确。

​ CAN 通讯的整个同步过程主要分成两部分,一个是硬同步,一个是重新同步。

①硬同步

​ 图2 硬同步过程图

​ 硬件同步只是针对帧起始信号而言的,当某个CAN节点通过总线发送数据时,会发送一个表示通讯起始的信号,该信号为一个由高到低的下降沿。

​ 通过检测总线上的信号,当出现到总线的帧起始信号不在节点内部时序的SS段内,即可认定为此时节点内部时序与总线不同步,通过平移SS段,使得SS段包含总线上帧起始信号,从而实现同步,此时采样点就可以采集到正确的数据了。

(2)重新同步

​ 由上述可以得知,硬件同步只会在一帧数据的帧起始时起到一个初步的同步作用,当一帧数据的数据较多,同时节点信号与总线信号存在一定的相位偏移,则后续的数据位可以会出现采样点错误的情况。所以需要重新同步来实现后续数据位的相位同步。

​ 图 3 相位超前

​ 图4 相位滞后

​ 如图3所示,在对一帧数据的后续几位数据位进行采样时,会存在相位超前和相位之后的情况,而此时均无法通过硬同步来实现对节点时序和总线时序的同步。

​ 以相位超前为例,节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前2Tq,这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度,使得节点与总线时序重新同步。

​ 图5 相位超前重新同步

​ 同样的当发生相位滞后时,节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对滞后2Tq,这时控制器在下一个位时序中的 PBS2 段减少 2Tq 的时间长度,使得节点与总线时序重新同步。

​ 图5 相位滞后重新同步

​ 而在重新同步的时候,为了保证节点时序和总线时序同步在PBS1段 和 PBS2 段中增加或减少的这段时间长度被称为“再同步补偿宽度 SJW (reSynchronization Jump Width)”。一般来说 CAN 控制器会限定 SJW 的最大值,如限定了最大 SJW=3Tq 时,单次同步调整的时候不能增加或减少超过 3Tq 的时间长度,若有需要,控制器会通过多次小幅度调整来实现同步。当控制器设置的 SJW 极限值较大时,可以吸收的误差加大,但通讯的速度会下降。

(4)数据帧

​ 为了实现各个节点之间的相互传输和保证收发数据的正确性,CAN定义了较为复杂的数据帧结构。

​ CAN总计定义了五种数据帧,详细数据帧的定义即作用如表1所示。

​ 表1 CAN协议各种数据帧及其用途

帧类型帧用途
数据帧用于发送单元向接收单元传送数据的帧
遥控帧用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧用于当检测出错误时向其他单元通知错误的帧
过载帧用于接收单元通知其尚未做好接收准备的帧
间隔帧用于将数据帧即遥控帧与前面的帧分离开的帧

​ 由表1也可以看出在整个CAN协议中,最主要的就是数据帧了。

​ 数据帧以一个显性位(逻辑0)开始,以7个连续的隐性位(逻辑1)结束,中间又由七个部分组成。这七个部分的定义和作用如下所述:

①帧起始

​ SOF段(Start Of Frame),译为帧起始,帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。

②仲裁段

​ 仲裁段的作用是,当总线上同时存在两个报文,总线会根据仲裁段的内容决定哪个数据包能被传输。

​ 仲裁段的内容主要为本帧数据帧的ID信息(标识符),数据帧具有标准格式和扩展格式两种。其中,标准格式的ID为11位,扩展格式的ID为29位。ID的内容主要包括了优先级和地址,优先级则是为总线仲裁提供依据,而地址则是由各个节点进行判断是否接受该数据帧。

​ 由差分信号的讲解我们可以得知,CAN总线有“线与”特性,利用该特性可以使得显性电平的优先级高于隐性电平,CAN总线也正是利用这点实现仲裁。

​ 图6 CAN总线仲裁过程

​ 图7 数据帧结构

(1)RTR位(Remote Transmission Request Bit),译作远程传输请求位,它是用于区分数据帧和遥控帧,当其为显性电平时表示数据帧,隐性电平表示遥控帧;

(2)IDE位(Identifier Extension Bit),译为标识符扩展位,它是用于区分标准格式和扩展格式,当其为显性电平时表示标准格式,隐性电平时表示扩展格式;

(3)SRR位(Substitue Remote Request Bit),只存在与扩展格式,它用于替代标准格式中的RTR位。

​ 由上可以得知,在相同ID优先级的情况下,数据帧的优先级比遥控帧高,标准格式的优先级比扩展格式高。

③控制段

​ 在控制段中的R1和R0为保留位,默认设置为显性位。它最主要的是DLC段(Data Length Code),译为数据长度码,他由四个数据位组成,用于表示本报文中的数据段含有多少个字节,DLC段表示的数字为0-8。

④数据段

​ 数据段为数据帧的核心内容,它是节点要发送的原始信息,由2-8个字节组成,MSB先行。

⑤CRC段

​ 为了保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,一旦接受节点算出的CRC码跟接受的CRC码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。CRC部分的计算一般由CAN控制器硬件完成,出错时的处理则由软件控制最大重发数。

​ 在CRC校验码之后,有一个CRC界定符,它为隐性位,主要作用是把CRC校验码,与后面的ACK段间隔起来。

④ACK段

ACK段包含一个ACK槽位和ACK界定符位。类似I2C总线,在ACK槽位中,发送节点发送的是隐性位,而接收节点则是在这一位中发送显性位以示应答。在ACK槽和帧结束之间有ACK界定符间隔开。

⑤帧结束

EOF段(End Of Frame),译为帧结束,帧结束段由发送节点发送的7个隐性位表示结束。

​ 其他数据帧格式详见图8。

​ 图8 各种 CAN 报文的结构

更多推荐

CAN学习笔记(1)

本文发布于:2024-02-06 09:04:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1748084.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!