CAN总线基础(下)

CAN报文帧结构

在CAN总线上,报文是以“帧”来发送的,每一帧都包含以下几个部分:
1. 帧起始
在总线空闲时,总线为隐性状态。帧起始由单个显性位构成,标志着报文的开始,并在总线上起着同步作用。
2. 仲裁段
仲裁的主要是定义了报文的标识符,也俗称ID。在CAN2.0A规范中,标识符为11位,而在CAN2.0B中变为了29位。这意味着在2.0B中可以存在更多不同类型的报文,但是也降低了总线的利用率。
3. 控制段
主要定义了数据域字节的长度。通过数据长度码,接收节点可以判断报文数据是否完整。
4. 数据域
包含有0~8个字节数据。
5. CRC域
CRC又称循环冗余码效验(Cyclical Redundancy Check),是数据通信中常见的查错方法。
6. ACK域
用于接收节点的反馈应答。
7. 帧结束
由一串7个隐性位组成,表示报文帧的结束。

CAN报文帧结构

Ps:在CAN总线的开发中,核心的关注点就是CAN报文ID以及其数据域。根据客户的要求,ECU接收自己感兴趣的ID报文的同时,也向外发送别的ECU所需要的ID报文。一般不同整车厂在开发自己的CAN协议规范的同时,也会有自己的checksum机制,不满足checksum的报文,数据将不会被ECU所接收。

仲裁机制

仲裁是总线应用中一个相当重要的概念,在CAN总线采用载波侦听多路访问/冲突检测(CSMA/CD)技术。如果总线空闲(隐性位),有报文准备发送,那么每一个节点都可以开始发送报文。报文以显性位(报文帧开始位)开始,接着是标识符。如果多个节点同时开始发送报文,那么使用“线与”仲裁机制(仲裁用逻辑“与”)来解决总线冲突,确定优先级最高的报文,而不需要损失时间或数据(非破坏性仲裁)。仲裁机制使用标识符为判断依据,不仅代表报文帧的内容,还代表报文帧发送的优先级。二进制数越小的标识符,优先级越高;反之亦然。
CAN总线的仲裁机制

如上图,ECU单元1和ECU单元2同时开始向总线发送数据,开始部分他们的数据格式是一样的,故无法区分优先级,直到T时刻,单元1输出隐性电平,而单元2输出显性电平,此时单元1仲裁失利,立刻转入接收状态工作,不再与单元2竞争,而单元2则顺利获得总线使用权,继续发送自己的数据。

CAN报文帧种类

CAN总线报文传输有以下4种不同的格式:

  • 数据帧:由发送节点发出,包含0 - 8个数据字节。
  • 远程帧:发送远程帧向网络节点请求发送某一标识符的数据帧。
  • 错误帧:总线节点发现错误时,以错误帧的方式通知网络上的其他节点。
  • 过载帧:发送过载帧,表示当前节点不能处理后续的报文(如帧延迟等)。Ps:为了保持总线的利用率,在车载总线上数据帧的报文一般均为8字节

CAN总线错误

CAN总线将错误分为临时性错误长期性错误。前者主要由外部因素引起,如总线上驱动电压波形不规整、有尖峰或毛刺时,其数据传输性能会受到一定程度的短期干扰。长期性错误则主要由网络组建非正常状况引起,比如接触不良、线路故障、发送器或接收器失效等。CAN中每个具有数据通信能力的网络单元内部都集成有一个发送错误计数器和接受错误计数器,当该单元在数据发送阶段出现一次错误时,其发送错误计数器自加8;在数据接收阶段出现一次错误时,其接收错误计数器自加1。在相应计数器内容非0的情况下,网络单元每成功发送一帧,发送错误计数器自减1;每成功接收一帧,接收错误计数内容原本小于127时自减1,大于127时被置为119 - 127之间任意值。这样,如果某个网络单元的错误计数在不断增长,就说明该单元的数据通信在频繁发生故障。当计数器内容超过一定阈值时,可以认为该故障是由长期性错误引起的。这种机制保证了当某一个节点出现故障的时候,不会造成总线长时间瘫痪。

CAN总线错误状态

猜你喜欢

转载自blog.csdn.net/zhanshen112/article/details/80672431