图14: CAN 网络中的过载帧
它是一种当两个或多个节点同时发送消息时解决冲突的机制。在这种技术中,只要总线是空闲的,任何单元都可以传输消息。如果两个或两个以上的单元同时开始传输,那么总线的访问是冲突的,但是这个问题可以通过使用标识符进行仲裁来解决。在仲裁过程中,每个发射机都会在总线上比较传输位的值和总线上的位值。如果位值相同,则节点继续发送位。但是在任何时候,如果传输的比特值与总线值不同,显性比特就会覆盖隐性比特。CAN 消息的仲裁域由一个11位或29位 identi? er 和一个远程传输(RTR)位组成。具有最低数值的标识符具有最高的优先级。RTR 只是简单地区分 RTR 为隐性的远程帧和 RTR 为显性的数据帧。如果同时启动具有相同标识符的数据帧和远程帧,则数据帧优先于远程帧。有了仲裁这个概念,信息和时间都不会丢失。
CSMA 协议的 CAN
CSMA 是一种载波检测、多址接入协议,其中节点在共享媒体(如电子总线)上传输之前验证没有流量。在 CSMA 中,总线上的每个节点在发送消息之前等待一个特定的时间。一旦这个等待期结束,每个节点都有平等的机会发送消息。根据标识符字段中每个消息的预编程优先级,即优先级最高的标识符获得总线访问权。它在 OSI 模型的物理层上实现。让我们用一个例子来理解 CSMA。在讨论中,每个人都有平等的机会表达自己的想法,但是当一个人说话时,其他人保持安静,倾听并等待他们说话的机会。但是如果两个或者两个以上的人同时开始说话,那么他们就会发现事实并停止说话(碰撞侦测)。
错误控制
错误检查与故障限制
这是 CAN 的属性之一,使其更加健壮。CAN 协议有五种错误检测方法,其中三种在消息级,另外两种在位级。网络中的每个节点同时接受或拒绝每个帧。如果一个节点检测到一个错误,它向每个节点发送一个错误标志并销毁发送的帧,发送节点重新发送帧
消息级别
循环冗余校验
在这个阶段,通过发送节点计算一个15位的循环冗余校验,然后在 CRC 字段中发送。此值由所有节点接收。然后所有节点计算 CRC 值,并将结果与传输值进行匹配。如果值不同,则生成错误帧。由于其中一个节点没有正确接收消息,因此将重发消息。
应答槽
当发送节点发送消息时,在确认槽中发送隐性位。在接收到消息后,应答槽被主位替换,主位将确认至少有一个节点正确地接收到消息。如果这个位是隐性的,那么所有节点都没有正确地接收到消息。
表单错误
帧结束、帧间空间、确认分隔符是始终隐性的字段,如果任何节点在这些字段中检测到显性位,而 CAN 协议将其称为违规,并在一定时间后生成一个表单帧并重新发送原始消息。
位级
填写错误
比特填充——在通信和数据传输中使用的一种非常常见的技术,通过插入非信息比特来获得相同的比特率或者填充帧。这些额外的比特被数据链路层删除以检索原始消息。Can 总线不会因为使用了 NRZ 方法而处于空闲状态。在同一值的连续五个位之后,带有补码或相反值的位被填充到位流中。如果在 SOF 和 CRC 分隔符之间检测到相同值的六位,则生成错误帧。检测到错误后,终止传输并重复帧。如果错误继续,那么车站或节点可能会自行关闭,以防止总线被绑定。
位错误
发送比特的节点总是监视总线。如果发送端发送的比特值与总线上的比特值不同,则生成错误帧。但是,在仲裁场或者确认槽中,一个隐性位被发送,一个显性位被接收,这是一个例外。那么当监视主位时就不会发生位错误。
CAN 协议最初是为汽车车载组网而开发的,现在已经扩展到其他各个行业。豪华轿车的应用程序已经开始在卡车、公共汽车、火车和有轨车辆等重型车辆上使用。CAN 总线的独特功能使得各种电子设备之间可以相互通信,这使得它在医疗领域占有重要地位。例如重症监护病房和手术室,时间和沟通是最重要的。娱乐业还利用 CAN 协议改进演播室的灯光和门系统控制功能,控制剧院、活动厅等舞台。赌博机和玩具是娱乐领域的其他例子。在科学领域,高能实验和天文望远镜都采用 CAN 嵌入式网络。