是时候聊一下CAN总线了(中)——CAN的信号和物理介质
CAN总线简介
CAN总线(Controller Area Network, CAN)是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11898),是国际上应用最广泛的现场总线之一。它是德国BOSCH公司从80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率最高可达1Mbps。通信距离最远可达bai10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M)
如果按照OSI七层网络模型来说的话,ISO11898协议规定的CAN总线协议处于链路层上的通讯标准。换句话说,我们平时常说的CAN总线指的只是链路层上面的数据,具体更高层面的传输层和应用层等上层协议的规定,CAN总线标准并没有说明。因此,在实际应用中有着额外的CAN总线传输层协议,如重型车辆诊断用的KWP2000,柴油机控制常用的J1939协议,初次之外,还有用的非常多的CANOpen协议。这些协议都是工作在我们今天讨论CAN总线基础上的,暂时不做深入讨论。
图1 CANOpen
与传统的总线相比,CAN总线有以下优点:
Ø废除传统的站地址编码,代之以对通信数据块进行编码,可以多主方式工作;
Ø采用非破坏性仲裁技术,当两个节点同时向网络上传送数据时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响继续传输数据,有效避免了总线冲突;
Ø采用短帧结构,每一帧的有效字节数为8个,数据传输时间短,受干扰的概率低,重新发送的时间短;
Ø每帧数据都有CRC校验及其他检错措施,保证了数据传输的高可靠性,适于在高干扰环境下使用;
Ø节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其他操作不受影响;
Ø可以点对点,一对多及广播集中方式传送和接受数据。
Ø具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;
Ø采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;
Ø具有优先权和仲裁功能,多个控制模块通过CAN控制器挂到CAN-Bus上,形成多主机局部网络;
Ø可根据报文的ID决定接收或屏蔽该报文;
Ø可靠的错误处理和检错机制;
Ø发送的信息遭到破坏后,可自动重发;
Ø节点在错误严重的情况下具有自动退出总线的功能;
Ø报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。
CAN总线的信号表示
CAN总线使用两线制的差分线来传输信号,这个两线制的CAN总线信号分别叫做CAN_H和CAN_L,注意这里的CAN_H并不是指CAN高电平,CAN_L也不是指CAN低电平,尽管我们平时叫它CAN高和CAN低,但是它们的命名和高低电平没有任何关系。
CAN_H和CAN_L的中间电平为2.5V,一旦当有电平变换时,CAN_H会向5V去跳变,而CAN_L会向0V去跳变。最终使用CAN_H和CAN_L的差值表示当前CAN总线传输的是逻辑0还是逻辑1。
在CAN总线上的信号有两种不同的信号状态,我们分别称之为显性(Dominant)的逻辑0和隐形(recessive)的逻辑1。CAN_H和CAN_L电平很接近甚至相等的时候,总线表现隐性的,而两线点位差较大时表现为显性的,按照定义的:
ØCAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。
ØCAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。
如图2所示,CAN总线上表示逻辑“0b101”时的信号状态
图2 CAN总线显性电平和隐形电平
CAN总线是一种半双工的差分系统总线,并且不像RS485一样严格按照单主机的形式来组成通讯系统,因为一个CAN网络中允许多个主机的存在。那么针对于这样的多主机系统,必定要有一种可以用于总线仲裁系统,即,当CAN总线被一个主机占用之后,其余主机上的数据无法正常发出。
CAN总线采用的"线与"的规则进行总线冲裁。即1&0=0;所以0为显性。如果总线上只要有一个节点将总线拉到低电平(逻辑0)即显性状态,总线就为低电平(逻辑0)即显性状态而不管总线上有多少节点处于传输隐性状态(高电平或是逻辑1),只有所有节点都为高(隐性),总线才为高,即隐性。
CAN总线的物理介质和拓扑
关于CAN总线的物理介质,一般采用双绞屏蔽线。如图3所示。
图3 屏蔽双绞线
在CAN总线网络上的两端的节点上,需要加一颗120Ω的终端电阻来消除由于过长传输线产生的振铃干扰。如图4所示。
图4 CAN总线的终端电阻
下一篇,我们将来详细讨论CAN总线的帧格式。