自学内容网 自学内容网

CAN通讯理论

目录

1、物理层

 1.1、总线特征

  1.2、硬件电路

  1.2.1 高速CAN

  1.2.2 低速CAN

1.2.3 高速CAN收发器(TJA1050)

2、数据链路层

 2.1、帧格式

          2.1.1、数据帧  

 2.1.2、遥控帧

 2.1.3、错误帧

 2.1.4、过载帧

 2.1.5、帧间隔

2.2、位填充

2.3、波形实例

2.4、位同步

2.4.1、位时序

2.4.2、硬同步

2.4.3、再同步

2.4.4 波特率计算

 2.5 仲裁

2.5.1 总裁规则

2.5.2 同ID时不同帧优先级

2.6 错误处理

 2.6.1   错误状态

2.6.2 真实波形示例


1、物理层

 1.1、总线特征

  • 两根CAN线(CAN_L、CAN_H)、差分信号抗干扰;
  • 异步无需时钟、通讯速率由设备各种约定
  • 半双工、可挂在多设备(同时发送时通过仲裁判断先后顺序)
  • 11/29bit报文ID(决定优先级、区分消息)
  • 可配置1~8字节有效载荷
  • 可实现广播式和请求式两种传输方式
  • 应答、CRC校验、位填充/同步、错误处理等特性
  • 高速CAN(125k~1Mbps),<40m
  • 低速CAN(10k~125kbps),<1km

  1.2、硬件电路

  1.2.1 高速CAN

  • 使用闭环网络,CAN_L和CAN_H两端,添加120Ω终端电阻    

        

120Ω电阻作用:

1、防止回波反射;(若不加电阻,信号波形会在线路终端反射,干扰原始信号)

2、将两根CAN线收紧至电压一致状态(代表默认1状态);(电阻阻值越小,电压收紧速度越快,为0Ω就是迅速收紧)这里120Ω大小的小电阻,总线的收紧速度会很快

当设备发送1时,收发器无需对总线进行任何操作,因为总线默认状态就是1;

当设备发送0时,收发器无需将总线两端电压拉开,此时总线状态变为0;

  1.2.2 低速CAN

  • 使用开环网络,CAN_L和CAN_H其中一端,添加2.2kΩ终端电阻(如图左边电阻)    

2.2kΩ电阻作用:

1、防止回波反射;(若不加电阻,信号波形会在线路终端反射,干扰原始信号)

1.2.3 高速CAN收发器(TJA1050)

接受过程:

1、右边三角形 “接收器” 时刻检测电压差,若总线存在电压差就输出1,反之亦反;

2、左边有两个场效应管组成的输出反向驱动器。当右侧为1时 “上管断开,下管导通”(RX端为0)、当右侧为0时“上管导通、下管断开”(RX端为1);

这就完成了   逻辑电平0<-----存在电压差   逻辑电平1 <--------没有电压差  的转化;

发送过程:

1、当Tx=1时,后方驱动器“Driver”就会让右边的两个场效应管都断开,相当于不对总线进行任何操作,总线此时为 “默认状态(隐型电平1)”。且CAN_L和CAN_H之间的0.5Vcc的地,会将两根线都拉到0.5Vcc的中间电平,此时它们的默认对地电压都是0.5Vcc(2.5V左右);

2、当Tx=0时,后方驱动器“Driver”就会让右边的两个场效应管都导通,上面Vcc将CAN_H拉高,下面GND将CAN_L拉低,形成显性电平“0”;

电路其余部分解析:

