CAN通讯理解(2)

总线竞争

总线竞争解决的是在同一时间,多个节点同时向总线发送消息的问题。解决的方法是通过帧id号进行仲裁,仲裁出本次发送消息的节点。
能够通过id来进行总线竞争的原因:
1 总线遵循与逻辑;0为显性,1位隐性;
2 每个 节点在发送ID号时,会监听总线电平
竞争法则:

发送方发送信息can总线结果
00继续
01报错
11继续
10竞争失败,转为接受方

通过竞争失败的节点:
首先,该节点会主动检测在总线空闲的第一时间再次尝试发送数据包;
同时,竞争失败带来的风险是,当网络负载率很高时,也就是消息很多时,低优先级的消息由于难以取得发送资格延迟很久才能发送。
竞争流程图如下所示:
在这里插入图片描述

图一 总线竞争流程图

数据保护

为了防止数据包丢失,通常从物理结构和总线错误检测,错误处理和错误跟踪几方面来保证数据正常发送接收。

物理设计

1 采用NZR编码模式,NZR编码模式如下图一所示。如图中所示,其主要特点是,其高低电平变化频率比起曼彻斯特编码高低电平变化频率低很多,会有效降低数据被干扰。
2 采用每米扭转30次的双绞线的形式,通过差分信号来有效消除共模干扰。
3 高速CAN收发器添加终端电阻来有效消除高频传输时,传输末端的反射。
在这里插入图片描述

图二 编码模式图

总线逻辑错误检测机制

接受点检测:
1 检测是否有位填充错误,出现6个同极性位就报错。我们说过,为了帧同步采用如果连续出现5个同极性就添加反极性的机制。
2 检测CRC场,ack场,以及EOF是否出现隐形界定符。
3 比对接受方生成的CRC值与发送方填写的CRC值是否一致。
发送方检测:
1 发送方向总线发送显性位,发送方会对总线位进行检测,如果收到隐形位就报错。
2 接收方在收到消息后会在ack应答位给出一个显性电平,如果发送方检测到该位隐性,则报错。
通过以上5种检测机制,可以覆盖整个数据帧每个位检测。

总线逻辑错误处理机制

错误处理机制原则是,检测到错误的节点会让其他所有节点均知道此刻有一个错误。主要是发送错误帧来进行错误处理。
在这里插入图片描述

图三 错误帧图

错误帧是通过六个显性电平,制造一种位错误填充机制。
通常第一个errorflag是由发现错误的节点发送的,它发送完后就继续发送错误界定符,直到总线出现连续的8个隐性位则错误帧发送完毕,这是因为错误界定符是由8bit隐性位构成。
第二个errorflag是由第一个errorflag引起的,由其他的节点发送,该区域可能会和第一个errorflag区域重叠,这是因为第一个errorflag 还没有发送完,总线就已经形成了六个显性位,从而触发其他节点发送errorflag。

错误跟踪机制

为了避免总线被永久错误节点卡死,比如,这个节点由于本身的原因一直在报错,导致总线没法正常发送了,需要一种机制来进行鉴别并限制其功能,即错误跟踪机制。

在这里插入图片描述

图四 错误跟踪
如上图所示,节点有三种状态。TEC为发送错误计数器,REC为接受错误计数器。
节点状态特点
error active默认初始状态,节点发现错误后会很积极主动地上报错误
error passive当TEC or REC 计数超过127就进入此状态,此时,该节点发现错误后只会发送6个隐性位,不会把错误广播出去,并且,发送连续帧时,中间必须间隔8bit的延缓时间
bus offcontroller挂了,或者TEC大于255,就会进入这个状态,需要重启,或者等待128个11位隐性位电平离开此状态

发送错误计数器和接受错误计数器计数规则

计数器计数规则
发送错误计数器节点成功发送一条消息 -1 同时,若检测到错误,如果是该节点是发送方,+8
接收错误计数器成功接受一条消息 -1 同时,检测到错误,如果该节点是接收方+1,如果是引起错误的接收方 +8

CAN通讯协议从发送到接受数据,到错误检测、处理跟踪,以及数据保护做了全面深入的工作。
以上为个人整理理解,如有错误和补充,请批评指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值