什么是CAN总线?

描述

 CAN简介

 



 

CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。


 

最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。


 

 

ecu

 

比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。


 


 

CAN总线特性

 

1.CAN总线具有高抗干扰性、自诊断和数据侦错功能,这些特性使得CAN总线在各种工业场合广泛使用,包括楼宇自动化、医疗和制造业。

 

2.CAN总线由德国BOSCH公司开发,最高速率可达到1Mbps。CAN的容错能力特别强,CAN控制器内建了强大的检错和处理机制。


 

3.另外,不同于传统的网络(比如USB或者以太网),CAN节点与节点之间不会传输大数据块,一帧CAN消息最多传输8字节用户数据,采用短数据包也可以使得系统获得更好的稳定性。


 

4.CAN总线具有总线仲裁机制,可以组建多主系统。


 


 

CAN通讯协议ISO-11898

 

ISO11898体系结构定义七层,OSI模型中的最低两层作为数据链路层和物理层。


 

 

ecu

 

实际通讯是在连接设备的物理介质中进行,物理介质的特性由模型中的物理层定义。


 

 

ecu

注:

LLC用于接收滤波、超载通告、回复管理

MAC用于数据封装/拆封、帧编码、媒体访问管理、错误检测与标定、应答、串转发/并转串
 

PLS用于位编码/解码、位定时、同步
 

PMA为收发器特性

 

应用程序层建立了上层应用特定协议,如CANopenTM协议的通讯链路。


 

这个协议由全世界的用户和厂商组织、CiA维护,详情可访问CiA网站:can-cia.de。


 

许多协议是专用的,比如工业自动化、柴油发动机或航空。

 

 


 

标准CAN和扩展CAN

 

 


 

标准CAN

 

标准CAN只有11位标识符,每帧的数据长度为51+(0~64)=(51~117)位。


 

 

ecu

标准CAN---11位标识符

 

· 

SOF

 - 帧起始。显性(逻辑0)表示报文的开始,并用于同步总线上的节点。

· 标识符 - 标准CAN具有11位标识符,用来确定报文的优先级。

此域的数值越小,优先级越高。

· 

RTR

 - 远程发送请求位。

当需要从另一个节点请求信息时,此位为显性(逻辑0)。

所有节点都能接收这个请求,但是帧标识符确定被指定的节点。

响应数据帧同样被所有节点接收,可以被有兴趣的节点使用。

· 

IDE

 - 标识符扩展位,为显性时表示这是一个标准CAN格式,为隐形表示这是扩展CAN格式。

· 

r0

 - 保留位(可能将来标准修订会使用)。

· 

DLC

 - 4位数据长度代码表示传输数据的字节数目,一帧CAN最多传输8字节用户数据。

· 

数据0~8

 – 最多可以传输8字节用户数据。

· 

CRC

 - 16位(包括1位定界符)CRC校验码,用来校验用户数据区之前的(包含数据区)传输数据段。

· ACK - 2位,包含应答位和应答界定符。


 

发送节点的报文帧中,ACK两位是隐性位,当接收器正确地接收到有效的报文,接收器会在应答位期间向发送节点发送一个显性位,表示应答。

如果接收器发现这帧数据有错误,则不向发送节点发送ACK应答,发送节点会稍后重传这帧数据。

· EOF – 7位帧结束标志位,全部为隐性位。

如果这7位出现显性位,则会引起填充错误。

· 

IFS

 – 7位帧间隔标志位,CAN控制器将接收到的帧正确的放入消息缓冲区是需要一定时间的,帧间隔可以提供这个时间。


 


 

扩展CAN

 

扩展CAN具有29位标识符,每帧数据长度为71+(0~64)=(71~135)位。

 

注:不计位填充(位填充将在后面的文章描述)。

 

 

ecu

扩展CAN---29位标识符

 

扩展CAN消息相对于标准CAN消息增加的内容如下:

 

· SRR – 代替远程请求位,为隐性。所以当标准帧与扩展帧发送相互冲突并且扩展帧的基本标识符与标准帧的标识符相同时,标准帧优先级高于扩展帧。
 

 

· IDE – 为隐性位表示标志位扩展帧,18位扩展标识符紧跟着IDE位。

 

· r1 – 保留

 


 

CAN消息

 

 


 

仲裁

 

 

ecu

反转的CAN总线逻辑


 

典型CAN的基本原理如上图所示,从图中可以看出,总线逻辑状态与驱动器输入和接收器输出逻辑是相反的。


 

正常情况下,逻辑高电平为1,逻辑低电平为0,但是CAN总线却是逻辑高电平为0,称为显性,逻辑低电平为1,称为隐性。


 

所以很多收发器的驱动器输入端都会内置上拉电阻,在没有任何输入时,CAN总线就会表现为隐性(逻辑低电平)。

 

总线空闲时,最先开始发送报文的节点获得发送权。


如果多个节点同时访问总线,CAN使用非破坏式、逐位仲裁的方式决定哪个节点使用总线:各发送节点从仲裁域(标识符和RTR域)的第1位开始进行仲裁,连续输出显性电平(0)最多的节点可以继续发送。


 

因此标识符数值越低的CAN报文,优先级越高。标识符数值为0的CAN报文,具有最高优先级,因为它输出的显性电平最多。

 


 

消息类型

 

CAN有四种不同的报文类型:数据帧、远程帧、错误指示帧超载帧

 

1、数据帧

 

CAN协议有两种数据帧类型:标准CAN和扩展CAN(见上文)。


一个数据帧中包括7个主要的域: 

 

帧起始域——标志数据帧的开始,由一个显性位组成。

 

仲裁域——内容由标示符和远程传输请求位(RTR)组成,RTR用以表明此信息帧是数据帧还是不包含任何数据的远地请求帧。


 

标准CAN和扩展CAN的数据帧必须在同一条总线上传输时,首先判断其优先权,如果ID相同,则非扩展数据帧的优先权高于扩展数据帧。

 

控制域——r0、r1是保留位,作为扩展位,DLC表示一帧中数据字节的数目。 

 

数据域——包含0~8字节的数据。

 

校验域——检验位错用的循环冗余校验域,共15位。

 

应答域——包括应答位和应答分隔符。正确接收到有效报文的接收站在应答期间将总线值为显性电平。 


 

帧结束——由七位隐性电平组成。

 


 

2、远程帧

 

远程帧接受数据的节点可通过发远程帧请求源节点发送数据。


 

它由6个域组成:帧起始、仲裁域、控制域、校验域、应答域、帧结束

 

3、错误指示帧

 

错误指示帧由错误标志错误分界两个域组成。


 

接收节点发现总线上的报文有误时,将自动发出“活动错误标志”其他节点检测到活动错误标志后发送“错误认可标志”。

 

4、超载帧

 

超载帧由超载标志超载分隔符组成。

 

超载帧只能在一个帧结束后开始。当接收方接收下一帧之前,需要过多的时间处理当前的数据,或在帧间空隙域检测到显性电平时,则导致发送超载帧。

 

帧间空隙位于数据帧和远地帧与前面的信息帧之间,由帧间空隙和总线空闲状态组成。帧间空隙是必要的,在此期间, CAN不进行新的帧发送,为的是CAN控制器在下次信息传递前有时间进行内部处理操作。当总线空闲时CAN控制器方可发送数据。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分