总线通讯协议

Bus protocol

一文读懂CAN总线(一)
CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。
最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。
比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。
CAN总线具有高抗干扰性、自诊断和数据侦错功能,这些特性使得CAN总线在各种工业场合广泛使用,包括楼宇自动化、医疗和制造业。
 
CAN总线由德国BOSCH公司开发,最高速率可达到1Mbps。CAN的容错能力特别强,CAN控制器内建了强大的检错和处理机制。
另外不同于传统的网络(比如USB或者以太网),CAN节点与节点之间不会传输大数据块,一帧CAN消息最多传输8字节用户数据,采用短数据包也可以使得系统获得更好的稳定性。
CAN总线具有总线仲裁机制,可以组建多主系统。
CAN通讯协议ISO-11898:2003标准介绍网络上的设备间信息是如何传递的,以及符合开放系统互联参考模型(OSI)的哪些分层项。实际通讯是在连接设备的物理介质中进行,物理介质的特性由模型中的物理层定义。ISO11898体系结构定义七层,OSI模型中的最低两层作为数据链路层和物理层
 
应用程序层建立了上层应用特定协议,如CANopenTM协议的通讯链路。这个协议由全世界的用户和厂商组织、CiA维护,详情可访问CiA网站:can-cia.de。许多协议是专用的,比如工业自动化、柴油发动机或航空。另外的工业标准例子,是基于CAN的协议的,由KVASER和Rockwell自动化开发的DeviceNetTM。
标准CAN和扩展CAN
标准CAN
 
标准CAN只有11位标识符,每帧的数据长度为51+(0~64)=(51~117)位。
· 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)位。注:不计位填充(位填充将在本文第5节描述)。
 
 
图3-2:扩展CAN---29位标识符
 
扩展CAN消息相对于标准CAN消息增加的内容如下:
 
· SRR – 代替远程请求位,为隐性。所以当标准帧与扩展帧发送相互冲突并且扩展帧的基本标识符与标准帧的标识符相同时,标准帧优先级高于扩展帧。
 
 
· IDE – 为隐性位表示标志位扩展帧,18位扩展标识符紧跟着IDE位。
 
· r1 – 保留
 
CAN消息
 
4.1仲裁
 
典型CAN的基本原理见图4-1所示,从图中可以看出,总线逻辑状态与驱动器输入和接收器输出逻辑是相反的。正常情况下,逻辑高电平为1,逻辑低电平为0,但是CAN总线却是逻辑高电平为0,称为显性,逻辑低电平为1,称为隐性。所以很多收发器的驱动器输入端都会内置上拉电阻,在没有任何输入时,CAN总线就会表现为隐性(逻辑低电平)。
 
 
图4-1:反转的CAN总线逻辑
 
在总线空闲时,最先开始发送报文的节点获得发送权。
 
如果多个节点同时访问总线,CAN使用非破坏式、逐位仲裁的方式决定哪个节点使用总线:各发送节点从仲裁域(标识符和RTR域)的第1位开始进行仲裁,连续输出显性电平(0)最多的节点可以继续发送。因此标识符数值越低的CAN报文,优先级越高。标识符数值为0的CAN报文,具有最高优先级,因为它输出的显性电平最多。
 
4.2消息类型
CAN有四种不同的报文类型:数据帧、远程帧、错误帧和过载帧。