图 1‑4 低速CAN信令
在高速和低速CAN中,从隐性信号向显性信号过渡的速度更快,因为此时CAN线缆被主动积极地驱动。显性向隐性的过渡速度主要取决于CAN网络的长度和导线的电容。
高速CAN通常被用于汽车和工业应用,在这些应用环境中,总线通常从一端横跨至另一端。容错CAN总线则经常被用在需要连接在一起的一组节点。
ISO规格只要求总线共模电压必须保持在最小和最大范围内,但不定义如何将总线电压保持在这个范围。
CAN总线必须使用终端电阻。终端电阻可以用来抑制信号反射,同时可以使总线电压回到隐性状态或者闲置状态。
高速CAN在总线两端使用120Ω电阻。低速CAN在每个节点均使用电阻。也有其他类型的终端,例如ISO 11783中定义了终端偏压电路。 [8]
终端偏压电路使用由4条导线组成的线缆,除了CAN信号线以外还有电源线和地线。这在每段总线两端提供自动偏压和终端功能。ISO11783网络是专为热拔插总线段和电子控制单元设计的。
CAN总线节点图 1‑5 CAN总线节点
每个节点需要:
- 中央处理器、微处理器或主处理器
- 处理主机决定收到的信息的意思以及想要传输的信息。
- 传感器、驱动器和控制设备可以与主处理器连接。
- CAN控制器;通常是集成单片机的一部分
接收:CAN控制器将从总线上接收的串位字节存储直到整个消息可用,之后主处理器可以获取这个消息(通常由于CAN控制器触发一个中断)。
发送:主处理器发送传递信息到CAN控制器,之后当总线空闲时将串位信息传递至总线。
收发器;由ISO11898-2/3介质访问单元(MAU)标准定义
接收:把数据流从CAN总线层转换成CAN控制器可以使用的标准。 CAN控制器通常配有保护电路。
传输:把来自CAN控制器的数据流转换至CAN总线层。
每个节点能够发送和接收信息,但不是同时进行的。 一个消息或帧主要包括标识符(ID),它表示信息的优先级,最多八个数据字节。CRC、ACK和其他帧部分也是消息的一部分。改进了的CAN FD将每个帧拓展至最多64字节。 消息采用不归零(NRZ)格式串联传送到主线并可被所有节点接收。
被CAN网络连接的设备通常是传感器,驱动器和其他控制设备。 这些设备通过一个中央处理器、一个CAN控制器,和一个CAN接收器连接至总线。
数据传输
CAN数据传输如果出现争执,将会使用无损位仲裁解决办法。该仲裁法要求CAN网络上的所有节点同步,对每一位的采样都在同一时间。这就是为什么有人称之为CAN同步。然而,同步这个术语在此并不精确,因为数据以异步格式传输而不包含时钟信号。
CAN规范中使用术语"显性"位和"隐性"位来表示逻辑高低。显性是逻辑0(由发信器积极驱动通过电压)而隐性是逻辑1(被动地通过电阻返回到一个电压)。 闲置状态代表隐性的水平,也就是逻辑1。如果一个节点发送了显性位而另一个节点发送一个隐性位,那么总线上就有冲突,最终结果是显性位“获胜”。这意味着,更高优先级的信息没有延迟。较低优先级的节点信息自动在显性位传输结束,6个时钟位之后尝试重新传输。这使得CAN适合成为一个实时优先通讯系统。
逻辑0或1的确切电压取决于所使用的物理层,但CAN的基本原则要求每个节点监听CAN网络上的数据,包括发信节点本身。如果所有节点都在同时发送逻辑1,所有节点都会看到这个逻辑1信号,包括发信节点和接受节点。如果所有发信节点同时发送逻辑0信号,那么所有节点都会看到这个逻辑0信号。
当一个或多个发信节点发送逻辑0信号,但是有一个或多个发信节点发送了逻辑1信号,所有节点包括发送逻辑1信号的节点也会看到逻辑0信号。当一个节点发送逻辑1信号但是看到一个逻辑0信号,它会意识到线上有争执并退出发射。通过这个过程,任何传送逻辑1的节点在其他节点传送逻辑0时退出或者失去仲裁。失去仲裁的节点会在稍后把信息重新加入队列,CAN帧的比特流保持没有故障继续进行直到只剩下一个发信节点。这意味着传送第一个逻辑1的节点丧失仲裁。由于所有节点在开始CAN帧时传输11位(或CAN 2.0B中是29位)标识符,拥有最低标识符的发信节点在起始处拥有更多0。那个节点赢得仲裁并且拥有最高优先级。
例如,一个11位标识符的CAN网络,有两个节点,他们的ID分别为15(二进制表示为00000001111)和16(二进制表示为00000010000)。如果这两个节点同时传输,每个都会优先传输它们标识符中的前6个0而不触发仲裁。
表 1‑2 11位标识符的CAN网络
起始位 | ID位 | 帧剩下的部分 | |||||||||||
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
节点15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |
节点16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 停止传输 | ||||
CAN数据 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
当ID中的第7位传输时,节点16为其ID发送1(隐性),而节点15为其ID发送0(显性)。当这种情况发生时,该节点16知道自己发送了1,但在总线上看到了0,意识到有冲突发生并且自己失去仲裁。节点16停止传送而节点15继续传输自己的ID,没有丢失任何数据。拥有最低ID的节点总是赢得仲裁,因此具有最高优先级。
长度小于40m的网络最高支持的比特率高达1百万比特/秒。降低比特率可以允许使用更长的网络距离(例如,125千比特/秒支持最大500米)。改进的CAN FD标准允许仲裁后升高比特率,可以将数据区块速度增加至仲裁位速率的八倍。
ID分配信息ID在单条CAN总线上必须是唯一的,否则两个节点将在仲裁位(ID)传送结束后继续传输,造成错误。
1990年代早期,为信息选择标志符(ID)的准则仅仅基于数据的种类和发信节点。但是,当标志符同样代表着信息的优先级时,这会带来不好的实时响应。在这种情况下,通常要求CAN总线只能使用大概30%才能保证信息可以在截止时间之前到达。然而,如果信息的标志符根据信息的优先级决定,更低标志符的信息获得更高优先级,那么在不损失数据的前提下,总线的使用率可以达到70%到80%。
位时序CAN网络上的所有节点必须运行在相同的标称比特率下,但噪音、相移、振荡频率容差和振荡频率漂移导致实际的比特率可能与标称比特率不同。[9]由于没有使用一个单独的时钟信号,需要一个同步节点方法。同步在仲裁机制中十分重要,因为仲裁中的节点需要能够同时看到它们传输数据的数据和其他节点的传输数据。 同步在确保节点间震荡时间不同时不发生错误上十分重要。
总线闲置一段时间后,在第一个隐性信号向显性信号转换时(起始位) 进行硬同步。再次同步发生在传输帧期间的每次从隐性向显性转换时。CAN控制器期望在标称位时间内发生多次转换。如果并没有在期望的确定时间发生,控制器将根据这调整标称位时间。
调整是通过将每一位划分成多个称为量子的时间段,并分配一定数量的量子到位中的四个阶段完成的。这四个阶段分别为:同步、传播、相位段1和相位段2。
图 1‑6 每位10个量子的CAN位时序的例子
每位10个量子的CAN位时序的例子。
位被分成的量子数量会因控制器的不同而不同,每一个阶段分配的量子数会因比特率和网络状况的不同而改变。
在预期时刻之前或之后发生的过渡会促使控制器计算时间差,并根据计算所得的时间差延长相位段1或者缩短相位段2。这有效地改变接收器到发信器的时序,将它们同步在一起。这个重新同步过程不断地在每次隐性向显性过渡时进行已确保发信器和接收器保持同步。不断地重新同步降低了噪声产生的错误,让同步至已经失去仲裁的节点的接收节点重新同步到赢得仲裁的节点。
层级CAN协议与很多网络协议相似,可以被分解为下列抽象层:
- 应用层
- 对象层
- 信息过滤
- 消息和状态处理
- 传输层
大多数CAN标准应用在传输层。传输层从物理层接收消息并将这些信息传递给对象层。传输层负责特定时序、同步、信息位构架、仲裁、确认、错误检测及发信和故障约束。它的职责为:
- 故障约束
- 错误监测
- 消息验证
- 信息确认
- 仲裁
- 信息帧
- 传输速率和时间
- 路由信息
图 1‑7 CAN总线包含终端电阻的电气连接样例
CAN总线(ISO11898-1:2003)最初指定的链路层协议仅包括对物理层的抽象需求。 物理层关于电气方面的(电压,电流,数量导体)规定来自于ISO11898-2:2003,该协议目前被广泛接受。但是,物理层关于机械方面的(接头种类和数量、颜色、标签、标准输出)尚未被正式指定。因此,汽车的电子控制单元(ECU)通常会有定制的接口和各种线缆组成CAN总线。尽管如此,领域中已经出现若干机械方面的标准,最常见的是使用9个引脚的D-sub型插头,拥有以下引脚分布:
- 引脚2:CAN-Low (CAN−)
- 引脚3:GND (地线)
- 引脚7:CAN-High (CAN )
- 引脚9:CAN V (供电)