目录
CAN帧分类
上篇介绍了CAN-BUS物理层相关知识,下面将介绍CAN-BUS数据链路层(Data Link Layer)的相关内容,首先,数据链路层解决的问题是关于:收发目标的选择、数据校验、总线竞争、错误机制.....等内容。CAN-bus上传输的基本单位是CAN帧,CAN-bus通过不同的CAN帧实现不同的功能。CAN-BUS的通信帧分为数据帧、远程帧、错误帧、过载帧和帧间隔5种类型。
数据帧
数据帧是使用最多的帧,结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。
帧起始和帧结束
帧起始和帧结束用于界定一个数据帧,无论是标准数据帧或扩展数据帧都包含这两个段。帧起始由单个显性位组成。总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。帧结束由7个连续的隐性位组成。
仲裁段
CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。 根据CAN2.0标准版本不同,帧ID分为11位和29位两种。CAN-bus是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。
CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。
假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程如下:
从以上结果可以的出结论:帧ID越小,优先级越高,即上图中的发送顺序为:A-->C-->B。对于同为扩展格式数据帧,标准格式远程帧,扩展数据远程帧的处理方式也和上述一致。
由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平,所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高,即在下图中:节点A仲裁失败退出发送,进入只听模式;节点B获得总线,继续发送剩余数据。
根据上篇说的线“与”原理,由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐性电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。所以下图中节点B仲裁失败,进入只听模式。节点A获得总线,继续发送剩余数据。
控制段
控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。
数据段
一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合。与其他总线协议相比,CAN-bus的短帧结构具有以下优势:优 势 1:数据量小,发送和接收时间短,实时性高。优 势 2:数据量小,被干扰的概率小,抗干扰能力强。
MSB先传输即先传输高字节,后传输低字节,如0X12345678中高字节为0x12,低字节为0x78。
CRC段
CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。CRC校验段由15位CRC值和1位CRC界定符构成。
ACK段
当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。
远程帧
与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)。
数据帧与远程帧的区别
错误帧
CAN-bus错误类型
尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种。
当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识。
错误状态及转化
为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为。
过载帧
当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成。
由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象。
帧间隔
帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。
帧间隔过后,如果无节点发送帧,则总线进入空闲。
帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。
8个隐性位传输延迟:保证主动错误节点优先发送,避免被动错误节点因硬件故障干扰整个网络。
CAN-BUS整个链路层处理数据的流程