📅  最后修改于: 2020-11-10 06:06:56             🧑  作者: Mango
CAN代表控制器局域网协议。它是罗伯特·博世(Robert Bosch)在1986年左右开发的协议。CAN协议是一种标准设计,允许微控制器和其他设备在没有任何主机的情况下彼此通信。使CAN协议在其他通信协议中独树一帜的功能是总线的广播类型。在此,广播意味着将信息发送到所有节点。该节点可以是允许计算机通过USB电缆或以太网端口通过网络进行通信的传感器,微控制器或网关。 CAN是基于消息的协议,这意味着消息带有消息标识符,并根据标识符确定优先级。 CAN网络中不需要节点识别,因此从网络中插入或删除节点变得非常容易。它是串行半双工和异步类型的通信协议。由于CAN网络通过两线总线连接,因此CAN是两线通信协议。导线为双绞线,两端均具有120Ω特性阻抗。最初,它主要用于车辆内部的通信,但现在已用于许多其他环境。像UDS和KWP 2000一样,CAN也可以用于车载诊断。
由于电子设备的数量增加,因此需要集中式标准通信协议。例如,现代汽车中用于各种子系统(例如仪表板,变速箱控制,发动机控制单元)的TCU可能超过7个。如果所有节点都是一对一连接,则通信速度将非常高,但是电线的复杂性和成本将非常高。在上面的示例中,单个仪表板需要8个连接器,因此为了解决此问题,CAN作为一种集中式解决方案被引入,它需要两条线,即CAN high和CAN low。使用CAN协议的解决方案由于具有消息优先级,因此非常有效,并且灵活地插入或删除节点而不会影响网络。
最初,CAN协议旨在解决车辆内部发生的通信问题。但是后来,由于其提供的功能,它被用于其他各个领域。以下是CAN协议的应用:
众所周知,OSI模型将通信系统划分为7个不同的层。但是CAN分层体系结构由两层组成,即数据链路层和物理层。
让我们了解这两层。
CAN规范定义了在CAN标准ISO 11898中定义的CAN协议和CAN物理层。ISO11898具有三个部分:
CiA DS-102:CiA的完整形式是“自动化中的CAN”,它定义了CAN连接器的规范。
就实现而言,在软件,应用程序,操作系统和网络管理功能的帮助下实现了CAN控制器和CAN收发器。
让我们了解一下CAN帧的结构。
现在,我们将了解如何通过CAN网络传输数据。
一个CAN网络由多个CAN节点组成。在上述情况下,我们考虑了三个CAN节点,并将它们分别命名为节点A,节点B和节点C。CAN节点由以下三个元素组成:
在上图中,非屏蔽双绞线电缆用于发送或接收数据。也称为CAN总线,CAN总线由两条线组成,即CAN低线和CAN高线,它们分别也称为CANH和CANL。由于施加到这些线路的差分电压而发生传输。由于环境原因,CAN使用双绞线电缆和差分电压。例如,在汽车,电动机,点火系统和许多其他设备中,由于噪声会导致数据丢失和数据损坏。两条线的扭曲也减小了磁场。总线两端的电阻为120Ω。
借助差分电压,我们将确定如何通过CAN总线传输0和1。上图是显示CAN低和CAN高电压电平的电压图。在CAN术语中,逻辑1被认为是隐性的,而逻辑0被认为是隐性的。当CAN高线和CAN低线施加2.5伏特时,实际的差分电压将为零伏特。 CAN收发器将CAN总线上的零伏作为隐性或逻辑1读取。CAN总线上的零伏是总线的理想状态。当CAN高线被拉高至3.5伏而CAN低线被拉低至1.5伏时,总线的实际差分电压将为2伏。 CAN收发器将其视为显性位或逻辑0。如果总线状态达到显性或逻辑0,那么任何其他节点都将无法变为隐性状态。
从CAN特性中学到的要点
从上面的场景中,我们知道主导状态覆盖了隐性状态。当节点同时发送显性位和隐性位时,总线将保持显性。隐性级别仅在所有节点都发送隐性位时发生。这种逻辑被称为“与”逻辑,并且在物理上被实现为集电极开路。
众所周知,消息是根据仲裁字段中设置的优先级发送的。对于标准帧,消息标识符为11位,而对于扩展帧,消息标识符为29位。它允许系统设计者在设计本身上设计消息标识符。消息标识符越小,消息优先级越高。
让我们通过流程图了解仲裁的工作方式。
发送者要发送消息并等待CAN总线空闲。如果CAN总线空闲,则发送方发送SOF或用于总线访问的显性位。然后,它以最高有效位发送消息标识符位。如果节点在传输隐性位的同时检测到总线上的显性位,则意味着该节点丢失了仲裁并停止传输其他位。一旦总线空闲,发送者将等待并重新发送消息。
如果考虑三个节点,即节点1,节点2和节点3,则这些节点的消息标识符分别为0x7F3、0x6B3和0x6D9。
上图显示了具有最高有效位的所有三个节点的传输。
第11位:由于节点的所有三个位都是隐性的,因此总线位也将保持隐性。
第十位:所有节点都将第十位设为隐性,因此总线也将保持隐性。
第9位:节点1具有隐性位,而其他节点具有显性位,因此总线也将保持显性。在这种情况下,节点1失去了仲裁,因此它停止发送位。
第8位:节点2和节点3都在发送隐性位,因此总线状态将保持隐性。
第7位:节点2发送显性位,而节点3发送隐性位,因此总线状态将保持显性。在这种情况下,节点3失去了仲裁,因此它停止发送消息,而节点2赢得了仲裁,这意味着它将继续保持总线直到收到消息为止。