• 布线减少,成本低
• 接线简单,节省时间
• 丢失消息的自动重传
• 支持错误检测
• 灵活的数据传输速率
CAN代表控制器局域网,专为满足汽车行业的需求而设计。在引入CAN之前,每个电子设备都使用多条电线连接到其他设备以实现通信。但是当汽车系统中的功能增加时,由于布线系统繁琐,维护起来很困难。在CAN总线系统的帮助下,只需将每个ECU连接到公共串行总线,即可让ECU相互通信,而无需太多复杂性。因此,与汽车系统中使用的其他协议(即CAN与LIN)相比,CAN由于复杂性较低而且更加稳健。
CAN协议可以被定义为在一个通过串行总线连接的电子设备网络中传输和接收信息的一套规则。CAN网络中的每个电子设备被称为一个节点。每个节点都必须有硬件和软件嵌入其中进行数据交换。一个CAN总线系统的每个节点都有一个主机微控制器单元、CAN控制器和CAN收发器。CAN控制器是一个可以嵌入在主机控制器内或单独添加的芯片,它需要管理数据并通过收发器在串行总线上发送数据,反之亦然。CAN收发器芯片用于使信号适应CAN总线水平。
CAN是一个基于消息的协议,每个消息都由一个预先定义的唯一ID来识别。传输的数据包被CAN总线网络中的所有节点接收,但根据ID,CAN节点决定是否接受它。当多个节点试图同时发送数据时,CAN总线遵循仲裁过程。
CAN收发器处理的CAN信号有单端信号和差分信号(CANH和CANL)。CAN_High和CAN_Low线路在理想状态下为2.5V。CAN将逻辑“0”定义为显性位,将逻辑“1”定义为隐性位。传输显性位时,CAN_High变为 3.5V,CAN_Low变为1.5V,即显性位的差分电压为2V。当发送隐性位时,CAN_High和 CAN_Low线被驱动到2.5V,表示隐性位的差分电压为0V。CANH和CANL线的物理端应加120欧姆的CAN总线终端电阻,以避免任何信号反射。
图1. CAN总线差分信号
帧是一种定义的结构或格式,在网络中携带有意义的数据(字节)。CAN有四种帧类型:数据帧、远程帧、错误帧、过载帧。
数据帧包含用于传输的节点数据的帧。数据帧由提供信息的附加字段组成,即仲裁字段、控制字段、数据字段、CRC字段、2位确认字段和帧结束。
有两种类型的数据帧:标准帧格式、扩展帧格式
两种格式的唯一区别是标准帧支持11位标识符,扩展帧支持29位标识符,由11位标识符和扩展18位标识符组成。IDE位在标准帧中是显性的,在扩展帧中是隐性的。
标准帧主要用于发送数据。
图2. 标准帧
• SOF - 帧的开始,表示帧传输的开始。
• Identifier - 11位唯一的ID,也代表信息的优先级值越低,优先级越高。
• RTR - 远程传输请求,它对数据帧是显性的,对远程帧是隐性的。
• IDE - 单一识别扩展,它对标准帧是显性的,对扩展帧是隐性的。
• R0 - 保留位。
• DLC - 数据长度代码,定义了正在发送的数据的长度,它的大小为4位。
• 数据——要传输的数据和长度由DLC决定。
• CRC——循环冗余校验,它包含前面应用程序数据的校验和,用于错误检测。
• ACK——确认,它的长度为2位,如果接收到准确的消息,则占主导地位。
• EOF——帧的末端,必须是隐性的。
• IFS——帧间空间,它包含控制器将正确接收的帧移动到正确位置所需的时间。
图3. 扩展帧
它与标准帧相同,但有一些额外的字段。
SRR替代反向请求。SRR位总是作为隐性位传输,以确保基本数据帧与扩展数据帧相比具有较高的优先权,如果两个信息具有相同的11位标识符,它还包含一个11位标识符以外的18位标识符。
r1- 保留位。
远程帧与数据帧相似,但有两点不同。远程帧是由接收方发送的,用于请求发送方提供数据,所以远程帧和数据帧之间的区别是远程帧不包含任何数据字段,因为它不用于数据传输。第二个区别是远程帧的RTR 位为隐性状态,当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧RTR位是显性的,数据帧将在仲裁中赢得总线控制权。
错误帧是用于接收和发送消息时检测出错误时,通知错误的帧。错误帧由六个显性位组成的错误标志和由八个隐性位组成的错误界定符构成。
错误标志分为:主动错误标志、被动错误标志
主动错误标志:当错误主动节点检测到一个总线错误时输出的一个主动错误标志,来中断当前的数据发送。其中主动错误标志由6个连续的显性位构成。
被动错误标志:当错误被动节点检测到一个总线错误时输出的一个被动错误标志,并紧接着发送错误定界字段。其中错误被动标志由6个连续的隐性位构成。
错误计数器:如果在总线上检测到一个错误,那么TEC或REC计数就会增加。
• 当 TEC 和 REC 小于 128 时,发送活动错误帧
• 当 TEC 或 REC 大于 127 且小于 255 时,传输被动帧
• 当TEC大于255时,节点进入总线关闭状态,此时不能发送帧
图4. 错误转换状态图
过载帧是用于接收单元通知发送单元它尚未完成接收准备的帧。过载帧中包含两个字段,过载标志和过载界定符。过载标志由6个显性位和紧随其后的其他节点产生的过载标志构成,过载界定符由8个隐性位组成,在以下两种情况下,节点会发送过载帧:
仲裁是一种解决冲突的机制,当一个以上的节点同时准备传输信息时。只要总线是空闲的,任何节点都可以传输数据。如果多个节点同时准备传输数据,对总线的访问就会发生冲突,可以通过使用标识符的仲裁来解决。在仲裁过程中,每个发射器都会将传输的比特值与总线上的比特值进行比较。如果比特值是相同的,节点继续传输比特。如果传输的比特值与总线上的比特值不一样,那么,优势比特就会覆盖劣势比特。
CAN报文的仲裁字段由1位或29位标识符和RTR位组成。具有最低值的标识符具有最高的优先权。如果数据帧和远程帧都有相同的标识符,并准备在同一时间发送数据,那么数据帧的优先级就高,因为远程传输位(RTR)在数据帧中是主导位,在远程帧中是隐性位。
与其他协议相比,即CAN与LIN、CAN与MOD总线相比,CAN协议是稳健的,错误检查使CAN协议达到稳健。通过这些机制,如果检测到错误,节点就会传送一个错误帧并销毁传送的帧。
循环冗余校验值由发送节点计算并通过CRC字段发送,该值被所有节点接收。然后所有接收节点计算CRC值并将该值与发送值匹配。如果值不同,则生成错误帧。
当发送节点发送消息时,在确认时隙中发送一个隐性位。如果接收到一条消息,则确认槽由显性位替换,该位将确认至少一个节点正确接收到该消息。如果该位是隐性的,则没有节点正确接收到消息。
当一个固定形式的位场含有1个或多个非法位,则检测到一个形式错误,如帧结尾固定为隐性位,却检测到了显性位。
*内容来源自PathPartner Technology,版权归原作者所有,如涉及版权问题请联系沟通
审核编辑:符乾江
全部0条评论
快来发表一下你的评论吧 !