轻松学习CAN总线系列:CAN数据格式解析

CAN帧

  • 帧类型
  • 数据帧
  • 远程帧
  • 寻址
  • CRC和应答
  • 位填充
  • 帧类型

    数据帧(Data frame)

    为传输用户数据,ISO 11898-1定义了数据帧。数据帧可以传输的最大有效负载为八个字节,即数据场。除了数据场,数据帧还包括执行CAN通信协议所需的许多其他场,包括报文ID、数据长度代码(DLC)、校验场(循环冗余校验序列 – CRC序列)以及应答场(ACK)等。

    远程帧(Remote frame)

    通常ECU会通过数据帧主动发送相关数据,但某些情况也可能用到远程帧。使用远程帧可以从其他任何CAN节点请求用户数据(即数据帧)。除了缺少数据场以外,远程帧与数据帧结构相同。

    错误帧(Error frame)

    错误帧可用于指示通信期间检测到的错误。错误帧将强行中止正在进行的错误数据传输。错误帧的结构与数据帧或远程帧明显不同,仅由两部分构成:错误标志(error flag)和错误界定符。

    数据帧


    数据帧是传输用户数据的载体,CAN通信中的主要角色。数据帧由多种不同部分构成,每个部分都会在传输过程中执行一项重要任务。例如:启动并维护ECU节点之间的同步,建立通信矩阵中定义的通信关系,以及传输和保护用户数据。
    Arbitration Field:仲裁段:(CAN总线是如何解决多点竞争的问题?由仲裁段给出答案)

    Control Field:控制段:
    共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0(r0,r1默认为显性电平)和DLC组成。
    Data Field:数据段:
    为0-8字节,短帧结构,实时性好,适合汽车和工控领域。
    CRC Field:CRC段:
    CRC校验段由15位CRC值和CRC界定符组成。
    ACK Field:ACK段:
    当接收节点接收到的帧起始到CRC段都没错误时,它将在ACK段发送一个显性电平,发送节点发送隐性电平,线与结果为显性电平。

    SOF(Start of Frame,帧起始)
    SOF是数据帧传输的起始位。发送方(sender)会发送一个显性电平作为SOF,由于总线空闲时总线会保持隐性电平,因此SOF发出后会产生一个跳变沿用于整个CAN网络的时间同步。为了在帧传输期间保持与发送方的同步,接收方会在所有隐性电平到显性电平的跳变沿进行是否与发送方保持同步的判断。如果出现偏差,接收方将按照相关相位误差量重新进行同步(重同步)。

    ID和RTR(Remote Transmission Request,远程传输请求位)
    SOF之后是标识符(ID),用于区分数据帧的优先级,并根据通信矩阵中定义的收发关系为节点中的接收过滤器提供过滤依据。ID之后是RTR位。发送方将其用于通知接收方帧的类型(数据帧或远程帧)。RTR位为显性表示数据帧,隐性则表示远程帧。

    SRR(Substitute Remote Request,替代远程请求)
    为什么SRR永远置1而不是置0,最主要的作用是,划分标准帧与扩展帧的优先级。SRR确保竞争时,标准帧优先于扩展帧。SRR之后的IDE也是同样的作用。

    IDE(Identifier Extension bit,标识符扩展位)
    IDE位用于区分标准格式和扩展格式。标准ID有11位,扩展ID有29位,“Physical Transfer of a Data Frame in Standard Format”图展示了这两种格式。

    DLC(Data Length Code,数据长度代码)
    DLC表示数据场中的有效负载的字节数。一个数据帧最多可以传输八个字节。

    CRC(cyclic redundancy check,循环冗余校验码)和ACK(acknowledge,应答)
    校验场使用以界定符(delimiter)为结尾的CRC来保护有效负载。接收方在ACK位做出肯定或否定的应答,ACK位后同样有一位界定符。

    EOF
    EOF由7个连续隐性位组成,在此之后,报文传输结束。

    ITM
    帧间空间,Intermission (ITM),又称Interframe Space (IFS),连续3个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。

    知识强化
    为加深对CAN数据帧的理解,可以查看“Physical Transfer of a Data Frame in Standard Format”图并通过习题进行练习。该图显示了高速CAN网络中标准格式数据帧的物理传输。您可以尝试在布局练习中以正确顺序排列标准格式数据帧的所有部分。

    远程帧

    请求数据
    远程帧用于从任何CAN节点请求数据(即数据帧)。但是数据传输并不基于请求,而是主要基于信息生产者的自我主动性,因此汽车应用程序中几乎不使用远程帧。远程帧支持标准格式和扩展格式。

    通过RTR决定
    除缺少数据场以外,远程帧与数据帧布局相同。数据帧和远程帧是以RTR位来区分的。数据帧的RTR位为显性,远程帧的RTR位则为隐性。

    两种帧,同一ID
    原则上,可以为CAN网络中的所有数据帧定义远程帧,仅需确保远程帧的标识符与所关联数据帧的ID匹配。发送节点通过发送数据帧来响应远程帧。

    远程帧和响应
    如果CAN控制器具有对象存储,则该CAN控制器会自动响应远程帧。不具有对象存储的CAN控制器必须先让主机知道远程帧,然后才能发起响应。 在理想情况下,远程帧的请求会立即触发对应数据帧的响应。但在请求和响应之间可能会插入具有更高优先级的CAN报文。

    寻址

    报文寻址
    CAN网络中的通信基于与内容相关的寻址。CAN节点本身没有ID,但是可以通过ID区分CAN报文。所有CAN节点都会收到总线上广播发送的所有CAN报文。每个接收方都根据需求自行选择CAN报文。这种接收方选择寻址非常灵活,但需要每个接收方对接收到的CAN报文进行过滤(接收过滤)。

    标准格式和扩展格式
    用户可以选择以下两种报文格式:标准格式和扩展格式。两种格式的标识符长度不同。在标准格式中,ID有11位。在扩展格式中,ID有29位。
    与标准格式ID相比,扩展格式ID由两个部分构成:基本ID和扩展ID。连接这两个部分的是IDE(Identifier Extension,标识符扩展)位和SRR(Substitute Remote Request,替代远程请求)位。
    显性IDE位表示CAN报文为标准格式。隐性IDE位表示CAN报文为扩展格式。在扩展格式中,始终以隐性方式传输的SRR位取代了标准格式的RTR位,并且控制场的前两位(r0和r1)没有实际作用,两者都作为显性位传输。

    CRC和应答

    传输可靠性
    串行通信在汽车环境中遇到的最大难题之一就是如何保证极高的传输可靠性。CAN总线中使用的CRC校验是功能最强大的错误检测方法之一。

    CRC序列
    CRC方法根据要传输的位(从SOF到数据场结束)和ISO 11898-1定义的生成多项式G(x)计算CRC序列。CRC序列位于数据场之后。接收方会采用同样的方法针对接收到的位(SOF开始到数据场结束)计算CRC并与接收到的报文中的CRC序列进行对比,这样可以非常可靠地检测是否发生了传输错误。(例外情况:当CRC序列本身遭到干扰破坏时)。

    应答
    根据计算后的结果,每个接收节点都会给出应答,与节点是否会过滤该报文无关。接收方的应答不是肯定就是否定。ACK 位中的显性电平表示肯定应答,隐性电平表示否定应答。

    ACK界定符
    为了进行错误跟踪,ACK界定符始终以隐性方式传输。由于发送方以隐性方式传输ACK 位和ACK界定符,因此一个肯定应答足以告知发送方报文已正确传输。这就是CAN网络中的应答方法被称为节点肯定应答的原因。
    您可通过交互式动画了解CAN网络中的应答。该图假设CAN网络中存在一个发送方和两个肯定应答的接收方。

    ACK错误和错误标志
    在有节点给出肯定应答的情况下,如果还有其他节点给出否定应答,那么这些否定应答不会被其他节点收到。为确保网络范围内的数据一致性,这些节点会在ACK界定符之后发送错误标志。
    如果没有一个肯定应答,则ACK位会保持隐性,发送方将检测到ACK错误,并通过发送错误标志来终止正在进行的报文传输。ACK错误表示由发送方引起的错误或总线上没有接收方引起的错误。






    位填充

    同步
    数据传输正确的基本前提是网络中通信节点之间同步。起始位(帧起始 – SOF)的隐性至显性的跳变沿用于同步CAN报文。之后,重同步(resynchronization)机制用于保持同步,直到报文传输结束为止。

    重同步
    重同步机制基于对隐性至显性跳变沿的评估。位填充机制保证了传输过程中有足够的跳变沿。ISO 11898-1规定,发送方在传输连续5个相同位后必须传输一个相反的位;即使连续5个相同位后本就是一个相反位,也需要添加填充位。

    位填充区
    由于位填充从以SOF的传输为开始,以CRC序列的最后一位的传输为结束,因此在传输包含8个数据字节的标准格式的数据帧时,在极限情况下,应有24个填充位。所以,理论上标准格式数据帧最多包含132位。
    “Bit Stuffing”图可以帮助您迅速理解位填充机制。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 轻松学习CAN总线系列:CAN数据格式解析

    发表评论