左上角的Vcc:若TXD悬空,则此电流源会将TX的电平上拉(默认输入1,防止输入电平不确定造成误操作)。此时后方的显性电平超时器(若TXD出现异常始终输入显性电平0,拽着CAN总线不放,此时CAN总线会一致呈现显性电平,而导致其他设备无法操作总线。所以这里输出显性电平到了一定时间收发器就会释放CAN总线,防止总线瘫痪

2、数据链路层

 2.1、帧格式

      2.1.1、数据帧

                        

标准帧格式:
起始段:

sop:显性电平0,1bit;(发送数据帧之前,总线必须处于空闲状态)

仲裁段:

ID: 报文ID,可表示数据段功能、区分优先级(ID越小优先级越高);

RTR:远程请求标志位,1为遥控帧(读取),0为数据帧(写入);

控制段:

IDE:   ID扩展标志位,0标准格式,1扩展格式,1bit

r0:   保留位,必须为0,1bit

DLC: 表数据段长度,4bit

数据段:

Data:数据帧,0~64bit

CRC段:

CRC:使用CRC校验算法得到的值,15bit

CRC界定符:必须为1,1bit;(为ACK释放总线)

ACK段:

ACK槽:发送方发送完一帧数据后会释放总线回归默认电平1,若接收方收到数据此位被拉低0,之后发送方会读取总线状态,看是否有接收方;

ACK界定符:必须为1,1bit;(接收方必须及时释放总线,交出控制权)

帧结束:

EOP:7个1,7bit

扩展格式:(ID不够用才用这个


SRR:没用,但必须给隐形电平1,协议升级时留下的无意义位;

 2.1.2、遥控帧

用途:接受设备“主动请求数据”,它无数据段

为什么会存在“遥控帧”?

        一般发送方会定一个周期,定时广播自己的数据。但发送方如果没有即时发送数据,或此数据使用的频率太低了,广播太频繁且大家都用不到,此时就会浪费总线资源。广播太慢了,偶尔有用,又及时拿不到。此时发送方就可以规定就不要主动广播数据了,而是存在设备需要的话,才发送数据。首先接收方发送一个遥控帧,遥控帧包含报文ID(遥控帧也是广播出来的),若其中某个设备有这个ID数据,它就会再通过数据帧广播出来,这样接受方就会及时获取这个数据。(这种方式适合使用频率低,但偶尔需要集中使用几次的数据

 2.1.3、错误帧

总线上所有设备都会监督总线数据,一旦发现“位/填充/CRC校验/格式/应答错误”,这些设备就会发出错误帧来破坏数据,同时终止当前发送的设备;

        一个设备检测到自己错误,就会发6个显性位表当前自己主动错误。若主动错误太多,就会将自己置为被动错误状态,即全是隐性电平1,不影响总线上其它设备操作。其中0~6的重叠部分,是其他设备检测出存在错误时,发送的错误帧。

 2.1.4、过载帧

         接收方收到大量数据而无法处理时,发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失。

        过载标志破坏掉发送方的数据,后发送方会重试再次发送数据,这就避免了数据丢失。

 2.1.5、帧间隔

  • 将数据帧和远程帧与前面的帧分开

     

主动错误状态的帧间隔是3bit;

被动错误状态的帧间隔是3bit+8bit延时传输(会将设备至于仲裁不利的处境)

2.2、位填充

规则:

发送方:每发送5个相同电平,即自动追加一个相反电平的填充位。

接收方:检测到填充位时,会自动移除填充位,回复原始数据。

作用:

  • 增加波形定时信息(一下子发送一长串相同电平,对接受方的准确接受判断是有不利影响的),防止波形长时间无变化,导致接收方不能精确掌握采样时机;
  • 将正常数据流与“错误帧”及“过载帧”区分开,标志“错误帧”和“过载帧”的特异性(其它帧都不可能同时出现5个相同bit数据);
  • 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲;

2.3、波形实例

 

2.4、位同步

背景:

1、CAN无时钟线,总线上所有设备通过约定波特率方式来确认每个数据位时长(发送方每隔固定时间输出一个数据位,发送方每隔一段时间在总线上采样);

2、理想状态时,接收方能依次采样到发送方每个数据位,且采样点位于数据中心附近;

 

但实际上会存在如下情况:

1、接收方以约定位时长采样,但采样点没有对齐数据中心;(如下每次都在数据跳变沿采样)(可通过“硬同步”解决)

2、接收方刚开始采样准确,但时钟存在误差,随着误差积累,采样点逐渐偏离;

(可通过“再同步”解决)

2.4.1、位时序

        对一个数据位“1bit”进行更为细致的划分,其中构成1bit的最小时间单位为(Tq)。每个位被划分位几段,分别是“同步段(SS)”、“传播时间段(PTS)”、“相位缓冲段1(PBS1)”、“相位缓冲段2(PBS2)”。

2.4.2、硬同步

        每个CAN设备都会存在一个秒表。每个秒表转一圈的时间是被我们主动给设定死了的。发送方会率先发送报文,而其他接收方在收到SOF下降沿时,将自己的秒表同步到SS段,与发送方的位时序周期保持同步。(硬同步只在CAN数据帧的第一个下降沿有效

        虽然上面秒表旋转的起始时间是同步了。但它们的转动速率可能会不同,此时随着误差的累计,就可能会出现采样点偏移的情况发生。这时候就需要进行“再同步”了。

2.4.3、再同步

        在接收方秒表速率时钟快/慢了的前提下,再同步就是接受方将秒表调快多少和调慢多少。其中SWJ也就是再同步补偿宽度,就是秒表能够调整的最大阈值。(设置后会根据误差值自动调整、但若SWJ值<误差值则此时最大也补偿不了

 注:SWJ也不能过大。若太过大了,则波形中的噪声就会对位时序造成过大影响,这会导致接收方认为这是更多位的数据。这样就能防止因干扰而导致的补偿过度

2.4.4 波特率计算

 2.5 仲裁

        CAN总线 只有一对差分信号,同一时间只能有一个设备操作总线来发送数据。若多设备同时发送数据,CAN就会通过仲裁机制来分配资源。

2.5.1 总裁规则

资源分配会有以下规则:

1、任何设备检测到连续的11个隐性电平、就认为总线空闲。(此时位填充就起作用了,位填充防止了设备在发送信号时出现连续的11个隐性电平

2、设备认为总线空闲时,才能发送“数据/遥控帧”。

非破坏性仲裁:

1、多个设备发送需求同时到来时,CAN总线会根据ID号进行非破坏性仲裁,ID号小的优先级高;

        这个方式仲裁需要回读机制的参与。所谓回读,就是每个CAN设备发出一个数据位后,都会回读总线上当前的电平状态,以确认自己发出的电平是否被发送出去,发出0读回一定为0,发送1则不一定为1(此时就释放总线)。

非破坏性仲裁实际过程:

2.5.2 同ID时不同帧优先级

1、同ID时,数据帧>遥控帧(优先级)

 

2、标准格式>扩展格式

       

2.6 错误处理

       当某个设备发送出错时,通知所有其他接受方此帧错误,让其它接受设备丢掉此帧。

注:错误情况其实很少发生。

下面是常用的错误帧情况:

  

        只要存在以上任何一种错误情况,检测到错误的任何CAN单元就会发出错误帧,以破坏当前发送的帧数据。

 2.6.1   错误状态

TEC:发送出错次数;

REC:接受出错次数;

        主动错误状态会破坏总线,所以主动出错一定次数以后会让出错设备进入被动错误状态。被动错误状态时,若其进行了很多正常的数据传输,错误计数就会减少,当错误状态(TEC且REC)减少到<=127时,设备会重新回到主动错误状态。当设备在被动错误状态仍不断报告错误时,就说明设备出问题了,故在TEC>255时(只有TEC>255才会让总线转为关闭态,因为发送数据出错会占用总线资源),设备会被转到总线关闭态(考虑到设备对系统可能还有左右,所以当总线上检测到128次连续11个隐形位时,就会重新给他机会通讯)。

其中错误计数器计数规则如下,了解即可:

2.6.2 真实波形示例


原文地址:https://blog.csdn.net/weixin_48038462/article/details/144252624

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!