CAN通讯理论
目录
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)!