CAN-Bus数据链路层目录概述远程帧过载帧与帧间隔错误帧数据帧小结概述1.5小节介绍了CAN-bus物理层相关知识,本小节重点介绍CAN-bus的数据链路层。数据链路层DataLinkLayer解决的问题•收发目标选择•总线竞争•……•数据校验•错误机制CAN-bus上传输的基本单位是CAN帧。CAN-bus通过各种不同的帧实现以上这些功能,所以下面从介绍CAN-bus的帧开始。Let’sGo!应用层Application物理层PhysicalLayer...CAN节点分层CAN-bus帧分类CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔种类型。5用于发送节点向接收节点传送数据,是使用最多的帧类型用于接收节点向某个发送节点请求数据用于当某节点检测出错误时向其他节点通知错误的帧用于接收节点向发送节点通知自身接收能力的帧用于将数据帧或远程帧与前面的帧分离的帧数据帧远程帧错误帧过载帧帧间隔目录概述远程帧过载帧与帧间隔错误帧数据帧小结1DLC114RTRr1r0数据帧数据帧是使用最多的帧,结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。仲裁段数据段ACK段1ID111DLC114Data0~64CRC15111EOF7与标准帧相同帧结构标准帧扩展帧RTRIDEr018ID1111IDSRRIDE帧起始控制段CRC段帧结束由于帧起始和帧结束比较简单,先说明;其他段随后逐一说明……帧起始和帧结束帧起始和帧结束用于界定一个数据帧,无论是标准数据帧或扩展数据帧都包含这两个段。帧起始仲裁段控制段数据段CRC段ACK段帧结束数据帧结构标准帧或扩展帧由单个显性位组成。总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。由7个连续的隐性位组成。仲裁段CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。ID[0:10]RTR标准格式ID[0:10]SRRIDEID[11:28]RTR扩展格式远程帧发送标识位,占1bit,为显性替代远程帧请求位,占1bit,为显性识别符扩展位,占1bit,标准帧中该位位于控制段,为显性;扩展帧中该位位于仲裁段,为隐性。CAN-bus是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。帧起始仲裁段控制段数据段CRC段ACK段帧结束数据帧结构组成29位ID,前11位与标准帧的11位ID编码位置相同CAN控制器电平监测示意总线仲裁CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。发送位的电平监测总线的电平进行比较通信数据线根据比较结果判断是否停止发送和其他处理如果该位属于仲裁段,则退出总线竞争;如果处于其他段,则产生错误事件(帧ACK时间段或被动错误标志传输期间除外)。SOF109876543210RTR控制段DATA总线仲裁假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是:只听模式只听模式节点A节点B节点C节点B的ID第5位是隐性,节点A、C的为显性,总线电平为显性,节点B退出总线竞争。节点C的ID第3位是隐性,节点A的为显性,总线电平为显性,节点C退出总线竞争。从该分析过程得出结论是:帧ID值越小,优先级越高;对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理。SOF109876543210RTR/SRR总线仲裁由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平,所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高:节点A发送数据帧节点B发送远程帧ID[0:10]ID[0:10]节点A仲裁失败退出发送,进入只听模式;节点B获得总线,继续发送剩余数据。ID段相同只听模式……SOF109876543210RTR/SRRIDE总线仲裁由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐性电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。节点A发送标准帧节点B发送扩展帧ID[0:10]ID[0:10]当发送IDE位时,由于线与的原理,总线上出现显性电平,节点B仲裁失败,进入只听模式。节点A获得总线,继续发送剩余数据。……只听模式前11位ID相同控制段控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。DLCr0IDE标准格式识别符扩展位,占1bit,标准帧中该位位于控制段,为显性;扩展帧中该位位于仲裁段,为隐性。保留位0和1,各占1bit,总是用隐性电平填充扩展格式DLCr0r1数据段的长度码,占4bit;BCD编码,范围0~8帧起始仲裁段控制段数据段CRC段ACK段帧结束数据帧结构数据段一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合。与其他总线协议相比,CAN-bus的短帧结构具有以下优势:优势1:数据量小,发送和接收时间短,实时性高。优势2:数据量小,被干扰的概率小,抗干扰能力强。帧起始仲裁段控制段数据段CRC段ACK段帧结束数据帧结构Data:Byte0~Byte7传输时MSB先传输CRC段CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。CRC校验段由15位CRC值和1位CRC界定符构成。CRC界定符CRC值[0:14]占1bit,隐性电平填充帧起始仲裁段控制段数据段CRC段ACK段帧结束数据帧结构模2除以多项式G(x)X15+X14+X10+X8+X7+X4+X3+1ACK段当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。ACK界定符ACK槽1个隐性电平帧起始仲裁段控制段数据段CRC段ACK段帧结束数据帧结构ACK槽期间:发送节点:发送隐性电平接收正确的节点:发送显性电平总线线与结果:显性电平发送节点根据此结果判断发送成功目录概述远程帧过载帧与帧间隔错误帧数据帧小结远程帧与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)。帧起始仲裁段控制段CRC段ACK段帧结束帧结构IDDLCCRCEOFRTR1111114151117标准帧IDEr0118IDDLC1111141ID与标准帧相同扩展帧SRRIDERTRr1r0数据帧与远程帧区别数据帧与远程帧的区别如下:比较内容数据帧远程帧ID发送节点的ID被请求发送节点的IDSRR0(显性电平)1(隐性电平)RTR0(显性电平)1(隐性电平)DLC发送数据长度请求的数据长度是否有数据段是否CRC校验范围帧起始+仲裁段+控制段+数据段帧起始+仲裁段+控制段目录概述远程帧过载帧与帧间隔错误帧数据帧小结CAN-bus错误类型尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种。格式错误CRC错误应答错误位填充错误位发送错误发送节点计算得到的CRC值与接收到的CRC值不同时发生该错误发送节点在ACK阶段没有接收到应答信号时发生该错误发送节点在发送时发现总线电平与发送电平不相同时发生该错误通信线缆上传输信号违反“位填充”规则时发生该错误CAN-bus错误类型传输的数据帧格式与任何一种合法的帧格式不符时发生该错误111111118个连续隐性电平位错误帧当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识。错误标志1111116个连续隐性电平位111111118个连续隐性电平位错误帧结构主动错误标识被动错误标识由处于主动错误状态的节点发送由处于被动错误状态的节点发送错误界定符+1111116个连续显性电平位错误状态及转化为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为。主动错误被动错误总线关闭复位或检测到128次11位连续隐性位设备正常参与总线通信,检测到错误时发送主动错误标识数据帧的收发都被禁止设备正常参与总线通信,检测到错误时发送被动错误标识REC127且TEC127REC127或TEC127TEC255REC:接收错误计数器TEC:发送错误计数器;复位时两者都被清0。复位目录概述远程帧过载帧与帧间隔错误帧数据帧小结过载帧当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成。过载标志过载帧界定符+过载帧结构:111111118个连续隐性电平位6个连续显性电平位111111由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象。86过载标志过载标志重叠部分过载帧界定符帧间隔帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。其他帧帧间隔数据帧或远程帧过载帧或远程帧其他帧………………1:帧间隔过后,如果无节点发送帧,则总线进入空闲。…帧间隔0~∞…2:帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。…帧间隔传输延迟被动错误节点发送帧8个隐性位保证主动错误节点优先发送,避免被动错误节点因硬件故障干扰整个网络目录概述远程帧过载帧与帧间隔错误帧数据帧小结小结CAN-bus整个链路层处理数据的流程是:初始化等待空闲等待总线SOF或应用层的发送请求发送报文接收ACK等待EOF发送错误帧接收报文发送ACK等待EOF发送错误帧12224368575不取消发送请求发送请求检测到SOF仲裁失败失败失败EOF无效检测到错误失败失败成功EOF有效TEC和REC清0REC加1REC加8REC减1TEC减1TEC加8若TEC8则TEC加8若TEC255则断开连接成功成功无错成功