-
1 知识介绍
-
2 PPT
-
3 学习视频
-
4 随堂练习
-
5 超级工程
一、CAN通信帧类型及帧格式
CAN 总线上的数据通信基于以下 5 种类型的通信帧,它们的名称与用途如表所示:第一是数据帧,用来发送单元向接受单元传送数据;第二是遥控帧,用于接收单元向具有相同ID的发送单元请求数据;第三是错误帧,用于当检测出错误时向其他单元通知错误;第四是过载帧,用于接收单元通知发送单元其尚未做好接收准备;第五是帧间隔,用于将数据帧及遥控帧与前面的帧分离开来,防止帧数据重复和错乱。

在CAN通信帧中,数据帧和遥控帧有标准格式和扩展格式两种格式。

标准格式有11个位标识符,而扩展格式有29个位标识符。其他内容的格式基本相同。CAN标准帧和扩展帧在ID的长度上不一样,以能扩展更多的CAN节点,更好地支持上层协议。CAN协议的一个最大特点是废除了传统的站地址编码,而是对通信数据块进行编码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识符可由11位或29位二进制数组成,因此可以定义2或2个以上不同的数据块。这种按数据块编码的方式使不同的节点同时接收到相同的数据,在分布式控制系统中非常有用。数据段长度最多为8个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。
二、CAN数据帧
数据帧由 7 个段构成,如图所示:

分别是帧起始、仲裁段、控制段、数据段、CRC校验段、ACK段以及帧结束。图中深灰色底的位为“显性电平”,浅色底的位为 “显性或隐性电平”,白色底的位为“隐性电平”。CAN总线上的数据位采用具有两种互补的逻辑值,即显性(Dominant)和隐性(Recessive)。显性电平在逻辑层面表现为0,隐性电平在逻辑层面表现为1,即显性电平用逻辑“0”表示,隐性电平用逻辑“1”表示
其中数据帧结构的第一部分帧起始表示数据帧和远程帧的起始,它仅由一个“显性电平”位组成。CAN总线的同步规则规定,只有当总线处于空闲状态(总线电平呈现隐性状态)时,才允许站点开始发送信号。仲裁段表示帧优先级的段。标准帧的仲裁段由11个bit的标识符ID和RTR位构成;扩展帧的仲裁段由29个bit的标识符ID、SRR位、IDE位和RTR位构成。控制段是表示数据的字节数和保留位的段,标准帧与扩展帧的控制段格式不同。标准帧的 控制段由 IDE(Identifier Extension,标志符扩展)位、保留位 r0 和 4 个 bit 的数据长 度码 DLC 构成。扩展帧的控制段由保留位 r1、r0 和 4 个 bit 的数据长度码 DLC 构成。IDE 位 用于指示数据帧为标准帧还是扩展帧,标准帧的 IDE 位为“显性电平”。
数据长度码与字节数的关系如图所示:

其中数据长度代码DLC(Date Length Code),用于规定数据场的字节数,DLC的编码规则如表所示;最大为8字节,最小为0字节。“D”代表显性电平,为逻辑0;“R”代表隐形电平,为逻辑1。
数据段用于承载数据的内容,它可包含0~8个字节的数据,从MSB(最高有效位)开始输出;CRC段用于检查帧传输是否错误的段,它由15个bit的CRC序列和1个bit的CRC界定符(用于分隔)构成。CRC序列是根据多项式生成的CRC值,其计算范围包括帧起始、仲裁段、控制段和数据段;ACK段用于确认接收是否正常的段,它由ACK槽(ACK Slot)和ACK界定符(用于分隔)构成,长度为2个bit;最后是帧结束:表示数据帧的结束,它由7个bit的隐性位构成。
三、CAN遥控帧和错误帧

从图中可以看到,遥控帧与数据帧相比,除了没有数据段,其他段的构成均与数据帧完全相同。如前所述,RTR 位的极性指明了该帧是数据帧还是遥控帧,遥控帧中的 RTR 位 为“隐性电平”。RTR位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。它是区别数据帧和远程帧的标志。
错误帧用于在接收和发送消息时检测出错误并通知错误,从图可知,错误帧由错误标志和错误界定符构成。错误标志包括主动错误标志和被 动错误标志,前者由 6 个 bit 的显性位构成,后者由 6 个 bit 的隐性位构成。错误界定符由 8 个 bit 的隐性位构成。

四、CAN过载帧和帧间隔
过载帧是接收单元用于通知发送单元其尚未完成接收准备的帧:

从图可知,过载帧由过载标志和过载界定符构成。过载标志的构成与主动错误标志 的构成相同,由 6 个 bit 的显性位构成。过载界定符的构成与错误界定符的构成相同,由 8 个 bit 的隐性位构成。
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧或过载帧等)隔开,但错误帧和过载帧前不允许插入帧间隔。

如图所示,帧间隔的构成元素有三个:一是间隔,它由 3 个 bit 的隐性位构成;二是总线空闲,它由隐性电平构成,且无长度限制。注意:只有在总线处于空闲状态下,要发送的单元才可以开始访问总线;三是延迟传送,它由 8 个 bit 的隐性位构成。

