CAN:
控制器局域网络(Controller Area Network)
应用:
CAN总线协议成为汽车计算机控制系统、嵌入式工业控制局域网的标准总线。
定义:
CAN属于现场总线的范畴,是一种有效支持分布式控制或实时控制的串行通信网络。它是一种多主总线,通信介质可以是双绞线、同轴电缆、光导纤维等,速率可达1Mbps。
优点:
(1)网络各节点之间的数据通信实时性更强;
CAN控制器工作于多种方式,网络中各节点都可根据总线访问优先权(报文标识符),采用无损结构的逐位仲裁方式竞争向总线发送数据。
(2)开发周期短;
CAN总线通过其收发器82C250接口芯片的两个输出端CANH、CANL和物理总线相连。其中,CANH状态为高电平或悬浮,CANL状态为低电平或悬浮。这样,即使CAN节点在严重错误时具有自动关闭输出功能,使其他节点不受影响,以免进入“死锁”状态。
特点:
(1)通信接口集成了CAN协议的物理层和数据链路层,完成对通信数据的成帧处理,有:位填充、数据块编码、循环冗余检验、优先级别判别等。
(2)废除传统的站地址编码,使用通信数据块编码方式。理论上网络内的节点个数不受限。
数据块的标识符可有11位/29位二进制数组成,因而可定义2或2以上不同的数据块。可使不同节点同时接收到相同的数据。数据段最多为8个字节。
CRC检验并提供相应的错误处理能力,保证通信可靠。
(3)多主竞争总线结构,具有多主站运行、分散仲裁的串行总线、及广播通信的特点。
任意节点在任意时刻主动向网络上其他节点发送信息,不分主次,因此可在各节点之间实现自由通信。适用于分布式测控系统之间数据通讯。
CAN总线可以插在PC AT XT兼容机上,构成分布式监控系统。
(4)只有两根线与外部相连,内部集成了错误探测和管理模块。
(5)数据通信无主从之分,任意一个节点可以向任何其他(一或多)节点发起数据通信,由各节点信息优先级先后顺序决定通信次序,高优先级节点嘻嘻在134μs通信;
多节点同时发起通信时,优先级低的避让高的,防止对通信线路造成拥塞;
通信距离最远可达10KM(速率低于5Kbps),速率达到1Mbps(距离小于40M);
适用于大数据量短距离通信/长距离小数据量,实时性要求高,多主多从或各节点平等的现场中使用。
技术:
(1)位仲裁
在几个站同时需要发送数据时,要求快速的进行总线分配。实时处理通过网络交换的紧急数据有不同,一个快速变化的物理量,如汽车引擎负载,比汽车引擎温度需要更短的延时。
CAN总线以报文为单位进行数据传送,报文优先级结合在11位标识中,具有最低二进制数的标识符有最高的优先级。这个优先级只要在系统设计时确定便不可更改。总线读取冲突可通过仲裁解决。
在网络最终确定哪个站的报文被传送之前,报文的起始部分已经在网络上传送,所有未获得总线读取权的站成为具有最高优先权报文的接收站,并不会再总线再次空闲前发送报文。
效率高是因为总线只被请求悬而未决的站利用,请求是根据报文在整个系统中的重要性按顺序处理的,读取的顺序放在每个报文中,保证实时系统中较低的个体隐伏时间。
CAN协议执行非集中化的总线控制,主要通信(包括总线读取(许可)控制),在系统中分几次完成。
(2)CAN方案
其他协议总线分配方法:按时间表分配、按需要分配。
按时间表:无论每个节点是否申请总线,都对每个节点按最大时间分配。因此,总线可被分配给每个站并且是唯一的站,无论其是立即进行总线存取或在一特定时间进行总线存取。
按需要分配:总线按传送数据的基本要求分配给一个站,总线系统按站希望的传送分配。因此,当多个站同时请求总线存取是,总线将终止所有站的请求,将不会有任何一个站获得总线分配。
CAN总线分配:保证当不同的站申请总线存取时,进行总线分配。
(3)CAN报文格式
在总线中传送报文,每帧由7部分组成。有两种报文格式,唯一不同是标识符(ID)长度不同,标准格式11位,扩展格式29位。
标准格式:报文的起始位成为帧起始(SOF),然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位标明是数据帧/请求帧,在请求帧中没有数据字节。
控制场包括标识符扩展位(IDE),指出是标准格式/扩展格式。它还包括一个保留位(ro),为将来扩展使用。其最后四个位用来指明数据场中的数据长度(DLC),数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。
应答场(ACK)包括应答位和应答分隔符,发送站发送的这两位均为隐形电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。这样,发送站可以保证网络中至少有一个站能正确接收到报文。
报文的尾部由帧结束标出,在相邻的两条报文间有一很短的间隔位,若这时没有站进行总线存取,总线将处于空闲状态。
(4)CAN数据帧的组成
远程帧:
帧起始、仲裁场、控制场、CRC场、应答场、帧结束。不存在数据场。 远程帧的RTR位必须是隐位。
DLC的数据值是独立的,可以是0~8中的任何值,位对应数据帧的数据长度。
错误帧:
各站的错误标志叠加得到、错误界定符。
错误标志两种形式:
活动错误标志:由6个连续的显位组成;
认可错误标志:由6个连续的隐位组成。错误界定符包括8个隐位。
超载帧:
超载标志(6个显位)、超载界定符(8个隐位)
发送超载帧的超载条件:要求延迟下一个数据帧或远程帧。在间歇场检测到显位
(5)数据错误检测
CAN协议不能使用应答信息,它可以将发生的任何错误用信号发出。有五种检查错误方法,其中三种为基于报文内容检查。
循环冗余检查(CRC)
在一帧报文中加入冗余检查位可保证报文正确。接收站通过CRC判断报文是否正确。
帧检查
通过位场检查帧的格式和大小来确定报文的正确性,用于检查格式上的错误。
应答错误
接收到的帧由接收站通过应答确认。若发送站未收到应答,那么说明接收站发现帧中有错误,即ACK场已损坏或网络中的报文无站接收。也可通过位检查的方法探测错误。
总线检测
CAN中的一个节点可检测自己发出的信号,即发送报文的站可以观测总线电平并探测发送位和接受位的差异。
(6)位填充
一帧报文中的每一位都由不归零码表示,保证位编码的最大效率。
在一帧报文中有太多相同电平的位,就有可能失去同步,为保证同步,同步沿用位填充产生。例:在五个连续相等位后,发送站自动插入一个与之互补的补码位;接收时,这个填充位被系统自动丢弃。CAN通过这种编码规则检查错误,若一帧报文中有6个相同位,就知道错误发生。若有一个站检测到一或多个错误,它将发送出错标志终止当前发送,以阻止接收错误报文,保证网络上报文的一致性。当大量发送数据被终止后,发送站会自动重新发送数据。作为规则,在探测到错误后23个位周期内重新开始发送。在特殊场合,系统的回复时间为31个位周期。
缺点:一个发生错误的站将导致所有数据被终止,其中有正确的数据。因此,采用自监测,总线系统应采用模块化设计。CAN协议提供一种将偶然错误从永久错误和局部站失败中区别出来的办法。这个方法可以对出错站统计评估来确定一个站本身的错误并进入一种不会对其他站产生不良影响的运行方法来实现,即站可以通过关闭自己来阻止正常数据因被错误地当成不正确的数据而被终止。
硬同步和重同步
硬同步只有在总线空间空闲状态条件下隐位到显位的跳变沿发生时才进行,表明报文传输开始。在硬同步之后,位时间计数器岁同步段重新开始计数。硬同步强行将已发生的跳变沿置于重新开始的位时间同步段内。同步规则:如果某一位时间内已有一个硬同步出现,该位时间内将不会再发生同步。再同步可能导致相位缓冲段1被延长或相位缓冲段2被短,延长或缩短时间上限由再同步跳转宽度(SJW)指定。
应用
CAN系统分为高速和低速,高速CAN系统是动力型,速度500kbps,控制ECU、ABS等;低速CAN是舒适型,速度125kbps,主要控制仪表、防盗等。
测试工具
CAN总线多用于工控和汽车领域,在开发测试阶段,需要对其拓扑结构、节点功能,网络整合等进行开发测试,需要虚拟、半虚拟、全实物仿真测试平台,并测试各节点是否符合ISO11898中规定的错误相应机制等,在生产阶段也需要生产线测试工具。
错误类型
CAN总线中存在5中错误类型:
(1)位错误
向总线送出一位的某个节点同时也在监视总线,当监视到总线位的电平和送出的电平不同时,则在该位时刻检测到一个位的错误。但在仲裁区的填充位流期间或应答间隙送出隐位而检测到显位时,不认为是错误位。送出认可错误标注的发送器,在检测到显位时也不认为是错误位。
(2)填充错误
用位填充进行编码的报文中,出现了第6个连续相同的位电平时,将检测出一个填充错误。
(3)CRC错误
CRC序列是由发送器CRC计算的结果组成,接收器用相同方法计算CRC,但计算的结果和接收到的CRC序列不同。
(4)形式错误
固定形式的位区中出现一个或多个非法位。
(5)应答错误
在应答间隙,发送器未检测到显位。
(6)错误处理
检测到出错条件的节点通过发送错误标志进行标定,当任何节点检测出位错误、填充错误、形式错误、应答错误时,由该节点在下一位开始发送出错误标志。
当检测到CRC错误时,出错标志在应答界定符后面那一位开始发送,除非其他出错条件的错误标志已经开始发送。
CAN总线中,任何一个单元可能处于3中故障状态之一:
错误激活状态、错误认可状态、总线关闭状态
错误激活单元可以照常参与总线通信,并当检测到错误时,送出一个活动错误标志。错误认可节点可参与总线通信,但是不允许送出活动错误标志,当其检测到错误时,只能送出认可错误标志,并且发送后仍为错误认可状态,直到下一次发送初始化。总线关闭状态不允许单元对总线有任何影响。
每个总线单元都有2个计数器来界定故障:发送出错计数和接收出错计数:
(1)接收器检查出错时,接收器错误计数器加1,除非所有检测错误是发送活动错误标志或超载标志期间的位错误;
(2)接收器在送出错误标志后的第一位检查出显位时,错误计数器加8;
(3)发送器送出一个错误标志时,发送器错误计数器加8。两个例外情况:一是若发送器位错误认可,由于未检测到显位应答或检测到应答错误,并且在送出其认可错误标志时,未检测到显位;另一是若仲裁器件产生填充错误,发送器送出一个隐位错误标志,而检测到的是显位。除这两情况外,发送器错误计数器不改变;
(4)发送器送出一个活动错误标志或超载标志时,检测到位错误,则发送器错误计数器加8;
(5)在送出活动错误标志、认可错误标志、超载错误标志后,任何节点都最多允许连续7个显位,在检测到第11个连续显位后,或紧随认可错误标志检测到第8个连续显位,以及附加的8个连续显位的每个序列后,每个发送器的发送错误计数都加8,并且每个接收器的接收错误计数也加8;
(6)报文成功发送后,发送错误计数减1,除非计数值已经为0;
(7)报文成功发送后,如果接收错误计数处于1~127之间,则其值减1;如果接收错误计数为0,则仍为0;如果大于127,则将其值记为119~127之间的某个数值;
(8)当发送错误计数等于或大于128,或接收错误技术等于或大于128时,节点进入错误认可状态,节点送出一个活动错误标志;
(9)当发送错误计数器大于或等于256时,节点进入总线关闭状态;
(10)当发送错误计数和接收错误计数均小于或等于127时,错误认可节点再次变为错误激活节点;
(11)在检测到总线上11个连续的隐位发送128次后,总线关闭节点将变为2个错误计数器均为0的错误激活节点;
(12)当错误计数器数值大于96时,说明总线被严重干扰。
如果系统启动期间仅有1个节点挂在总线上,此节点发出报文后,将得不到应答,检查出错误并重复该报文,此时该节点可以变为错误认可节点,但不会因此关闭总线。