CAN总线概述
CAN(Controller Area Network)总线是控制器局域网络的简称,由BOSCH公司提出一种大量应用于车载控制系统,工业局域网的现场总线。
CAN总线应用框图
图1 CAN应用框图
一个CAN总线可以挂载多个CAN节点,CAN节点通过CAN收发器接入CAN总线。任意CAN节点均可通过仲裁获取总线控制权(多主机系统)。CAN节点通过对比总线上报文的ID信息,若ID匹配则选择接收帧。CAN总线为异步总线,总线内进行通信前需要统一总线中所有节点的传输速率。
CAN总线接口信号
表1 CAN接口信号
CAN收发器与CAN节点直接通过CMOS电平通信。CAN收发器负责监听CAN总线上的电平通过RXD发送给CAN节点。同时CAN节点通过TXD控制CAN收发器向总线发送信息。TXD为0时,CAN收发器发送显性电平(CANH-CANL》0.9v,CANH比CANL电平高);TXD为1时,发送隐形电平(CANH-CANL《0.5v,CANH和CANL电平相同)。
CAN总线数据/远程帧格式
图2 CAN数据/远程帧标准帧格式
CAN总共有4种消息类型:数据帧,远程帧,错误帧,过载帧。数据帧和远程帧格式类似如图2所示,数据/远程帧由多个域组成:
帧间隔:当总线空闲时,总线为隐形电平(1)。
帧起始:CAN节点向总线发送1bit显性电平(0),标志帧起始位
仲裁域:仲裁域包含两部分,11bit的ID指示帧发送节点身份标识,1bit RTR(Remote Transmission Request)指示该帧为数据帧(显性电平)还是远程帧(隐性电平)。该域之所以称之为仲裁域,是因为其除了承载上述信息外,还被应用于CAN总线独特的非破坏性仲裁机制。其仲裁原理为,当多个CAN节点向总线同时发送CAN数据/远程帧时,当发送至仲裁域时,对于ID数值大的节点就会检测到总线上的电平与其发送的电平不匹配于是其终止发送,直到剩下ID数值最小的帧,继续发送。 CAN总线为线与逻辑,有一个节点发送0则总线为0,所有节点发送1才为1,因此ID在逐位发送时(高位先传)必然是数字小的ID可以始终保持和总线电平一致,最终能获取总线控制权。仲裁失败的节点在总线空闲时,自动重发帧。
控制域:控制域总共6bit,高2bit为保留位(显性电平),低4bit DLC(Data Length Code)指示数据域长度,可以是0~8字节。对于远程帧DLC域无意义。
数据域:0~8字节数据Payload,数据长度由DLC决定。远程帧该域长度为0。
CRC域:包含15bit CRC,1bit CRC定界符(隐性电平)。CRC保护范围从帧起始符开始至数据域结束。
ACK域:2bit长度,包含ACK Slot和ACK定界符。对于发送方,该两bit均为隐性电平,接收方如果正确接收则将ACK Slot位置为显性电平。
帧结束:ACK域结束后发送7bit隐性电平,标识本次帧发送完毕。
数据帧用于发送节点向接收节点发送数据,远程帧为接收节点主动向总线上发起发送数据请求。
图3 CAN数据/远程帧扩展帧格式
数据帧和远程帧格式有标准帧格式和扩展帧格式的区别,扩展帧格式如图3所示。扩展帧和标准帧的差异在仲裁域的不同,扩展帧通过拓宽仲裁域达到拓宽ID位宽(11bità19bit)。为了扩展帧和标准帧兼容,增加了SRR(隐性电平)和IDE(隐性电平)域,这样对于CAN节点来说区分扩展帧和标准帧仅需要检查从帧起始开始第12bit(SRR/RTR),第13bit(IDE/R1)的电平即可。{bit12,bit13}=2’bx0则为标准帧,{bit12,bit13}=2’b11则为扩展帧。
数据/远程帧在发送至总线时会进行位填充编码。当节点检测到发送数据中包含5个连续隐性或者显性电平时会增加一位反型数据。CAN节点只会对数据/远程帧从帧起始到CRC域(不包含CRC定界符)数据进行位填充编码。
CAN总线其他帧格式
图4 CAN错误帧格式
错误帧,用于某节点检测到错误后,告知总线上其他节点。如图4所示,错误帧由错误标识域、错误定界符由两部分组成,。
错误标识域:分主动错误标识和被动错误标识两种类型。对于获得总线控制权的节点(主动节点)检测到错误时,发起连续6个显性电平称为主动错误标识。总线上的被动节点识别到错误后,启动发送6个隐性电平称为被动错误标识。如果此时主动节点未发现错误被动错误帧被忽略。错误标识会在不同节点中重叠,因此在总线上看到的错误标识符长度可能为6~12位。
错误定界符:节点在总线上检测到第1个隐性电平后,再发送7位的隐性电平,则错误帧发送完毕。
过载帧,某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点。过载帧和错误帧格式相同,过载标识域对应错误标识域,过载定界符对应错误定界符。区别在于错误帧在只会在帧发送过程中出现,过载帧只会在帧间隔中出现。
责任编辑人:CC
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)